將 Apigee Hybrid 升級至 1.12 版

本程序涵蓋從 Apigee Hybrid 1.11.x 升級至 Apigee Hybrid 1.12.4,以及從 Hybrid 1.12.x 先前版本升級至 1.12.4 的程序。

針對次要版本升級 (例如從 1.11 升級至 1.12) 和修補程式版本升級 (例如從 1.12.0 升級至 1.12.4),請使用相同的程序。

如果您要從 Apigee Hybrid 1.10 以下版本升級,必須先升級至 Hybrid 1.11 版本,再升級至 1.12.4 版本。請參閱升級 Apigee Hybrid 至 1.11 版的操作說明。

Apigee Hybrid 1.11 的變更

Apigee Hybrid 1.12 版本引進了以下會影響升級程序的變更。如需 1.12 版的完整功能清單,請參閱混合型 1.12.0 版本資訊

  • Cassandra 4.x:從 1.12 版起,Apigee hybrid 會使用 Cassandra 4 以上版本。
  • apigeectl 淘汰:從 1.12 版起,Apigee Hybrid 僅支援 Helm,用於安裝及管理混合式安裝作業。
  • 我們推出一套新的指標,可用於監控 Apigee 代理程式和目標端點。對於混合型 v1.12,ProxyV2TargetV2 監控資源將不再預設使用。所有 Proxy 和 Target 指標都會發布至 ProxyTarget 受控資源。

    如要繼續將指標傳送至 ProxyV2TargetV2 受控資源,請在 overrides.yaml 中將 metrics.disablePrometheusPipeline 設為 true

    如果您已設定指標警示,請確認混合式安裝程序使用正確的指標。詳情請參閱「以指標為基礎的警報」。

  • 更嚴格的類別例項化檢查:從 1.12.4 版開始,Apigee hybrid 的 JavaCallout 政策現在在 Java 類別例項化期間提供額外安全性。這項進階安全防護措施可防止部署的政策直接或間接嘗試需要不允許權限的動作。

    在大多數情況下,現有政策會繼續正常運作,不會有任何問題。不過,依賴第三方程式庫的政策,或是含有會間接觸發需要提升權限的作業的自訂程式碼,都有可能受到影響。

開始升級至 1.12 版前應考量的問題

Cassandra 注意事項

從 Apigee hybrid 1.11 升級至 1.12 版本時,Cassandra 資料庫也會從 3.11.x 升級至 4.x。雖然 Cassandra 升級作業會在 Apigee 混合升級程序中處理,但請考量下列事項:

  • Cassandra 版本升級作業會在背景執行,且每次只會在 1 個 Pod (或 Cassandra 節點) 上進行,因此請在升級期間減少資料庫容量。
  • 請先調整 Cassandra 容量,並確保磁碟使用率接近或低於 50%,再開始升級。
  • 驗證並測試 Cassandra 備份和還原程序。
  • 請先備份混合式 1.11 版安裝程序中的 Cassandra 資料,再開始升級並驗證備份。
  • 由於 Cassandra 會執行升級後的工作,因此升級 apigee-datastore 會導致 CPU 用量暫時增加
  • 升級 apigee-datastore (Cassandra) 元件後,您就無法將該元件回溯至先前的版本。升級 apigee-datastore 元件後,如果要將升級作業回溯至混合型 1.12 版,有兩種情況:
    • 如果 apigee-datastore 元件處於良好狀態,但其他元件需要回溯,您可以個別回溯這些元件。
    • 如果 apigee-datastore 元件處於不良狀態,您必須從 v1.11 備份還原至 v1.11 安裝。

升級單一地區安裝作業前的注意事項

如果您需要回復至舊版 Apigee hybrid,可能需要停機。因此,如果您要升級單一區域的作業,建議您建立第二個區域,然後按照下列順序一次升級一個區域:

  1. 使用相同的混合型版本,在現有安裝項目中新增第二個區域。請參閱第 1.11 版說明文件中的「多地區部署」一節。
  2. 開始升級前,請先備份並驗證第一個區域的資料。請參閱 1.11 版說明文件中的「Cassandra 備份總覽」。
  3. 將新加入的區域升級至 Hybrid 1.12。
  4. 將流量切換至新區域,並驗證流量。
  5. 驗證完成後,請使用混合型 1.12 升級舊版區域。
  6. 將所有流量切換回舊區域,並驗證流量。
  7. 停用新區域。

升級多地區安裝作業前的注意事項

Apigee 建議您按照以下順序升級多區域安裝:

  1. 開始升級前,請先備份並驗證各個區域的資料。
  2. 請在一個區域中升級 Hybrid 版本,並確認所有 Pod 皆處於執行狀態,以便驗證升級作業。
  3. 驗證新升級區域的流量。
  4. 請在驗證先前區域的流量後,再升級後續區域。
  5. 如果需要在多區域部署中回溯升級,請準備將流量從失敗的區域切換,並考慮在將流量轉移的區域中增加足夠的容量,以便處理這兩個區域的流量。

必要條件

升級至混合型 1.12 版前,請確認安裝環境符合下列需求:

  • 使用 Helm 管理的 Apigee Hybrid 1.11 版本安裝作業。
  • Helm 版本 3.14.2 以上版本。
  • kubectl 1.27、1.28 或 1.29 版 (建議)。
  • cert-manager 1.13.0 版。如有需要,您可以在下方的「準備升級至版本」部分升級 cert-manager。

限制

規劃從 Apigee hybrid 1.11 升級至 1.12 時,請注意下列限制。如需在升級後復原或回復,事先做好規劃,就能減少停機時間。

  • 由於兩個版本不相容,因此無法在 Hybrid 1.12 中還原 Hybrid 1.11 的備份,反之亦然。
  • 升級至 1.12 版期間,您無法調整資料儲存庫 Pod。請先解決所有區域的縮放需求,再開始升級混合式安裝作業。
  • 在單一區域的混合式安裝作業中,一旦 Datastore 升級程序完成,就無法回溯 Datastore 元件。您無法將 Cassandra 4.x 資料儲存庫回溯至 Cassandra 3.x 資料儲存庫。這項作業需要從 Cassandra 3.x 資料的最新備份 (從混合雲版本 1.11 安裝) 還原資料。
  • 升級期間不支援刪除或新增區域。在多區域升級作業中,您必須先完成所有區域的升級作業,才能新增或刪除區域。

升級至 1.12.4 版總覽

升級 Apigee Hybrid 的程序分為以下幾個部分:

  1. 準備升級
    • 備份 Cassandra。
    • 備份混合式安裝目錄。
  2. 安裝 Hybrid 執行階段 1.12.4 版

準備升級至 1.12 版

