將 Apigee Hybrid 升級至 1.16 版

本程序說明如何從 Apigee Hybrid 1.15.x 版升級至 1.16.0 版。

Apigee Hybrid 1.15 版的變更

請注意下列異動:

  • Seccomp 設定檔: 從1.16 版開始, Apigee Hybrid 現在可將 Seccomp 設定檔套用至執行階段元件, 大幅提升部署作業的安全性。Apigee 管理員和安全團隊可透過這項功能,限制容器化程序可對主機核心發出的系統呼叫。將容器限制為僅使用必要的系統呼叫,可達到下列目的:
    • 提升安全性:降低容器跳脫和權限提升的風險。
    • 強制執行最低權限:確保元件只能存取運作所需的確切系統呼叫。
    • Meet 法規遵循:提供重要控管機制,協助您滿足嚴格的安全性法規遵循要求。
    詳情請參閱「為 Pod 安全性設定 Seccomp 設定檔」。
  • 移除 Apigee Hybrid 中的 UDCA: 在 Apigee Hybrid 1.16 版中,已移除 Unified Data Collection Agent (UDCA) 元件。現在,將分析、追蹤和部署狀態資料傳送至 Apigee 控制平面的工作,會透過以 Google Cloud Pub/Sub 為基礎的資料管道處理。自 Apigee Hybrid 1.14.0 版起,系統預設使用以 Pub/Sub 為基礎的資料管道做為資料收集機制。
  • apigee-guardrails 服務帳戶: 在 1.16.0 版中,Apigee Hybrid 導入了 apigee-guardrails Google IAM 服務帳戶。安裝期間,apigee-operator 圖表會使用這項功能,檢查專案中是否已啟用所有必要的 API。

    請參閱:

  • 支援 cert-manager 1.18 和 1.19 版: Apigee Hybrid 1.16 版支援 cert-manager 1.18 版1.19 版。在 cert-manager 1.18 版中,Certificate.Spec.PrivateKey.rotationPolicy 的預設值有所變更,可能會影響流量。如果您要從舊版 Apigee Hybrid 升級,且要升級至 cert-manager 1.18 以上版本,請按照本指南中的「升級 cert-manager」程序操作。

如要進一步瞭解 Hybrid 1.16 版的功能,請參閱 Apigee Hybrid 1.16.0 版版本資訊

必要條件

升級至 Hybrid 1.16 版前,請確認您的安裝項目符合下列需求:

升級至 1.16.0 版前 - 限制和重要注意事項

  • Apigee Hybrid 1.16.0 推出新的環境專屬 Proxy 限制,可讓您在單一環境中部署更多 Proxy 和共用流程。請參閱「限制:API Proxy」一文,瞭解每個環境可部署的 Proxy 和共用流程數量限制。這項功能僅適用於新建立的混合式機構,無法套用至升級的機構。如要使用這項功能,請重新安裝 Hybrid 1.16.0,並建立新機構。

    這項功能僅適用於 2024 年訂閱方案,且須符合該方案的授權資格。如要進一步瞭解這項功能,請參閱「提升每個環境的 Proxy 限制」。

  • 升級至 Apigee Hybrid 1.16 版可能需要停機。

    將 Apigee 控制器升級至 1.16.0 版時,所有 Apigee 部署作業都會進行輪流重新啟動。如要在輪流重新啟動期間,盡量減少實際工作環境混合式環境的停機時間,請確保您至少執行兩個叢集 (位於相同或不同區域/資料中心)。將所有正式版流量轉移至單一叢集,並將即將升級的叢集離線,然後繼續進行升級程序。針對每個叢集重複執行上述程序。

    Apigee 建議您開始升級後,應盡快升級所有叢集,以減少對正式環境造成影響的機率。第一個叢集升級後,其餘叢集沒有升級時間限制。不過,在所有剩餘叢集升級前,Cassandra 備份和還原功能無法與混合版本搭配運作。舉例來說,您無法使用 Hybrid 1.15 的備份檔還原 Hybrid 1.16 執行個體。

  • 升級期間不需要完全暫停管理平面變更。 如需暫時停止管理平面變更,請參閱下方的升級說明。

