將 Apigee Hybrid 升級至 1.16 版

本程序涵蓋從 Apigee Hybrid 1.15.x 版升級至 Apigee Hybrid 1.16.11 版,以及從先前的 Hybrid 1.16.x 版本升級至 1.16.11 版。

子版本升級 (例如從 1.15 版升級至 1.16 版) 和修補程式版本升級 (例如從 1.16.0 版升級至 1.16.11 版) 的程序相同。

如果您是從 Apigee hybrid 1.14 版或更舊版本升級,必須先升級至 hybrid 1.15 版,才能升級至 1.16.11 版。請參閱將 Apigee Hybrid 升級至 1.15 版的操作說明。

Apigee Hybrid 1.15 版異動

請注意下列異動:

  • Seccomp 設定檔:自 1.16 版起,Apigee hybrid 可將 Seccomp 設定檔套用至執行階段元件,大幅提升部署作業的資安態勢。這項功能可讓 Apigee 管理員和資安團隊限制容器化程序可對主機核心發出的系統呼叫。只要限制容器僅使用必要的系統呼叫,即可:
    • 強化安全性:降低容器逃逸和權限提升的風險。
    • 強制執行最小權限原則:確保元件只能存取運作所需的系統呼叫。
    • 符合法規遵循:提供重要控管機制,滿足嚴格的安全性法規遵循要求。
    詳情請參閱「設定 Pod 安全性的 Seccomp 設定檔」。
  • 移除 Apigee hybrid 中的 UDCA:在 Apigee hybrid 1.16 版中,統一資料收集代理程式 (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.11 版版本資訊」。

必要條件

升級至混合式 1.16 版前,請確認安裝作業符合下列需求:

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

  • Apigee hybrid 1.16.11 推出新的強化版個別環境 Proxy 限制,可讓您在單一環境中部署更多 Proxy 和共用流程。請參閱「限制:API Proxy」,瞭解每個環境可部署的 Proxy 和共用流程數量限制。這項功能僅適用於新建立的混合式組織,無法套用至升級後的組織。如要使用這項功能,請全新安裝 Hybrid 1.16.11,並建立新的組織。

    這項功能僅隨附於 2024 年會員方案,並受該會員方案授予的權利限制。如要進一步瞭解這項功能,請參閱「提高各環境的 Proxy 限制」。

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

    將 Apigee 控制器升級至 1.16.11 版時,所有 Apigee 部署作業都會進行滾動式重新啟動。如要在輪流重新啟動期間,盡可能縮短實際工作環境混合式環境的停機時間,請務必執行至少兩個叢集 (位於相同或不同的區域/資料中心)。將所有實際工作環境流量轉移至單一叢集,並將要升級的叢集設為離線,然後繼續升級程序。為每個叢集重複執行這項程序。

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

  • 升級期間,您不必完全暫停管理層變更。如果需要暫時停止管理層變更,我們會在下方的升級操作說明中註明。

升級至 1.16.11 版總覽

升級 Apigee hybrid 的程序分為下列各節:

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

準備升級至 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.11
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-guardrails 服務帳戶,才能升級 apigee-operator 圖表。

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

    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 Secret:

      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 新增「防護機制」
        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 權限,讓 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:Secret

        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:保管箱

        使用對應的憑證來源檔案,更新保管箱中 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 安裝項目已升級,這可能會導致流量問題。從舊版升級至 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 1.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.11 執行階段

    1. 如果尚未前往,請前往 APIGEE_HELM_CHARTS_HOME 目錄。從該目錄執行下列指令。
    2. 請參閱:

      模擬測試:

      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.11   1.16.11
      

      檢查可用性,確認伺服器已啟動並運作:

      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 Manager:

      模擬測試:

      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-release 和 dev-envgroup-release。如要進一步瞭解 Helm 中的版本,請參閱 Helm 說明文件中的「Three big concepts」(三大概念)。
      • ENV_NAME 是要升級的環境名稱。
      • OVERRIDES_FILE 是 1.16.11 版的新覆寫檔案

      升級圖表:

      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 監控程式從控制層提取環境群組相關詳細資料時,ApigeeRouteConfig (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. 還原圖表。下列指令假設您使用的是舊版 (v1.15.x) 的圖表。
      1. 為每個環境群組執行下列指令:

        helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --atomic \
          --set envgroup=ENV_GROUP_NAME \
          -f 1.15_OVERRIDES_FILE
        
      2. 請為每個環境執行下列指令:

        helm upgrade ENV_RELEASE_NAME apigee-env/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --atomic \
          --set env=ENV_NAME \
          -f 1.15_OVERRIDES_FILE
        
      3. apigee-org:

        helm upgrade ORG_NAME apigee-org/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --atomic \
          -f 1.15_OVERRIDES_FILE
        
      4. apigee-ingress-manager:

        helm upgrade ingress-manager apigee-ingress-manager/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --atomic \
          -f 1.15_OVERRIDES_FILE
        
      5. apigee-redis:

        helm upgrade redis apigee-redis/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --atomic \
          -f 1.15_OVERRIDES_FILE
        
      6. apigee-telemetry:

        helm upgrade telemetry apigee-telemetry/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --atomic \
          -f 1.15_OVERRIDES_FILE
        
      7. apigee-datastore:

        helm upgrade datastore apigee-datastore/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --atomic \
          -f 1.15_OVERRIDES_FILE
        
      8. apigee-operator:

        helm upgrade operator apigee-operator/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --atomic \
          -f 1.15_OVERRIDES_FILE
        
    2. 重新安裝舊版 CRD,還原 CRD。
      kubectl apply -k apigee-operator/etc/crds/default/ \
        --server-side \
        --force-conflicts \
        --validate=false