備份 cassandra

  • 請先備份所有適用區域中的 Cassandra 資料庫,並驗證混合型 1.11 版本安裝中的資料,再開始升級。請參閱第 1.11 版說明文件中的「監控備份」一節。
  • 請先重新啟動叢集中的所有 Cassandra pod,再開始升級程序,以便找出任何未解決的問題。

    如要重新啟動及測試 Cassandra 容器,請個別刪除每個容器,每次刪除一個,然後驗證該容器是否會恢復到執行狀態,且就緒探針是否通過測試:

    1. 列出 Cassandra Pod:
      kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra

      例如:

      kubectl get pods -n apigee -l app=apigee-cassandra
      NAME                         READY   STATUS    RESTARTS   AGE
      apigee-cassandra-default-0   1/1     Running   0          2h
      apigee-cassandra-default-1   1/1     Running   0          2h
      apigee-cassandra-default-2   1/1     Running   0          2h
      
      . . .
    2. 刪除 pod:
      kubectl delete pod -n APIGEE_NAMESPACE CASSANDRA_POD_NAME

      例如:

      kubectl delete pod -n apigee apigee-cassandra-default-0
    3. 再次列出 cassandra pod 來檢查狀態:
      kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra

      例如:

      kubectl get pods -n apigee -l app=apigee-cassandra
      NAME                         READY   STATUS    RESTARTS   AGE
      apigee-cassandra-default-0   1/1     Running   0          16s
      apigee-cassandra-default-1   1/1     Running   0          2h
      apigee-cassandra-default-2   1/1     Running   0          2h
      
      . . .
  • 再次套用上次已知的覆寫檔案,確保該檔案未經任何變更,以便您使用相同的設定升級至混合型 1.12 版。
  • 請確認所有區域中的所有 Cassandra 節點都處於 UN (正常運作 / 正常) 狀態。如果任何 Cassandra 節點處於不同的狀態,請先解決問題,再開始升級。

    您可以使用下列指令驗證 Cassandra 節點的狀態:

    1. 列出 Cassandra Pod:
      kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra

      例如:

      kubectl get pods -n apigee -l app=apigee-cassandra
      NAME                         READY   STATUS    RESTARTS   AGE
      apigee-cassandra-default-0   1/1     Running   0          2h
      apigee-cassandra-default-1   1/1     Running   0          2h
      apigee-cassandra-default-2   1/1     Running   0          2h
      apigee-cassandra-default-3   1/1     Running   0          16m
      apigee-cassandra-default-4   1/1     Running   0          14m
      apigee-cassandra-default-5   1/1     Running   0          13m
      apigee-cassandra-default-6   1/1     Running   0          9m
      apigee-cassandra-default-7   1/1     Running   0          9m
      apigee-cassandra-default-8   1/1     Running   0          8m
    2. 使用 kubectl nodetool status 指令,檢查每個 Cassandra pod 的節點狀態:
      kubectl -n APIGEE_NAMESPACE exec -it CASSANDRA_POD_NAME -- nodetool status

      例如:

      kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool status
      Datacenter: us-east1
      ====================
      Status=Up/Down
      |/ State=Normal/Leaving/Joining/Moving
      --  Address      Load        Tokens       Owns (effective)  Host ID                               Rack
      UN  10.16.2.6    690.17 KiB  256          48.8%             b02089d1-0521-42e1-bbed-900656a58b68  ra-1
      UN  10.16.4.6    705.55 KiB  256          51.6%             dc6b7faf-6866-4044-9ac9-1269ebd85dab  ra-1
      UN  10.16.11.11  674.36 KiB  256          48.3%             c7906366-6c98-4ff6-a4fd-17c596c33cf7  ra-1
      UN  10.16.1.11   697.03 KiB  256          49.8%             ddf221aa-80aa-497d-b73f-67e576ff1a23  ra-1
      UN  10.16.5.13   703.64 KiB  256          50.9%             2f01ac42-4b6a-4f9e-a4eb-4734c24def95  ra-1
      UN  10.16.8.15   700.42 KiB  256          50.6%             a27f93af-f8a0-4c88-839f-2d653596efc2  ra-1
      UN  10.16.11.3   697.03 KiB  256          49.8%             dad221ff-dad1-de33-2cd3-f1.672367e6f  ra-1
      UN  10.16.14.16  704.04 KiB  256          50.9%             1feed042-a4b6-24ab-49a1-24d4cef95473  ra-1
      UN  10.16.16.1   699.82 KiB  256          50.6%             beef93af-fee0-8e9d-8bbf-efc22d653596  ra-1

備份混合式安裝目錄

  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.11 版 $APIGEE_HELM_CHARTS_HOME/ 目錄。您可以使用任何備份程序。舉例來說,您可以使用以下指令建立整個目錄的 tar 檔案:
    tar -czvf $APIGEE_HELM_CHARTS_HOME/../apigee-helm-charts-v1.11-backup.tar.gz $APIGEE_HELM_CHARTS_HOME
  3. 按照「Cassandra 備份和復原」一文中的操作說明,備份 Cassandra 資料庫。
  4. 如果您在覆寫值中使用服務憑證檔案 (.json) 來驗證服務帳戶,請確認服務帳戶憑證檔案位於正確的 Helm 圖表目錄中。Helm 圖表無法讀取各個圖表目錄以外的檔案。

    如果您使用 Kubernetes 機密或 Workload Identity 驗證服務帳戶,則不需要執行這個步驟。

    下表顯示各服務帳戶檔案的目的,取決於安裝類型:

    正式發布階段

    服務帳戶 預設檔案名稱 Helm 資訊套件目錄
    apigee-cassandra PROJECT_ID-apigee-cassandra.json $APIGEE_HELM_CHARTS_HOME/apigee-datastore/
    apigee-logger PROJECT_ID-apigee-logger.json $APIGEE_HELM_CHARTS_HOME/apigee-telemetry/
    apigee-mart PROJECT_ID-apigee-mart.json $APIGEE_HELM_CHARTS_HOME/apigee-org/
    apigee-metrics PROJECT_ID-apigee-metrics.json $APIGEE_HELM_CHARTS_HOME/apigee-telemetry/
    apigee-runtime PROJECT_ID-apigee-runtime.json $APIGEE_HELM_CHARTS_HOME/apigee-env
    apigee-synchronizer PROJECT_ID-apigee-synchronizer.json $APIGEE_HELM_CHARTS_HOME/apigee-env/
    apigee-udca PROJECT_ID-apigee-udca.json $APIGEE_HELM_CHARTS_HOME/apigee-org/
    apigee-watcher PROJECT_ID-apigee-watcher.json $APIGEE_HELM_CHARTS_HOME/apigee-org/

    非正式環境

    在下列各個目錄中複製 apigee-non-prod 服務帳戶檔案:

    服務帳戶 預設檔案名稱 Helm 資訊套件目錄
    apigee-non-prod PROJECT_ID-apigee-non-prod.json $APIGEE_HELM_CHARTS_HOME/apigee-datastore/
    $APIGEE_HELM_CHARTS_HOME/apigee-telemetry/
    $APIGEE_HELM_CHARTS_HOME/apigee-org/
    $APIGEE_HELM_CHARTS_HOME/apigee-env/
  5. 請確認您的 TLS 憑證和金鑰檔案 (.crt.key 和/或 .pem) 位於 $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/ 目錄中。

升級 Kubernetes 版本

請檢查您的 Kubernetes 平台版本,並視需要將 Kubernetes 平台升級至 hybrid 1.11 和 hybrid 1.12 都支援的版本。如需協助,請參閱平台的說明文件。