升級至 1.16.0 版總覽

Apigee Hybrid 升級程序分為下列幾節:

  1. 準備升級
  2. 安裝混合式執行階段 1.16.0 版

準備升級至 1.16 版

備份混合式安裝作業

  1. 這些操作說明會使用環境變數 APIGEE_HELM_CHARTS_HOME,代表您在檔案系統中安裝 Helm 圖表的目錄。視需要切換至這個目錄,然後使用下列指令定義變數:

    Linux

    export APIGEE_HELM_CHARTS_HOME=$PWD
    echo $APIGEE_HELM_CHARTS_HOME

    Mac OS

    export APIGEE_HELM_CHARTS_HOME=$PWD
    echo $APIGEE_HELM_CHARTS_HOME

    Windows

    set APIGEE_HELM_CHARTS_HOME=%CD%
    echo %APIGEE_HELM_CHARTS_HOME%
  2. 備份 1.15 版 $APIGEE_HELM_CHARTS_HOME/ 目錄。你可以使用任何備份程序。舉例來說,您可以使用下列指令,建立整個目錄的 tar 檔案:
    tar -czvf $APIGEE_HELM_CHARTS_HOME/../apigee-helm-charts-v1.15-backup.tar.gz $APIGEE_HELM_CHARTS_HOME
  3. 按照「Cassandra 備份與復原」一文中的說明,備份 Cassandra 資料庫。
  4. 請確認 TLS 憑證和金鑰檔案 (.crt.key 和/或 .pem) 位於 $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/ 目錄中。

升級 Kubernetes 版本

檢查 Kubernetes 平台版本,並視需要將 Kubernetes 平台升級至混合式 1.15 和混合式 1.16 支援的版本。如需協助,請參閱相關平台的說明文件。

提取 Apigee Helm 資訊套件。

Apigee Hybrid 圖表託管於 Google Artifact Registry

oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts

使用 pull 指令,將所有 Apigee Hybrid Helm 圖表複製到本機儲存空間,指令如下:

export CHART_REPO=oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts
export CHART_VERSION=1.16.0
helm pull $CHART_REPO/apigee-operator --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-datastore --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-env --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-ingress-manager --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-org --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-redis --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-telemetry --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-virtualhost --version $CHART_VERSION --untar

編輯自訂 Apigee 命名空間的 kustomization.yaml

如果 Apigee 命名空間不是 apigee,請編輯 apigee-operator/etc/crds/default/kustomization.yaml 檔案,並將 namespace 值替換為 Apigee 命名空間。

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: APIGEE_NAMESPACE