安裝 Hybrid 1.12.4 執行階段

準備升級 Helm 資訊套件

  1. 拉取 Apigee Helm 資訊套件。

    Apigee Hybrid 圖表會託管在 Google Artifact Registry 中:

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

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

    export CHART_REPO=oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts
    export CHART_VERSION=1.12.4
    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
    
  2. 視需要升級 cert-manager。

    如果您需要升級 cert-manager 版本,請使用下列指令安裝新版本:

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml
    
  3. 安裝更新版的 Apigee CRD:
    1. 執行下列指令,使用 kubectl 模擬測試功能:

      kubectl apply -k  apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false --dry-run
      
    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                    2023-10-09T14:48:30Z
      apigeedeployments.apigee.cloud.google.com                   2023-10-09T14:48:30Z
      apigeeenvironments.apigee.cloud.google.com                  2023-10-09T14:48:31Z
      apigeeissues.apigee.cloud.google.com                        2023-10-09T14:48:31Z
      apigeeorganizations.apigee.cloud.google.com                 2023-10-09T14:48:32Z
      apigeeredis.apigee.cloud.google.com                         2023-10-09T14:48:33Z
      apigeerouteconfigs.apigee.cloud.google.com                  2023-10-09T14:48:33Z
      apigeeroutes.apigee.cloud.google.com                        2023-10-09T14:48:33Z
      apigeetelemetries.apigee.cloud.google.com                   2023-10-09T14:48:34Z
      cassandradatareplications.apigee.cloud.google.com           2023-10-09T14:48:35Z
      
  4. 檢查叢集節點上的標籤。 根據預設,Apigee 會在標記為 cloud.google.com/gke-nodepool=apigee-data 的節點上排定資料 Pod,並在標記為 cloud.google.com/gke-nodepool=apigee-runtime 的節點上排定執行階段 Pod。您可以在 overrides.yaml 檔案中自訂節點叢集標籤。

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

安裝 Apigee Hybrid Helm 資訊套件

  1. 如果尚未建立,請前往 APIGEE_HELM_CHARTS_HOME 目錄。在該目錄中執行下列指令。
  2. 升級 Apigee Operator/Controller:

    模擬測試:

    helm upgrade operator apigee-operator/ \
      --install \
      --create-namespace \
      --namespace apigee-system \
      -f OVERRIDES_FILE \
      --dry-run
    

    升級圖表:

    helm upgrade operator apigee-operator/ \
      --install \
      --create-namespace \
      --namespace apigee-system \
      -f OVERRIDES_FILE
    

    確認 Apigee Operator 安裝作業:

    helm ls -n apigee-system
    
    NAME       NAMESPACE       REVISION   UPDATED                                STATUS     CHART                   APP VERSION
    operator   apigee-system   3          2023-06-26 00:42:44.492009 -0800 PST   deployed   apigee-operator-1.12.4   1.12.4

    確認可用性,確認該服務是否已啟用:

    kubectl -n apigee-system 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
    

    升級圖表:

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

    檢查 apigeedatastore 的狀態,確認其已啟用並執行:

    kubectl -n apigee 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
    

    升級圖表:

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

    查看狀態,確認服務已啟用及執行:

    kubectl -n apigee 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
    

    升級圖表:

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

    查看狀態,確認服務已啟用及執行:

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

    模擬測試:

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

    升級圖表:

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

    確認可用性,確認該服務是否已啟用:

    kubectl -n apigee 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
    

    升級圖表:

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

    檢查相關機構的狀態,確認該機構是否已啟用及運作:

    kubectl -n apigee get apigeeorg
    
    NAME                      STATE     AGE
    apigee-org1-xxxxx          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
    
    • ENV_RELEASE_NAME 是先前用來安裝 apigee-env 圖表的名稱。在 hybrid v1.10 中,通常是 apigee-env-ENV_NAME。在 Hybrid 1.11 以上版本中,通常是 ENV_NAME
    • ENV_NAME 是您要升級的環境名稱。
    • OVERRIDES_FILE 是 v.1.12.4 的新覆寫檔案

    升級圖表:

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

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

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

      模擬測試:

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

      ENV_GROUP_RELEASE_NAME 是先前用來安裝 apigee-virtualhost 圖表的名稱。在 hybrid v1.10 中,通常是 apigee-virtualhost-ENV_GROUP_NAME。在 Hybrid 1.11 以上版本中,通常是 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),而 ApigeeRoute (AR) 會在 Apigee 監控器從控制平面擷取環境群組相關詳細資料後,在內部建立。因此,請檢查對應的 AR 狀態是否正在執行:

      kubectl -n apigee get arc
      
      NAME                                STATE   AGE
      apigee-org1-dev-egroup                       2d
      kubectl -n apigee get ar
      
      NAME                                        STATE     AGE
      apigee-org1-dev-egroup-xxxxxx                running   2d

請按照這個程序,在從 1.12.3 或更早版本升級至 1.12.4 以上版本後,驗證 JavaCallout 政策的行為。

  1. 檢查 Java JAR 檔案是否要求不必要的權限

    政策部署完成後,請查看執行階段記錄,看看是否有下列記錄訊息:"Failed to load and initialize class ..."。如果您看到這則訊息,表示已部署的 JAR 要求了不必要的權限。如要解決這個問題,請調查 Java 程式碼並更新 JAR 檔案。

  2. 調查並更新 Java 程式碼

    請查看任何 Java 程式碼 (包括依附元件),找出可能不允許的作業原因。找到後,請視需要修改原始碼。

  3. 啟用安全性檢查功能來測試政策

    非正式版環境中,啟用安全性檢查標記,並使用更新版 JAR 重新部署政策。如要設定標記,請按照下列步驟操作:

    • apigee-env/values.yaml 檔案中,將 conf_security-secure.constructor.only 設為 runtime:cwcAppend: 下方的 true。例如:
      # Apigee Runtime
      runtime:
        cwcAppend:
          conf_security-secure.constructor.only: true
    • 更新環境的 apigee-env 圖表以套用變更。例如:
      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --set env=ENV_NAME \
        -f OVERRIDES_FILE

        ENV_RELEASE_NAME 是用於追蹤 apigee-env 圖表安裝和升級情形的名稱。此名稱不得與安裝項目中的其他 Helm 版本名稱重複。通常與 ENV_NAME 相同。不過,如果環境與環境群組的名稱相同,您必須為環境和環境群組使用不同的版本名稱,例如 dev-env-releasedev-envgroup-release。如要進一步瞭解 Helm 中的版本,請參閱 Helm 說明文件中的「三個主要概念 class="external"」。

    如果記錄訊息 "Failed to load and initialize class ..." 仍存在,請繼續修改及測試 JAR 檔案,直到記錄訊息不再顯示為止。

  4. 在實際環境中啟用安全性檢查

    在非正式環境中徹底測試並驗證 JAR 檔案後,請將標記 conf_security-secure.constructor.only 設為 true,並更新正式環境的 apigee-env 圖表,以便套用變更,在正式環境中啟用安全性檢查。

復原至先前版本

這一節會根據升級至 Apigee Hybrid 1.12 後的 apigee-datastore 元件狀態,分成幾個部分。當 apigee-datastore 處於良好狀態時,您可以使用單一區域或多區域回溯程序,並在 apigee-datastore 處於不良狀態時,使用還原或備份程序。

單一區域的回溯和復原作業

apigee-datastore 處於良好狀態時回復

本程序說明如何將所有 Apigee Hybrid 元件 (apigee-datastore 除外) 從 v1.12 回溯至 v1.11。1.12 版 apigee-datastore 元件與混合式 1.11 版元件回溯相容。

如要將單一區域安裝作業回溯至 1.11 版,請按照下列步驟操作:

  1. 開始復原前,請驗證所有 Pod 是否處於執行狀態:
    kubectl get pods -n APIGEE_NAMESPACE
    kubectl get pods -n apigee-system
  2. 使用 Helm 驗證元件的發布:
    helm -n APIGEE_NAMESPACE list
    helm -n apigee-system list

    例如

    helm -n apigee list
    NAME              NAMESPACE   REVISION   UPDATED                                   STATUS     CHART                           APP VERSION
    datastore         apigee      2          2024-03-29 17:08:07.917848253 +0000 UTC   deployed   apigee-datastore-1.12.0         1.12.0
    ingress-manager   apigee      2          2024-03-29 17:21:02.917333616 +0000 UTC   deployed   apigee-ingress-manager-1.12.0   1.12.0
    redis             apigee      2          2024-03-29 17:19:51.143728084 +0000 UTC   deployed   apigee-redis-1.12.0             1.12.0
    telemetry         apigee      2          2024-03-29 17:16:09.883885403 +0000 UTC   deployed   apigee-telemetry-1.12.0         1.12.0
    myhybridorg       apigee      2          2024-03-29 17:21:50.899855344 +0000 UTC   deployed   apigee-org-1.12.0               1.12.0
  3. 使用下列指令,回復每個元件 (apigee-datastore 除外):
    1. 建立下列環境變數:
      • PREVIOUS_HELM_CHARTS_HOME:安裝先前 Apigee hybrid Helm 資訊套件的目錄。這是您要復原的版本。
    2. 回復虛擬主機。針對覆寫檔案中提到的每個環境群組重複執行下列指令。
      helm upgrade ENV_GROUP_RELEASE_NAME $PREVIOUS_HELM_CHARTS_HOME/apigee-virtualhost/ \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set envgroup=ENV_GROUP_NAME \
        -f PREVIOUS_OVERRIDES_FILE
      

      ENV_GROUP_RELEASE_NAME 是先前用來安裝 apigee-virtualhost 圖表的名稱。在 hybrid v1.10 中,通常是 apigee-virtualhost-ENV_GROUP_NAME。在 Hybrid 1.11 以上版本中,通常是 ENV_GROUP_NAME

    3. 復原環境。針對覆寫檔案中提及的每個環境,重複執行下列指令。
      helm upgrade apigee-env-ENV_NAME $PREVIOUS_HELM_CHARTS_HOME/apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set env=ENV_NAME \
        -f PREVIOUS_OVERRIDES_FILE
      

      ENV_RELEASE_NAME 是先前用來安裝 apigee-env 圖表的名稱。在 hybrid v1.10 中,通常是 apigee-env-ENV_NAME。在 Hybrid 1.11 以上版本中,通常是 ENV_NAME

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

      kubectl -n apigee get apigeeenv
      
      NAME                  STATE     AGE   GATEWAYTYPE
      apigee-org1-dev-xxx   running   2d
    4. 復原機構:
      helm upgrade ORG_NAME $PREVIOUS_HELM_CHARTS_HOME/apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f PREVIOUS_OVERRIDES_FILE
      

      檢查相關機構的狀態,確認該機構是否已啟用及運作:

      kubectl -n apigee get apigeeorg
      
      NAME                STATE     AGE
      apigee-org1-xxxxx   running   2d
    5. 回溯 Ingress Manager:
      helm upgrade ingress-manager $PREVIOUS_HELM_CHARTS_HOME/apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f PREVIOUS_OVERRIDES_FILE
      

      確認可用性,確認該服務是否已啟用:

      kubectl -n apigee get deployment apigee-ingressgateway-manager
      
      NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-ingressgateway-manager   2/2     2            2           2d
    6. 回溯 Redis:
      helm upgrade redis $PREVIOUS_HELM_CHARTS_HOME/apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f PREVIOUS_OVERRIDES_FILE
      

      查看狀態,確認服務已啟用及執行:

      kubectl -n apigee get apigeeredis default
      
      NAME      STATE     AGE
      default   running   2d
    7. 回復 Apigee 遙測:
      helm upgrade telemetry $PREVIOUS_HELM_CHARTS_HOME/apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f PREVIOUS_OVERRIDES_FILE
      

      查看狀態,確認服務已啟用及執行:

      kubectl -n apigee get apigeetelemetry apigee-telemetry
      
      NAME               STATE     AGE
      apigee-telemetry   running   2d
    8. 回復 Apigee Controller:
      helm upgrade operator $PREVIOUS_HELM_CHARTS_HOME/apigee-operator/ \
        --install \
        --namespace apigee-system \
        --atomic \
        -f PREVIOUS_OVERRIDES_FILE

      確認 Apigee Operator 安裝作業:

      helm ls -n apigee-system
      
      NAME       NAMESPACE       REVISION   UPDATED                                STATUS     CHART                   APP VERSION
      operator   apigee-system   3          2023-06-26 00:42:44.492009 -0800 PST   deployed   apigee-operator-1.12.4   1.12.4

      確認可用性,確認該服務是否已啟用:

      kubectl -n apigee-system get deploy apigee-controller-manager
      
      NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-controller-manager   1/1     1            1           7d20h
    9. 回溯 Apigee Hybrid CRD:
      kubectl apply -k  $PREVIOUS_HELM_CHARTS_HOME/apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false
      
  4. 驗證所有 Pod 是否處於執行或已完成狀態:
    kubectl get pods -n APIGEE_NAMESPACE
    kubectl get pods -n apigee-system
  5. 驗證所有元件的發布作業。除了資料儲存庫以外,所有元件都應位於先前版本:
    helm -n APIGEE_NAMESPACE list
    helm -n apigee-system list

    例如

    helm -n apigee  list
    NAME              NAMESPACE  REVISION  UPDATED                                  STATUS    CHART                          APP VERSION
    datastore         apigee     2         2024-03-29 18:47:55.979671057 +0000 UTC  deployed  apigee-datastore-1.12.0        1.12.0
    ingress-manager   apigee     3         2024-03-14 19:14:57.905700154 +0000 UTC  deployed  apigee-ingress-manager-1.11.0  1.11.0
    redis             apigee     3         2024-03-14 19:15:49.406917944 +0000 UTC  deployed  apigee-redis-1.11.0            1.11.0
    telemetry         apigee     3         2024-03-14 19:17:04.803421424 +0000 UTC  deployed  apigee-telemetry-1.11.0        1.11.0
    myhybridorg       apigee     3         2024-03-14 19:13:17.807673713 +0000 UTC  deployed  apigee-org-1.11.0              1.11.0