如果您使用 apigee 做為命名空間,則不需要編輯檔案。

  • 安裝更新後的 Apigee CRD:
    1. 執行下列指令,使用 kubectl 模擬測試功能:

      kubectl apply -k  apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false --dry-run=server
      
    2. 使用模擬測試指令驗證後,請執行下列指令:

      kubectl apply -k  apigee-operator/etc/crds/default/ \
        --server-side \
        --force-conflicts \
        --validate=false
      
    3. 使用 kubectl get crds 指令驗證安裝:
      kubectl get crds | grep apigee

      輸出內容應如下所示:

      apigeedatastores.apigee.cloud.google.com                    2024-08-21T14:48:30Z
      apigeedeployments.apigee.cloud.google.com                   2024-08-21T14:48:30Z
      apigeeenvironments.apigee.cloud.google.com                  2024-08-21T14:48:31Z
      apigeeissues.apigee.cloud.google.com                        2024-08-21T14:48:31Z
      apigeeorganizations.apigee.cloud.google.com                 2024-08-21T14:48:32Z
      apigeeredis.apigee.cloud.google.com                         2024-08-21T14:48:33Z
      apigeerouteconfigs.apigee.cloud.google.com                  2024-08-21T14:48:33Z
      apigeeroutes.apigee.cloud.google.com                        2024-08-21T14:48:33Z
      apigeetelemetries.apigee.cloud.google.com                   2024-08-21T14:48:34Z
      cassandradatareplications.apigee.cloud.google.com           2024-08-21T14:48:35Z
      
  • 檢查叢集節點上的標籤。 根據預設,Apigee 會在標籤為 cloud.google.com/gke-nodepool=apigee-data 的節點上排定資料 Pod,並在標籤為 cloud.google.com/gke-nodepool=apigee-runtime 的節點上排定執行階段 Pod。您可以在 overrides.yaml 檔案中自訂節點集區標籤。

    詳情請參閱「設定專屬節點集區」。

  • 設定 apigee-guardrails 服務帳戶

    從 Hybrid 1.16 版開始,升級 apigee-operator 圖表時必須使用 apigee-guardrails 服務帳戶。

    在下列程序中,請選取您使用的服務帳戶驗證類型。

    1. 確認你可以執行 create-service-account。如果您剛下載圖表,create-service-account 檔案可能不是可執行模式。在 APIGEE_HELM_CHARTS_HOME 目錄中執行下列指令:
      ./apigee-operator/etc/tools/create-service-account --help

      如果輸出內容顯示 permission denied,您需要讓檔案可執行,例如在 Linux、MacOS 或 UNIX 中使用 chmod,或在 Windows 檔案總管中,或在 Windows 中使用 icacls 指令。例如:

      chmod +x ./apigee-operator/etc/tools/create-service-account
    2. 建立 apigee-guardrails 服務帳戶:

      Kubernetes Secret

      ./apigee-operator/etc/tools/create-service-account \
        --env prod \
        --profile apigee-guardrails \
        --dir service-accounts

      這項指令會建立 apigee-guardrails 服務帳戶,並將金鑰下載至 service-accounts/ 目錄。

      JSON 檔案

      ./apigee-operator/etc/tools/create-service-account \
        --env prod \
        --profile apigee-guardrails \
        --dir ./apigee-operator/

      這項指令會建立 apigee-guardrails 服務帳戶,並將金鑰下載至 apigee-operator/ 圖表目錄。

      保管箱

      ./apigee-operator/etc/tools/create-service-account \
        --env prod \
        --profile apigee-guardrails \
        --dir service-accounts

      這項指令會建立 apigee-guardrails 服務帳戶,並將金鑰下載至 service-accounts/ 目錄。

      GKE 的 WIF

      ./apigee-operator/etc/tools/create-service-account \
        --env prod \
        --profile apigee-guardrails \
        --dir service-accounts

      這項指令會建立 apigee-guardrails 服務帳戶,並將金鑰下載至 apigee-operator/etc/tools/service-accounts/ 目錄。您不需要下載的金鑰檔案,可以刪除。

      在其他平台使用 WIF

      ./apigee-operator/etc/tools/create-service-account \
        --env prod \
        --profile apigee-guardrails \
        --dir service-accounts

      這項指令會建立 apigee-guardrails 服務帳戶,並將金鑰下載至 service-accounts/ 目錄。

    3. 設定 apigee-guardrails 服務帳戶的驗證:

      Kubernetes Secret

      使用 service-accounts/ 目錄中的 apigee-guardrails 服務帳戶金鑰檔案建立 Kubernetes 密鑰:

      kubectl create secret generic apigee-guardrails-svc-account \
          --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-guardrails.json" \
          -n $APIGEE_NAMESPACE

      請將以下內容新增到您的 overrides.yaml 檔案中:

      guardrails:
        serviceAccountRef: apigee-guardrails-svc-account

      JSON 檔案

      overrides.yaml 檔案中新增下列內容,並使用 apigee-operator/ 目錄中 apigee-guardrails 服務帳戶金鑰檔案的路徑:

      guardrails:
        serviceAccountPath: $PROJECT_ID-apigee-guardrails.json

      保管箱

      1. 更新 Vault 密鑰 secret/data/apigee/orgsakeys,新增 guardrails 項目,並填入 apigee-guardrails 服務帳戶金鑰檔案的內容。
        vault kv patch secret/apigee/orgsakeys guardrails="$(cat ./service-accounts/hybrid115-apigee-guardrails.json)"
        
      2. 防護措施的 Kubernetes 服務帳戶 (KSA) 名稱為 apigee-operator-guardrails-sa。將 Guardrails KSA 新增至與 Vault 中 apigee-orgsakeys 角色繫結的機構專屬服務帳戶。
        1. 取得目前的 KSA 繫結清單:
          vault read auth/kubernetes/role/apigee-orgsakeys
          

          輸出內容應採用下列格式:

          Key                                         Value
          ---                                         -----
          alias_name_source                           serviceaccount_uid
          bound_service_account_names                 BOUND_SERVICE_ACCOUNT_NAMES
          bound_service_account_namespace_selector    n/a
          bound_service_account_namespaces            APIGEE_NAMESPACE

          在輸出內容中,BOUND_SERVICE_ACCOUNT_NAMES 是以半形逗號分隔的服務帳戶名稱清單。將 apigee-operator-guardrails-sa 新增至名稱清單。例如 (為方便閱讀而新增換行符):

          apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa,
          apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido
          rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c
          assandra-user-setup-myhybridorg-5b044c1,apigee-mart-myhybridorg-5b0
          44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect-
          agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee
          -metrics-apigee-telemetry,apigee-open-telemetry,apigee-synchronizer
          -myhybridorg-dev-ee52aca,apigee-runtime-telemetry-collector-apigee-
          telemetry,apigee-logger-apigee-e-myhybrridorg-dev-ee52aca,apigee-sy
          nchronizer-myhybridog-prod-2d0221c,apigee-runtime-myhybridorg-prod-
          2d0221c,apigee-operator-guardrails-sa
        2. 使用更新後的服務帳戶名稱清單,更新 apigee-orgsakeys 角色的繫結:
          vault write auth/kubernetes/role/apigee-orgsakeys \
            bound_service_account_names=UPDATED_BOUND_SERVICE_ACCOUNT_NAMES \
            bound_service_account_namespaces=APIGEE_NAMESPACE \
            policies=apigee-orgsakeys-auth \
            ttl=1m
          
      3. SecretProviderClass 中新增「guardrails」
        1. 編輯 spc-org.yaml 檔案。
        2. spec.parameters.objects 下方新增約束機制項目:
                - objectName: "guardrails"
                  secretPath: ""
                  secretKey: ""
        3. 更新 SecretProviderClass
          kubectl -n APIGEE_NAMESPACE apply -f spc-org.yaml
          

      GKE 的 WIF

      防護措施的 Kubernetes 服務帳戶 (KSA) 名稱為 apigee-operator-guardrails-sa。使用下列指令,為 apigee-guardrails Google 服務帳戶 (GSA) 建立繫結:

      gcloud iam service-accounts add-iam-policy-binding apigee-guardrails@$PROJECT_ID.iam.gserviceaccount.com \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$APIGEE_NAMESPACE/apigee-operator-guardrails-sa]" \
          --project $PROJECT_ID

      請將以下內容新增到您的 overrides.yaml 檔案中:

      guardrails:
        gsa: apigee-guardrails@$PROJECT_ID.iam.gserviceaccount.com

      在其他平台使用 WIF

      安全防護措施的 Kubernetes 服務帳戶 (KSA) 名稱為 apigee-operator-guardrails-sa。 您需要授予安全防護措施 KSA 模擬 apigee-guardrails Google 服務帳戶 (GSA) 的存取權,並設定覆寫項目以使用憑證設定檔。

      1. 使用下列指令授予 KSA 模擬 GSA 的存取權:

        範本

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-guardrails@$PROJECT_ID.iam.gserviceaccount.com \
          --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/system:serviceaccount:APIGEE_NAMESPACE:apigee-operator-guardrails-sa" \
          --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-guardrails@my-project.iam.gserviceaccount.com \
          --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-operator-guardrails-sa" \
          --role=roles/iam.workloadIdentityUser

        其中:

        • PROJECT_ID:您的 Google Cloud 專案 ID。
        • PROJECT_NUMBER:您建立 Workload Identity Pool 的專案專案編號
        • POOL_ID:Workload Identity Pool ID。
        • APIGEE_NAMESPACE:安裝 Apigee Hybrid 的命名空間。
      2. apigee-guardrails 服務帳戶建立憑證設定檔:
        gcloud iam workload-identity-pools create-cred-config \
          projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
          --service-account=apigee-guardrails@$PROJECT_ID.iam.gserviceaccount.com \
          --credential-source-file=/var/run/service-account/token \
          --credential-source-type=text \
          --output-file=apigee-guardrails-credential-configuration.json
            

        其中 WORKLOAD_PROVIDER_ID 是 workload identity pool 提供者 ID。

      3. 請使用下列任一方法,設定 apigee-guardrails 以搭配 Workload Identity Federation 使用:

        WIF:秘密

        1. 為每個憑證設定檔,使用憑證來源檔案建立新的 Kubernetes 密鑰。
          kubectl create secret -n APIGEE_NAMESPACE generic guardrails-workload-identity-secret --from-file="client_secret.json=./apigee-guardrails-credential-configuration.json"
        2. serviceAccountRef 的值替換為新密鑰:
          guardrails:
            serviceAccountRef: guardrails-workload-identity-secret

        WIF:檔案

        將產生的 apigee-guardrails-credential-configuration.json 檔案移至 apigee-operator/ 圖表目錄。

        請將以下內容新增到您的 overrides.yaml 檔案中:

        guardrails:
          serviceAccountPath: apigee-guardrails-credential-configuration.json

        WIF:保管箱

        在 Vault 中,使用對應的憑證來源檔案更新 guardrails 的服務帳戶金鑰:

        SAKEY=$(cat .apigee-guardrails-credential-configuration.json); kubectl -n APIGEE_NAMESPACE exec vault-0 -- vault kv patch secret/apigee/orgsakeys guardrails="$SAKEY"

        詳情請參閱 Storing service account keys in Hashicorp Vault

    升級 cert-manager

    Apigee Hybrid 1.16 支援 cert-manager 1.16 至 1.19 版。cert-manager 1.18 的變更可能會導致流量問題。在 cert-manager 1.18 版中,Certificate.Spec.PrivateKey.rotationPolicy 的預設值已從 Never 變更為 Always。如果是升級後的 Apigee Hybrid 安裝作業,這可能會導致流量問題。從舊版升級至混合式 1.16 版時,您必須編輯 apigee-ca 憑證,以補償這項變更,或將 cert-manager 版本維持在 1.17.x 版或更低版本。

    將 cert-manager 升級至 1.18 或 1.19 版前,請按照下列步驟編輯 apigee-ca 憑證,將 Certificate.Spec.PrivateKey.rotationPolicy 的值設為 Never

    1. 檢查 apigee-ca 憑證的內容,確認是否已設定 rotationPolicy
      kubectl get certificate apigee-ca -n cert-manager -o yaml
      

      在輸出內容中尋找 spec.privateKey 下的值:

      ...
      spec:
        commonName: apigee-hybrid
        duration: 87600h
        isCA: true
        issuerRef:
          group: cert-manager.io
          kind: ClusterIssuer
          name: apigee-root-certificate-issuer
        privateKey:
          algorithm: ECDSA
          # Note: rotationPolicy would appear here if it is set.
          size: 256
        secretName: apigee-ca
      ...
    2. 如果未設定 rotationPolicy 或設為 Always,請編輯 apigee-ca 憑證,將 rotationPolicy 的值設為 Never
      1. 請先執行模擬測試:
        kubectl patch Certificate \
          --dry-run=server \
          -n cert-manager \
          --type=json \
          -p='[{"op": "replace", "path": "/spec/privateKey/rotationPolicy", "value": "Never"}]' \
          -o=yaml \
          apigee-ca
        
      2. 修補憑證:
        kubectl patch Certificate \
          -n cert-manager \
          --type=json \
          -p='[{"op": "replace", "path": "/spec/privateKey/rotationPolicy", "value": "Never"}]' \
          -o=yaml \
          apigee-ca
        
    3. 確認 rotationPolicy 的值現在已設為 Never
      kubectl get certificate apigee-ca -n cert-manager -o yaml
      

      輸出內容應如下所示:

      ...
      spec:
        commonName: apigee-hybrid
        duration: 87600h
        isCA: true
        issuerRef:
          group: cert-manager.io
          kind: ClusterIssuer
          name: apigee-root-certificate-issuer
        privateKey:
          algorithm: ECDSA
          rotationPolicy: Never
          size: 256
        secretName: apigee-ca
      ...
    4. 升級 cert-manager。下列指令會下載並安裝 cert-manager v1.19.2:
      kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.19.2/cert-manager.yaml

      如需支援的版本清單,請參閱「支援的平台和版本:cert-manager」。

    請參閱:

    安裝 Hybrid 1.16.0 執行階段

    1. 如果沒有,請前往 APIGEE_HELM_CHARTS_HOME 目錄。從該目錄執行下列指令。
    2. 升級 Apigee Operator/Controller:

      模擬測試:

      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      升級圖表:

      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      驗證 Apigee Operator 安裝作業:

      helm ls -n APIGEE_NAMESPACE
      
      NAME       NAMESPACE       REVISION   UPDATED                                STATUS     CHART                   APP VERSION
      operator   apigee   3          2024-08-21 00:42:44.492009 -0800 PST   deployed   apigee-operator-1.16.0   1.16.0
      

      檢查可用性,確認該服務是否正常運作:

      kubectl -n APIGEE_NAMESPACE get deploy apigee-controller-manager
      
      NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-controller-manager   1/1     1            1           7d20h
      
    3. 升級 Apigee 資料儲存庫:

      模擬測試:

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      升級圖表:

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      檢查 apigeedatastore 的狀態,確認是否已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeedatastore default
      
      NAME      STATE       AGE
      default   running    2d
    4. 升級 Apigee 遙測功能:

      模擬測試:

      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      升級圖表:

      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      檢查狀態,確認服務已啟動並正常運作:

      kubectl -n APIGEE_NAMESPACE get apigeetelemetry apigee-telemetry
      
      NAME               STATE     AGE
      apigee-telemetry   running   2d
    5. 升級 Apigee Redis:

      模擬測試:

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      升級圖表:

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      檢查狀態,確認服務已啟動並正常運作:

      kubectl -n APIGEE_NAMESPACE get apigeeredis default
      
      NAME      STATE     AGE
      default   running   2d
    6. 升級 Apigee Ingress 管理工具:

      模擬測試:

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      升級圖表:

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      檢查可用性,確認該服務是否正常運作:

      kubectl -n APIGEE_NAMESPACE get deployment apigee-ingressgateway-manager
      
      NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-ingressgateway-manager   2/2     2            2           2d
    7. 升級 Apigee 機構:

      模擬測試:

      helm upgrade ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      升級圖表:

      helm upgrade ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      檢查相應機構的狀態,確認是否已啟動並正常運作:

      kubectl -n APIGEE_NAMESPACE get apigeeorg
      
      NAME                      STATE     AGE
      apigee-my-org-my-env      running   2d
    8. 升級環境。

      一次只能安裝一個環境。使用 --set env=ENV_NAME 指定環境。

      模擬測試:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --set env=ENV_NAME \
        -f OVERRIDES_FILE \
        --dry-run=server
      
      • ENV_RELEASE_NAME 是用於追蹤 apigee-env 圖表安裝和升級作業的名稱。這個名稱不得與安裝中的其他 Helm 版本名稱重複。 通常與 ENV_NAME 相同。不過,如果環境與環境群組的名稱相同,您必須為環境和環境群組使用不同的發布名稱,例如 dev-env-releasedev-envgroup-release。如要進一步瞭解 Helm 中的發布內容,請參閱 Helm 說明文件中的「三個重要概念」。
      • ENV_NAME 是您要升級的環境名稱。
      • OVERRIDES_FILE 是 v.1.16.0 的新覆寫檔案

      升級圖表:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --set env=ENV_NAME \
        -f OVERRIDES_FILE
      

      請檢查相應環境的狀態,確認該環境已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeeenv
      
      NAME                          STATE       AGE   GATEWAYTYPE
      apigee-my-org-my-env          running     2d
    9. 升級環境群組 (virtualhosts)。
      1. 您一次只能升級一個環境群組 (虛擬主機)。使用 --set envgroup=ENV_GROUP_NAME 指定環境群組。針對 overrides.yaml 檔案中提及的每個環境群組,重複執行下列指令:

        模擬測試:

        helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --set envgroup=ENV_GROUP_NAME \
          -f OVERRIDES_FILE \
          --dry-run=server
        

        ENV_GROUP_RELEASE_NAME 是您先前安裝 apigee-virtualhost 圖表時使用的名稱。通常是 ENV_GROUP_NAME

        升級圖表:

        helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --set envgroup=ENV_GROUP_NAME \
          -f OVERRIDES_FILE
        
      2. 檢查 ApigeeRoute (AR) 的狀態。

        安裝 virtualhosts 會建立 ApigeeRouteConfig (ARC),Apigee 監控程式從控制層提取環境群組相關詳細資料後,ARC 會在內部建立 ApigeeRoute (AR)。因此,請檢查對應 AR 的狀態是否為執行中:

        kubectl -n APIGEE_NAMESPACE get arc
        
        NAME                                STATE   AGE
        apigee-org1-dev-egroup                       2d
        kubectl -n APIGEE_NAMESPACE get ar
        
        NAME                                        STATE     AGE
        apigee-org1-dev-egroup-123abc               running   2d
    10. 確認所有安裝項目都已順利升級後,請從 apigee-system 命名空間刪除舊版 apigee-operator
      1. 解除安裝舊版 operator
        helm delete operator -n apigee-system
        
      2. 刪除 apigee-system 命名空間:
        kubectl delete namespace apigee-system
        
    11. 在 Apigee 命名空間中再次升級 operator,重新安裝已刪除的叢集範圍資源:
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      

    還原至先前版本

    如要復原至先前的版本,請使用舊版圖表,以相反順序復原升級程序。請先從 apigee-virtualhost 開始,然後逐步返回 apigee-operator,再還原 CRD。

    1. 將所有圖表從 apigee-virtualhost 還原至 apigee-datastore。下列指令假設您使用的是舊版 (v1.15.x) 的圖表。

      針對每個環境群組執行下列指令:

      helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
        --install \
        --namespace apigee \
        --atomic \
        --set envgroup=ENV_GROUP_NAME \
        -f 1.15_OVERRIDES_FILE
      

      針對每個環境執行下列指令:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace apigee \
        --atomic \
        --set env=ENV_NAME \
        -f 1.15_OVERRIDES_FILE
      

      還原 apigee-operator 以外的其餘圖表。

      helm upgrade ORG_NAME apigee-org/ \
        --install \
        --namespace apigee \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace apigee \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
      helm upgrade redis apigee-redis/ \
        --install \
        --namespace apigee \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace apigee \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace apigee \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
    2. 建立 apigee-system 命名空間。
      kubectl create namespace apigee-system
      
    3. 將資源註解修補回 apigee-system 命名空間。
      kubectl annotate --overwrite clusterIssuer apigee-ca-issuer meta.helm.sh/release-namespace='apigee-system'
      
    4. 如果也變更了發行名稱,請使用 operator 發行名稱更新註解。
      kubectl annotate --overwrite clusterIssuer apigee-ca-issuer meta.helm.sh/release-name='operator'
      
    5. apigee-operator 安裝回 apigee-system 命名空間。
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace apigee-system \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
    6. 重新安裝舊版 CRD,還原 CRD。
      kubectl apply -k apigee-operator/etc/crds/default/ \
        --server-side \
        --force-conflicts \
        --validate=false
      
    7. APIGEE_NAMESPACE 命名空間清除 apigee-operator 版本,完成回溯程序。
      helm uninstall operator -n APIGEE_NAMESPACE
      
    8. 部分叢集範圍資源 (例如 clusterIssuer) 會在解除安裝 operator 時刪除。使用下列指令重新安裝:
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace apigee-system \
        --atomic \
        -f 1.15_OVERRIDES_FILE