apigee-datastore 處於不良狀態時還原

如果 apigee-datastore 元件升級失敗,您就無法將 apigee-datastore 從 1.12 版本回溯至 1.11 版本。您必須從 v1.11 安裝作業所建立的備份還原。請按照下列順序還原先前版本。

  1. 如果您沒有正在執行的 Apigee 混合式 1.11 版安裝 (例如在其他區域),請使用已備份的圖表和覆寫檔案,建立新的 v1.11 版安裝。請參閱 Apigee Hybrid 1.11 版本安裝說明
  2. 按照以下操作說明,從備份還原 v1.11 區域 (或新安裝):
  3. 驗證已還原安裝項目的流量
  4. 選用:按照「解除安裝 Hybrid 執行階段」一文的操作說明,移除 1.12 版的安裝內容。

多區域回溯及復原

apigee-datastore 處於良好狀態時回復

本程序說明如何將所有 Apigee Hybrid 元件 (apigee-datastore 除外) 從 v1.12 回溯至 v1.11。1.12 版 apigee-datastore 元件與混合式 1.11 版元件回溯相容。

  1. 開始復原前,請驗證所有 Pod 是否處於執行狀態:
    kubectl get pods -n APIGEE_NAMESPACE
    kubectl get pods -n apigee-system
  2. 請確認所有區域中的所有 Cassandra 節點皆處於 UN (正常運作 / 正常) 狀態。如果任何 Cassandra 節點處於不同的狀態,請先解決問題,再開始升級程序。

    您可以使用下列指令驗證 Cassandra 節點的狀態:

    1. 列出 Cassandra Pod:
      kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra

      例如:

      kubectl get pods -n apigee -l app=apigee-cassandra
      NAME                         READY   STATUS    RESTARTS   AGE
      apigee-cassandra-default-0   1/1     Running   0          2h
      apigee-cassandra-default-1   1/1     Running   0          2h
      apigee-cassandra-default-2   1/1     Running   0          2h
      apigee-cassandra-default-3   1/1     Running   0          16m
      apigee-cassandra-default-4   1/1     Running   0          14m
      apigee-cassandra-default-5   1/1     Running   0          13m
      apigee-cassandra-default-6   1/1     Running   0          9m
      apigee-cassandra-default-7   1/1     Running   0          9m
      apigee-cassandra-default-8   1/1     Running   0          8m
    2. 使用 kubectl nodetool status 指令檢查每個 Cassandra pod 的節點狀態:
      kubectl -n APIGEE_NAMESPACE exec -it CASSANDRA_POD_NAME -- nodetool -u JMX_USER -pw JMX_PASSWORD

      例如:

      kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u jmxuser -pw JMX_PASSWORD status
      Datacenter: us-east1
      ====================
      Status=Up/Down
      |/ State=Normal/Leaving/Joining/Moving
      --  Address      Load        Tokens   Owns (effective)   Host ID                                Rack
      UN  10.16.2.6    690.17 KiB  256      48.8%              b02089d1-0521-42e1-bbed-900656a58b68   ra-1
      UN  10.16.4.6    705.55 KiB  256      51.6%              dc6b7faf-6866-4044-9ac9-1269ebd85dab   ra-1
      UN  10.16.11.11  674.36 KiB  256      48.3%              c7906366-6c98-4ff6-a4fd-17c596c33cf7   ra-1
      UN  10.16.1.11   697.03 KiB  256      49.8%              ddf221aa-80aa-497d-b73f-67e576ff1a23   ra-1
      UN  10.16.5.13   703.64 KiB  256      50.9%              2f01ac42-4b6a-4f9e-a4eb-4734c24def95   ra-1
      UN  10.16.8.15   700.42 KiB  256      50.6%              a27f93af-f8a0-4c88-839f-2d653596efc2   ra-1
      UN  10.16.11.3   697.03 KiB  256      49.8%              dad221ff-dad1-de33-2cd3-f1.672367e6f   ra-1
      UN  10.16.14.16  704.04 KiB  256      50.9%              1feed042-a4b6-24ab-49a1-24d4cef95473   ra-1
      UN  10.16.16.1   699.82 KiB  256      50.6%              beef93af-fee0-8e9d-8bbf-efc22d653596   ra-1

    如果並非所有 Cassandra Pod 都處於 UN 狀態,請按照「從 Cassandra 叢集中移除 DOWN 節點」一文中的指示操作。

  3. 前往安裝先前 Apigee Hybrid Helm 圖表的目錄
  4. 將內容變更為已升級的區域
    kubectl config use-context UPGRADED_REGION_CONTEXT
        
  5. 驗證所有 Pod 是否處於執行狀態:
    kubectl get pods -n APIGEE_NAMESPACE
    kubectl get pods -n apigee-system
  6. 使用 helm 指令確認所有版本都已升級至 Hybrid 1.12 版:
    helm -n APIGEE_NAMESPACE list
    helm -n apigee-system list

    例如

    helm -n apigee list
    NAME             NAMESPACE  REVISION  UPDATED                                  STATUS    CHART                          APP VERSION
    datastore        apigee     2         2024-03-29 17:08:07.917848253 +0000 UTC  deployed  apigee-datastore-1.12.0        1.12.0
    ingress-manager  apigee     2         2024-03-29 17:21:02.917333616 +0000 UTC  deployed  apigee-ingress-manager-1.12.0  1.12.0
    redis            apigee     2         2024-03-29 17:19:51.143728084 +0000 UTC  deployed  apigee-redis-1.12.0            1.12.0
    telemetry        apigee     2         2024-03-29 17:16:09.883885403 +0000 UTC  deployed  apigee-telemetry-1.12.0        1.12.0
    myhybridorg      apigee     2         2024-03-29 17:21:50.899855344 +0000 UTC  deployed  apigee-org-1.12.0              1.12.0
  7. 使用下列指令,回復每個元件 (apigee-datastore 除外):
    1. 建立下列環境變數:
      • PREVIOUS_HELM_CHARTS_HOME:安裝先前 Apigee hybrid Helm 資訊套件的目錄。這是您要復原的版本。
    2. 回復虛擬主機。針對覆寫檔案中提到的每個環境群組重複執行下列指令。
      helm upgrade ENV_GROUP_RELEASE_NAME $PREVIOUS_HELM_CHARTS_HOME/apigee-virtualhost/ \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set envgroup=ENV_GROUP_NAME \
        -f PREVIOUS_OVERRIDES_FILE
      

      ENV_GROUP_RELEASE_NAME 是先前用來安裝 apigee-virtualhost 圖表的名稱。在 hybrid v1.10 中,通常是 apigee-virtualhost-ENV_GROUP_NAME。在 Hybrid 1.11 以上版本中,通常是 ENV_GROUP_NAME

    3. 復原環境。針對覆寫檔案中提及的每個環境,重複執行下列指令。
      helm upgrade apigee-env-ENV_NAME $PREVIOUS_HELM_CHARTS_HOME/apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set env=ENV_NAME \
        -f PREVIOUS_OVERRIDES_FILE
      

      ENV_RELEASE_NAME 是先前用來安裝 apigee-env 圖表的名稱。在 hybrid v1.10 中,通常是 apigee-env-ENV_NAME。在 Hybrid 1.11 以上版本中,通常是 ENV_NAME

      檢查各個環境的狀態,確認每個環境都已啟用並執行:

      kubectl -n apigee get apigeeenv
      
      NAME                  STATE     AGE   GATEWAYTYPE
      apigee-org1-dev-xxx   running   2d
    4. 復原機構:
      helm upgrade ORG_NAME $PREVIOUS_HELM_CHARTS_HOME/apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f PREVIOUS_OVERRIDES_FILE
      

      檢查相關機構的狀態,確認該機構是否已啟用及運作:

      kubectl -n apigee get apigeeorg
      
      NAME                STATE     AGE
      apigee-org1-xxxxx   running   2d
    5. 回溯 Ingress Manager:
      helm upgrade ingress-manager $PREVIOUS_HELM_CHARTS_HOME/apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f PREVIOUS_OVERRIDES_FILE
      

      確認可用性,確認該服務是否已啟用:

      kubectl -n apigee get deployment apigee-ingressgateway-manager
      
      NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-ingressgateway-manager   2/2     2            2           2d
    6. 回溯 Redis:
      helm upgrade redis $PREVIOUS_HELM_CHARTS_HOME/apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f PREVIOUS_OVERRIDES_FILE
      

      查看狀態,確認服務已啟用及執行:

      kubectl -n apigee get apigeeredis default
      
      NAME      STATE     AGE
      default   running   2d
    7. 回復 Apigee 遙測:
      helm upgrade telemetry $PREVIOUS_HELM_CHARTS_HOME/apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f PREVIOUS_OVERRIDES_FILE
      

      查看狀態,確認服務已啟用及執行:

      kubectl -n apigee get apigeetelemetry apigee-telemetry
      
      NAME               STATE     AGE
      apigee-telemetry   running   2d
    8. 回復 Apigee Controller:
      helm upgrade operator $PREVIOUS_HELM_CHARTS_HOME/apigee-operator/ \
        --install \
        --namespace apigee-system \
        --atomic \
        -f PREVIOUS_OVERRIDES_FILE
      

      確認 Apigee Operator 安裝作業:

      helm ls -n apigee-system
      
      NAME       NAMESPACE       REVISION   UPDATED                                STATUS     CHART                   APP VERSION
      operator   apigee-system   3          2023-06-26 00:42:44.492009 -0800 PST   deployed   apigee-operator-1.12.4   1.12.4

      確認可用性,確認該服務是否已啟用:

      kubectl -n apigee-system get deploy apigee-controller-manager
      
      NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-controller-manager   1/1     1            1           7d20h
    9. 回溯 Apigee Hybrid CRD:
      kubectl apply -k  $PREVIOUS_HELM_CHARTS_HOME/apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false
      
  8. 驗證所有元件的發布作業。所有元件都應包含在先前版本中,但 datastore 除外:
    helm -n APIGEE_NAMESPACE list
    helm -n apigee-system list

    例如

    helm -n apigee  list
    NAME              NAMESPACE  REVISION  UPDATED                                  STATUS    CHART                          APP VERSION
    datastore         apigee     2         2024-03-29 18:47:55.979671057 +0000 UTC  deployed  apigee-datastore-1.12.0        1.12.0
    ingress-manager   apigee     3         2024-03-14 19:14:57.905700154 +0000 UTC  deployed  apigee-ingress-manager-1.11.0  1.11.0
    redis             apigee     3         2024-03-14 19:15:49.406917944 +0000 UTC  deployed  apigee-redis-1.11.0            1.11.0
    telemetry         apigee     3         2024-03-14 19:17:04.803421424 +0000 UTC  deployed  apigee-telemetry-1.11.0        1.11.0
    myhybridorg       apigee     3         2024-03-14 19:13:17.807673713 +0000 UTC  deployed  apigee-org-1.11.0              1.11.0
    

    此時,除了 datastore 以外,所有版本都已復原至先前版本。

將多區域安裝作業還原至先前版本

在多區域升級中,如果升級失敗,請從多區域安裝中移除對該區域的參照,以便復原該區域。只有在 Hybrid 1.11 上至少有 1 個實況區域時,才能使用這種方法。v1.12 資料儲存庫與 v1.11 元件相容。

如要從正常運作的區域復原失敗的區域,請執行下列步驟:

  1. 將 API 流量從受影響的區域重新導向至正常運作的區域。並據此規劃容量,以支援從故障區域轉移的流量。
  2. 停用受影響的區域。針對每個受影響的區域,請按照「停用混合型區域」一節所述的步驟操作。請等待停用作業完成,再進行下一個步驟。

  3. 按照「從失敗的升級作業中復原區域」中的操作說明,清理失敗的區域。
  4. 復原受影響的區域。如要復原,請建立新的區域,如「GKE、GKE On-Prem 和 AKS 的多區域部署」一文所述。

從備份還原多區域安裝作業,其中 apigee-datastore 處於不良狀態

如果 apigee-datastore 元件的升級作業失敗,您就無法從 1.12 版本回溯至 1.11 版本。您必須從 v1.11 安裝作業所建立的備份還原。請按照下列順序還原先前版本。

  1. 如果您沒有正在執行的 Apigee 混合式 1.11 版安裝 (例如在其他區域),請使用已備份的圖表和覆寫檔案,建立新的 v1.11 版安裝。請參閱 Apigee Hybrid 1.11 版本安裝說明
  2. 按照以下操作說明,從備份還原 v1.11 區域 (或新安裝):
  3. 驗證已還原安裝項目的流量
  4. 如果是多區域安裝作業,請重建並還原下一個區域。請參閱「在多個區域中還原備份」一文中的操作說明。
  5. 按照「解除安裝 Hybrid 執行階段」一文的操作說明,移除 1.12 版的安裝作業。

附錄:從失敗的升級作業中復原區域

如果從 1.11 升級至 1.12 失敗,請移除資料中心。

  1. 驗證實際運作區域的 Cassandra 叢集狀態:
    1. 將 kubectl 背景資訊切換至要移除的區域:
      kubectl config use-context CONTEXT_OF_LIVE_REGION
    2. 列出 Cassandra Pod:
      kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra

      例如:

      kubectl get pods -n apigee -l app=apigee-cassandra
      NAME                 READY   STATUS    RESTARTS   AGE
      apigee-cassandra-default-0   1/1     Running   0          2h
      apigee-cassandra-default-1   1/1     Running   0          2h
      apigee-cassandra-default-2   1/1     Running   0          2h
    3. 執行其中一個 Cassandra Pod:
      kubectl exec -it -n CASSANDRA_POD_NAME -- /bin/bash
    4. 檢查 Cassandra 叢集的狀態:
      nodetool -u JMX_USER -pw JMX_PASSWORD status

      輸出內容應如下所示:

      Datacenter: dc-1
      ================
      Status=Up/Down
      |/ State=Normal/Leaving/Joining/Moving
      --  Address      Load        Tokens       Owns (effective)  Host ID                               Rack
      UN  10.48.12.16  813.84 KiB  256          100.0%            a6340ad9-37ba-4ec8-a8c2-f7b7ac931807  ra-1
      UN  10.48.14.16  859.89 KiB  256          100.0%            39f03c51-e387-4dac-8360-6d8732e690a7  ra-1
      UN  10.48.0.18   888.95 KiB  256          100.0%            0d57df49-52e4-4c01-832d-d9df845ab732  ra-1
      
    5. 描述叢集,確認您只會看到來自線上區域的 Cassandra Pod IP,且所有 Pod 都使用相同的結構定義版本:
      nodetool -u JMX_USER -pw JMX_PASSWORD describecluster

      輸出內容應如下所示:

      nodetool -u JMX_USER -pw JMX_PASSWORD describecluster
      
      Schema versions:
          4bebf2de-0582-31b4-9c5f-e36f60127e1b: [10.48.14.16, 10.48.12.16, 10.48.0.18]
      
  2. 清理 Cassandra 鍵值空間複本:
    1. 取得 user-setup 工作並刪除。系統會立即建立新的 user-setup 工作。
      kubectl get jobs -n APIGEE_NAMESPACE

      例如:

      kubectl get jobs -n apigee
        NAME                                                           COMPLETIONS   DURATION   AGE
        apigee-cassandra-schema-setup-myhybridorg-8b3e61d          1/1           6m35s      3h5m
        apigee-cassandra-schema-val-myhybridorg-8b3e61d-28499150   1/1           10s        9m22s
       apigee-cassandra-user-setup-myhybridorg-8b3e61d            0/1           21s        21s
      
      kubectl delete jobs USER_SETUP_JOB_NAME -n APIGEE_NAMESPACE

      輸出結果應顯示新工作開始的訊息:

      kubectl delete jobs apigee-cassandra-user-setup-myhybridorg-8b3e61d -n apigee
      
        apigee-cassandra-user-setup-myhybridorg-8b3e61d-wl92b         0/1     Init:0/1    0               1s
        
    2. 按照「建立用戶端容器」一節中的操作說明,建立用戶端容器,驗證 Cassandra 鍵值空間複製設定。
    3. 取得所有鍵值空間。執行 cassandra-client pod,然後啟動 cqlsh 用戶端:
      kubectl exec -it -n APIGEE_NAMESPACE cassandra-client -- /bin/bash

      請使用 ddl user 連線至 Cassandra 伺服器,因為該帳戶具備執行下列指令所需的權限:

      cqlsh apigee-cassandra-default.apigee.svc.cluster.local -u DDL_USER -p DDL_PASSWORD --ssl

      取得鍵值空間:

      select * from system_schema.keyspaces;

      輸出內容應如下所示,其中 dc-1 為即時 DC:

      select * from system_schema.keyspaces;
      
       keyspace_name            | durable_writes | replication
      --------------------------+----------------+--------------------------------------------------------------------------------
         kvm_myhybridorg_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
                    system_auth |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
                  system_schema |           True |                        {'class': 'org.apache.cassandra.locator.LocalStrategy'}
       quota_myhybridorg_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
       cache_myhybridorg_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
         rtc_myhybridorg_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
             system_distributed |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
                         system |           True |                        {'class': 'org.apache.cassandra.locator.LocalStrategy'}
                         perses |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
                  system_traces |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
         kms_myhybridorg_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
      
      (11 rows)
      
    4. 如果 user-setup 工作因故持續發生錯誤,且驗證失敗,請使用下列指令修正鍵值空間中的複寫作業。
      kubectl exec -it -n APIGEE_NAMESPACE cassandra-client -- /bin/bash

      請使用 ddl user 連線至 Cassandra 伺服器,因為該帳戶具備執行下列指令所需的權限:

      cqlsh apigee-cassandra-default.apigee.svc.cluster.local -u DDL_USER -p DDL_PASSWORD --ssl

      取得鍵值空間:

      select * from system_schema.keyspaces;

      請使用上述指令中的鍵值空間名稱,並在以下範例中進行替換

      alter keyspace quota_myhybridorg_hybrid WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
      alter keyspace kms_myhybridorg_hybrid WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
      alter keyspace kvm_myhybridorg_hybrid WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
      alter keyspace cache_myhybridorg_hybrid WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
      alter keyspace perses_myhybridorg_hybrid WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
      alter keyspace rtc_myhybridorg_hybrid WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
      alter keyspace system_auth WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
      alter keyspace system_distributed WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
      alter keyspace system_traces WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
    5. 請使用下列 cqlsh 指令,驗證所有鍵值空間是否已在正確的區域中複製:
      select * from system_schema.keyspaces;

      例如:

      select * from system_schema.keyspaces;
      
       keyspace_name           | durable_writes | replication
      -------------------------+----------------+--------------------------------------------------------------------------------
      kvm_myhybridorg_hybrid   |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
                system_auth    |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
              system_schema    |           True |                        {'class': 'org.apache.cassandra.locator.LocalStrategy'}
      quota_myhybridorg_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
      cache_myhybridorg_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
      rtc_myhybridorg_hybrid   |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
         system_distributed    |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
                     system    |           True |                        {'class': 'org.apache.cassandra.locator.LocalStrategy'}
                     perses    |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
              system_traces    |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
      kms_myhybridorg_hybrid   |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
      
      (11 rows)

在這個階段,您已從 Cassandra 叢集中完全移除所有已停用的 DC 參照。

附錄:從 Cassandra 叢集中移除 DOWN 節點

當您要回溯多區域安裝作業,且並非所有 Cassandra 容器都處於「上線 / 正常」(UN) 狀態時,請使用這個程序。

  1. 執行其中一個 Cassandra Pod:
    kubectl exec -it -n CASSANDRA_POD_NAME -- /bin/bash
  2. 檢查 Cassandra 叢集的狀態:
    nodetool -u JMX_USER -pw JMX_PASSWORD status
  3. 驗證節點是否確實處於「Down」狀態 (DN)。在 Cassandra pod 無法啟動的區域中,執行 Cassandra pod。
    Datacenter: dc-1
    ================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address      Load        Tokens  Owns (effective)  Host ID                               Rack
    UN  10.48.12.16  1.15 MiB    256     100.0%            a6340ad9-37ba-4ec8-a8c2-f7b7ac931807  ra-1
    UN  10.48.0.18   1.21 MiB    256     100.0%            0d57df49-52e4-4c01-832d-d9df845ab732  ra-1
    UN  10.48.14.16  1.18 MiB    256     100.0%            39f03c51-e387-4dac-8360-6d8732e690a7  ra-1
    
    Datacenter: us-west1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address      Load        Tokens  Owns (effective)  Host ID                               Rack
    DN  10.8.4.4     432.42 KiB  256     100.0%            cd672398-5c45-4c88-a424-86d757951e53  rc-1
    UN  10.8.19.6    5.8 MiB     256     100.0%            84f771f3-3632-4155-b27f-a67125d73bc5  rc-1
    UN  10.8.21.5    5.74 MiB    256     100.0%            f6f21b70-348d-482d-89fa-14b7147a5042  rc-1
    
  4. 移除對向下 (DN) 節點的參照。在上述範例中,我們將移除主機 10.8.4.4 的參照。
    kubectl exec -it -n apigee apigee-cassandra-default-2 -- /bin/bash
     nodetool -u JMX_USER -pw JMX_PASSWORD removenode HOST_ID
    
  5. 移除參照後,請終止 pod。新的 Cassandra 吊掛單元應該會啟動並加入叢集
    kubectl delete pod -n POD_NAME
  6. 驗證新的 Cassandra Pod 是否已加入叢集。
    Datacenter: dc-1
    ================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address      Load        Tokens  Owns (effective)  Host ID                               Rack
    UN  10.48.12.16  1.16 MiB    256     100.0%            a6340ad9-37ba-4ec8-a8c2-f7b7ac931807  ra-1
    UN  10.48.0.18   1.22 MiB    256     100.0%            0d57df49-52e4-4c01-832d-d9df845ab732  ra-1
    UN  10.48.14.16  1.19 MiB    256     100.0%            39f03c51-e387-4dac-8360-6d8732e690a7  ra-1
    
    Datacenter: us-west1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address      Load        Tokens  Owns (effective)  Host ID                               Rack
    UN  10.8.19.6    5.77 MiB    256     100.0%            84f771f3-3632-4155-b27f-a67125d73bc5  rc-1
    UN  10.8.4.5     246.99 KiB  256     100.0%            0182e675-eec8-4d68-a465-69211b621601  rc-1
    UN  10.8.21.5    5.69 MiB    256     100.0%            f6f21b70-348d-482d-89fa-14b7147a5042  rc-1

此時,您可以繼續升級或回溯叢集中的其他區域。

附錄:疑難排解:回溯後 apigee-datastore 處於停滯狀態

在升級後,如果 apigee-datastore 已還原為 hybrid 1.11,且處於卡住狀態,請使用這個程序。

  1. 再次修正資料儲存庫控制器狀態前,請先驗證該狀態是否為 releasing,且 Pod 不會隨著 Cassandra 叢集狀態啟動。
    1. 使用 Helm 指令驗證資料儲存庫是否已復原:
      helm -n APIGEE_NAMESPACE list

      例如:

      helm -n apigee list
      NAME              NAMESPACE  REVISION  UPDATED                                   STATUS    CHART                              APP VERSION
      datastore         apigee     3         2024-04-04 22:15:08.792539892 +0000 UTC   deployed   apigee-datastore-1.11.0           1.11.0
      ingress-manager   apigee     1         2024-04-02 22:24:27.564184968 +0000 UTC   deployed   apigee-ingress-manager-1.12.0     1.12.0
      redis             apigee     1         2024-04-02 22:23:59.938637491 +0000 UTC   deployed   apigee-redis-1.12.0               1.12.0
      telemetry         apigee     1         2024-04-02 22:23:39.458134303 +0000 UTC   deployed   apigee-telemetry-1.12             1.12.0
      myhybridorg       apigee     1         2024-04-02 23:36:32.614927914 +0000 UTC   deployed   apigee-org-1.12.0                 1.12.0
      
    2. 取得 Cassandra pod 的狀態:
      kubectl get pods -n APIGEE_NAMESPACE

      例如:

      kubectl get pods -n apigee
      NAME                         READY   STATUS             RESTARTS      AGE
      apigee-cassandra-default-0   1/1     Running            0             2h
      apigee-cassandra-default-1   1/1     Running            0             2h
      apigee-cassandra-default-2   0/1     CrashLoopBackOff   4 (13s ago)   2m13s
      
    3. 驗證 apigeeds 控制器是否卡在釋放狀態:
      kubectl get apigeeds -n APIGEE_NAMESPACE

      例如:

      kubectl get apigeeds -n apigee
      NAME      STATE       AGE
      default   releasing   46h
    4. 驗證 Cassandra 節點狀態 (請注意,其中一個節點處於 DN 狀態,也就是節點卡在 CrashLoopBackOff 狀態):
      kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u JMX_USER -pw JMX_PASSWORD status

      例如:

      kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u jmxuser -pw JMX_PASSWORD status
      Defaulted container "apigee-cassandra" out of: apigee-cassandra, apigee-cassandra-ulimit-init (init)
      Datacenter: us-west1
      ====================
      Status=Up/Down
      |/ State=Normal/Leaving/Joining/Moving
      --   Address       Load       Tokens   Owns (effective)   Host ID                               Rack
      UN   10.68.7.28    2.12 MiB   256      100.0%             4de9df37-3997-43e7-8b5b-632d1feb14d3  rc-1
      UN   10.68.10.29   2.14 MiB   256      100.0%             a54e673b-ec63-4c08-af32-ea6c00194452  rc-1
      DN   10.68.6.26    5.77 MiB   256      100.0%             0fe8c2f4-40bf-4ba8-887b-9462159cac45   rc-1
      
  2. 使用 1.12 版圖表升級資料儲存庫。
    helm upgrade datastore APIGEE_HELM_1.12.0_HOME/apigee-datastore/   --install   --namespace APIGEE_NAMESPACE   -f overrides.yaml
  3. 驗證所有 Pod 是否為 Running,並確認 Cassandra 叢集是否恢復正常。
    1. 再次驗證所有 Pod 是否為 READY
      kubectl get pods -n APIGEE_NAMESPACE

      例如:

      kubectl get pods -n apigee
      NAME                         READY   STATUS    RESTARTS   AGE
      apigee-cassandra-default-0   1/1     Running   0          29h
      apigee-cassandra-default-1   1/1     Running   0          29h
      apigee-cassandra-default-2   1/1     Running   0          60m
    2. 驗證 Cassandra 叢集狀態:
      kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u JMX_USER -pw JMX_PASSWORD status

      例如:

      kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u jmxuser -pw JMX_PASSWORD status
      Datacenter: us-west1
      ====================
      Status=Up/Down
      |/ State=Normal/Leaving/Joining/Moving
      --   Address       Load      Tokens   Owns (effective)   Host ID                                Rack
      UN   10.68.4.15    2.05 MiB  256      100.0%             0fe8c2f4-40bf-4ba8-887b-9462159cac45   rc-1
      UN   10.68.7.28    3.84 MiB  256      100.0%             4de9df37-3997-43e7-8b5b-632d1feb14d3   rc-1
      UN   10.68.10.29   3.91 MiB  256      100.0%             a54e673b-ec63-4c08-af32-ea6c00194452   rc-1
        
    3. 驗證 apigeeds 控制器的狀態:
      kubectl get apigeeds -n APIGEE_NAMESPACE

      例如:

      kubectl get apigeeds -n apigee
      NAME      STATE     AGE
      default   running   2d1h

此時,您已修正資料儲存庫,且資料儲存庫應處於 running 狀態。