本程序涵蓋從 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 安裝及管理 Hybrid 安裝作業。 -
我們推出了一系列新指標,方便您監控 Apigee Proxy 和目標端點。對於 Hybrid v1.12,系統預設不會再使用
ProxyV2和TargetV2受監控資源。所有 Proxy 和目標指標都會發布至Proxy和Target受監控資源。如要繼續將指標發布至
ProxyV2和TargetV2受監控資源,請在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 Hybrid 升級程序的一部分,但請先規劃下列事項:
- Cassandra 版本升級會在背景進行,且一次只會在 1 個 Pod (或 Cassandra 節點) 上進行,因此請規劃升級期間的資料庫容量減少。
- 擴充 Cassandra 容量,並確保磁碟使用率接近或低於 50%,再開始升級。
- 驗證並測試 Cassandra 備份和還原程序。
- 開始升級前,請先備份混合式 1.11 安裝中的 Cassandra 資料,並驗證備份。
- 升級
apigee-datastore後,Cassandra會執行升級後工作,因此 CPU 消耗量會暫時增加 - 升級
apigee-datastore(Cassandra) 元件後,就無法將該元件還原為先前版本。升級apigee-datastore元件後,將升級作業還原至 Hybrid v1.12 有兩種情況:- 如果
apigee-datastore元件狀態良好,但其他元件需要回溯,您可以個別回溯這些元件。 - 如果
apigee-datastore元件狀態不佳,您必須將 v1.11 備份還原至 v1.11 安裝項目。
- 如果
升級單一區域安裝項目時的注意事項
如需還原至舊版 Apigee Hybrid,程序可能需要停機。因此,如果您要升級單一區域安裝作業,建議您建立第二個區域,然後依下列順序一次升級一個區域:
- 使用相同的混合版本,在現有安裝項目中新增第二個區域。請參閱 1.11 版說明文件中的「多地區部署」。
- 升級前,請先備份並驗證第一個區域的資料。請參閱版本 1.11 說明文件中的「Cassandra 備份總覽」。
- 將新加入的區域升級至 Hybrid 1.12。
- 將流量切換至新區域,並驗證流量。
- 驗證完成後,請使用混合式 1.12 升級舊版區域。
- 將所有流量切換回舊區域,並驗證流量。
- 停用新區域。
升級多區域安裝項目前的注意事項
Apigee 建議按照下列順序升級多區域安裝項目:
- 開始升級前,請先備份並驗證每個區域的資料。
- 在一個區域中升級 Hybrid 版本,並確認所有 Pod 都處於執行狀態,以驗證升級。
- 驗證新升級區域中的流量。
- 請先驗證前一個區域的流量,再升級後續區域。
- 如果多區域部署作業可能需要回溯升級,請準備將流量從發生故障的區域移開,並考慮在流量將導向的區域中增加足夠容量,以處理兩個區域的流量。
必要條件
升級至混合式 1.12 版前,請確認您的安裝作業符合下列需求:
- 使用 Helm 管理的 Apigee Hybrid 1.11 版安裝作業。
- 如果您使用
apigeectl管理混合式安裝作業,請先將叢集遷移至 Helm 管理。請參閱 Hybrid 1.11 版說明文件中的「將 Apigee Hybrid 從apigeectl遷移至 Helm」。 - 如果混合式安裝作業執行的版本舊於 1.11 版,請務必先升級至 1.11 版,再升級至 1.12 版。請參閱將 Apigee Hybrid 升級至 1.11 版。
- 如果您使用
- Helm 版本 v3.14.2 以上。
kubectl版本 1.27、1.28 或 1.29 (建議)。- cert-manager v1.13.0 版。如有需要,請參閱下方的「準備升級至版本」一節,瞭解如何升級 cert-manager。
限制
從 Apigee Hybrid 1.11 版升級至 1.12 版時,請注意下列限制。規劃有助於減少停機時間,以防升級後需要復原或還原。
- 由於兩個版本不相容,Hybrid 1.12 的備份無法在 Hybrid 1.11 中還原,反之亦然。
- 升級至 1.12 版時,您無法擴充資料儲存 Pod。開始升級混合式安裝架構前,請先滿足所有區域的擴充需求。
- 在單一區域混合安裝中,資料儲存庫升級程序完成後,您就無法回溯資料儲存庫元件。您無法將 Cassandra 4.x 資料儲存區回溯至 Cassandra 3.x 資料儲存區。這需要從最近一次備份的 Cassandra 3.x 資料 (來自混合式 1.11 安裝) 還原。
- 升級期間無法刪除或新增區域。在多區域升級中,您必須先完成所有區域的升級,才能新增或刪除區域。
升級至 1.12.4 版總覽
升級 Apigee Hybrid 的程序分為下列幾節:
準備升級至 1.12 版
備份 Cassandra
- 在所有適用區域備份 Cassandra 資料庫,並在開始升級前,驗證混合式 1.11 版安裝中的資料。請參閱版本 1.11 說明文件中的「監控備份作業」。
- 開始升級程序前,請先重新啟動叢集中的所有 Cassandra Pod,以便找出任何未解決的問題。
如要重新啟動及測試 Cassandra Pod,請一次刪除一個 Pod,然後確認 Pod 回到執行中狀態,且準備就緒探查通過:
-
列出 Cassandra Pod:
kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra
例如:
kubectl get pods -n apigee -l app=apigee-cassandraNAME 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 . . . -
刪除 Pod:
kubectl delete pod -n APIGEE_NAMESPACE CASSANDRA_POD_NAME
例如:
kubectl delete pod -n apigee apigee-cassandra-default-0 -
再次列出 Cassandra Pod,檢查狀態:
kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra
例如:
kubectl get pods -n apigee -l app=apigee-cassandraNAME 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 . . .
-
列出 Cassandra Pod:
- 再次套用最後一個已知的覆寫檔案,確保檔案沒有任何變更,這樣您就能使用相同的設定升級至混合式 1.12 版。
- 確認所有區域中的所有 Cassandra 節點都處於
UN(Up / Normal) 狀態。如有任何 Cassandra 節點處於不同狀態,請先解決該問題,再開始升級。您可以使用下列指令驗證 Cassandra 節點的狀態:
- 列出 Cassandra Pod:
kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra
例如:
kubectl get pods -n apigee -l app=apigee-cassandraNAME 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 - 使用
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 statusDatacenter: 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:
備份混合式安裝目錄
- 這些操作說明會使用環境變數 APIGEE_HELM_CHARTS_HOME,代表您在檔案系統中安裝 Helm 圖表的目錄。視需要切換至這個目錄,然後使用下列指令定義變數:
Linux
export APIGEE_HELM_CHARTS_HOME=$PWD
echo $APIGEE_HELM_CHARTS_HOMEMac OS
export APIGEE_HELM_CHARTS_HOME=$PWD
echo $APIGEE_HELM_CHARTS_HOMEWindows
set APIGEE_HELM_CHARTS_HOME=%CD%
echo %APIGEE_HELM_CHARTS_HOME% - 建立 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 - 按照「Cassandra 備份與復原」一文中的說明,備份 Cassandra 資料庫。
- 如果您在覆寫中使用服務憑證檔案 (
.json) 驗證服務帳戶,請確認服務帳戶憑證檔案位於正確的 Helm 圖表目錄中。Helm 圖表無法讀取各圖表目錄以外的檔案。如果您使用 Kubernetes 密鑰或 Workload Identity 驗證服務帳戶,則不需要執行這個步驟。
下表列出各項服務帳戶檔案的目標位置,視安裝類型而定:
正式環境
服務帳戶 預設檔案名稱 Helm 資訊套件目錄 apigee-cassandraPROJECT_ID-apigee-cassandra.json$APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-loggerPROJECT_ID-apigee-logger.json$APIGEE_HELM_CHARTS_HOME/apigee-telemetry/apigee-martPROJECT_ID-apigee-mart.json$APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-metricsPROJECT_ID-apigee-metrics.json$APIGEE_HELM_CHARTS_HOME/apigee-telemetry/apigee-runtimePROJECT_ID-apigee-runtime.json$APIGEE_HELM_CHARTS_HOME/apigee-envapigee-synchronizerPROJECT_ID-apigee-synchronizer.json$APIGEE_HELM_CHARTS_HOME/apigee-env/apigee-udcaPROJECT_ID-apigee-udca.json$APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-watcherPROJECT_ID-apigee-watcher.json$APIGEE_HELM_CHARTS_HOME/apigee-org/非正式環境
在下列每個目錄中,複製
apigee-non-prod服務帳戶檔案:服務帳戶 預設檔案名稱 Helm 資訊套件目錄 apigee-non-prodPROJECT_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/ -
請確認 TLS 憑證和金鑰檔案 (
.crt、.key和/或.pem) 位於$APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/目錄中。
升級 Kubernetes 版本
檢查 Kubernetes 平台版本,並視需要將 Kubernetes 平台升級至混合式 1.11 和混合式 1.12 支援的版本。如需協助,請參閱相關平台的說明文件。
安裝 Hybrid 1.12.4 執行階段
準備升級 Helm 資訊圖表
- 提取 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.12.4helm pull $CHART_REPO/apigee-operator --version $CHART_VERSION --untarhelm pull $CHART_REPO/apigee-datastore --version $CHART_VERSION --untarhelm pull $CHART_REPO/apigee-env --version $CHART_VERSION --untarhelm pull $CHART_REPO/apigee-ingress-manager --version $CHART_VERSION --untarhelm pull $CHART_REPO/apigee-org --version $CHART_VERSION --untarhelm pull $CHART_REPO/apigee-redis --version $CHART_VERSION --untarhelm pull $CHART_REPO/apigee-telemetry --version $CHART_VERSION --untarhelm pull $CHART_REPO/apigee-virtualhost --version $CHART_VERSION --untar - 視需要升級 cert-manager。
如要升級 cert-manager 版本,請使用下列指令安裝新版本:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml
- 安裝更新的 Apigee CRD:
-
執行下列指令,使用
kubectl模擬測試功能:kubectl apply -k apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false --dry-run
-
使用模擬測試指令驗證後,請執行下列指令:
kubectl apply -k apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false
- 使用
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
-
-
檢查叢集節點上的標籤。 根據預設,Apigee 會在標籤為
cloud.google.com/gke-nodepool=apigee-data的節點上排定資料 Pod,並在標籤為cloud.google.com/gke-nodepool=apigee-runtime的節點上排定執行階段 Pod。您可以在overrides.yaml檔案中自訂節點集區標籤。詳情請參閱「 設定專屬節點集區」。
安裝 Apigee Hybrid Helm 資訊套件
- 如果沒有,請前往
APIGEE_HELM_CHARTS_HOME目錄。從該目錄執行下列指令。 - 升級 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
- 升級 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
- 升級 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
- 升級 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
- 升級 Apigee Ingress 管理工具:
模擬測試:
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
- 升級 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
- 升級環境。
一次只能安裝一個環境。使用
--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 1.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
- ENV_RELEASE_NAME 是您先前安裝
-
升級環境群組 (
virtualhosts)。- 您一次只能升級一個環境群組 (虛擬主機)。使用
--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
ENV_GROUP_RELEASE_NAME 是您先前安裝
apigee-virtualhost圖表時使用的名稱。在 Hybrid 1.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
- 檢查 ApigeeRoute (AR) 的狀態。
安裝
virtualhosts會建立 ApigeeRouteConfig (ARC),一旦 Apigee 監控程式從控制層提取環境群組相關詳細資料,ARC 就會在內部建立 ApigeeRoute (AR)。因此,請檢查對應 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.4 後驗證政策
請按照這個程序操作,在從 1.12.3 或更早版本升級至 1.12.4 或更新版本後,驗證 JavaCallout 政策的行為。
- 檢查 Java JAR 檔案是否要求不必要的權限。
部署政策後,請檢查執行階段記錄,確認是否出現下列記錄訊息:
"Failed to load and initialize class ...". 如果看到這則訊息,表示已部署的 JAR 要求了不必要的權限。如要解決這個問題,請調查 Java 程式碼並更新 JAR 檔案。 - 調查並更新 Java 程式碼。
請檢查所有 Java 程式碼 (包括依附元件),找出可能導致不允許作業的原因。找到後,請視需要修改原始碼。
- 測試政策時啟用安全檢查功能。
在非正式版環境中,啟用安全性檢查標記,並使用更新的 JAR 重新部署政策。如要設定標記,請按照下列步驟操作:
- 在
apigee-env/values.yaml檔案中,將runtime:cwcAppend:下方的conf_security-secure.constructor.only設為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-release和dev-envgroup-release。如要進一步瞭解 Helm 中的發布版本,請參閱 Helm 說明文件中的「Three big concepts class="external"」。
如果記錄訊息
"Failed to load and initialize class ..."仍存在,請繼續修改及測試 JAR,直到記錄訊息不再顯示為止。 - 在
- 在正式環境中啟用安全檢查。
在非正式環境中徹底測試及驗證 JAR 檔案後,請將
conf_security-secure.constructor.only旗標設為true,並更新正式環境的apigee-env圖表,以套用變更,在正式環境中啟用安全性檢查。
還原至先前版本
本節會根據您升級至 Apigee Hybrid 1.12 版後 apigee-datastore 元件的狀態,分成不同部分。如果 apigee-datastore 元件狀態良好,您可以執行單一或多區域的回溯程序;如果 apigee-datastore 元件狀態不佳,則可執行復原或還原程序。
單一區域回溯與復原
apigee-datastore 處於良好狀態時復原
這項程序說明如何將所有 Apigee Hybrid 元件從 v1.12 回溯至 v1.11,但 apigee-datastore 除外。v1.12 apigee-datastore 元件可回溯相容於 Hybrid v1.11 元件。
如要將單一區域安裝作業還原至 1.11 版,請執行下列操作:
-
開始復原前,請先確認所有 Pod 都處於執行狀態:
kubectl get pods -n APIGEE_NAMESPACE
kubectl get pods -n apigee-system
-
使用 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
-
使用下列指令,將每個元件 (
apigee-datastore除外) 回復至先前版本:- 建立下列環境變數:
- PREVIOUS_HELM_CHARTS_HOME:先前安裝 Apigee Hybrid Helm 資訊套件的目錄。這是要復原的版本。
- 復原虛擬主機。針對覆寫檔案中提及的每個環境群組,重複執行下列指令。
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 1.10 中,這通常是apigee-virtualhost-ENV_GROUP_NAME。在 Hybrid 1.11 以上版本中,通常是 ENV_GROUP_NAME。 - 復原環境。針對覆寫檔案中提及的每個環境,重複執行下列指令。
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 1.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
- 復原機構:
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
- 復原 Ingress 管理工具:
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
- 還原 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
- 復原 Apigee Telemetry:
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
- 還原 Apigee 控制器:
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
- 回溯 Apigee Hybrid CRD:
kubectl apply -k $PREVIOUS_HELM_CHARTS_HOME/apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false
- 建立下列環境變數:
-
確認所有 Pod 都處於執行或完成狀態:
kubectl get pods -n APIGEE_NAMESPACE
kubectl get pods -n apigee-system
-
驗證所有元件的發布版本。除了資料儲存區以外,所有元件都應位於先前的版本:
helm -n APIGEE_NAMESPACE list
helm -n apigee-system list
例如
helm -n apigee listNAME 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 安裝的備份還原。請按照下列順序還原先前的版本。
- 如果您沒有 Apigee Hybrid 1.11 版的有效安裝項目 (例如在其他區域),請使用備份的圖表和覆寫檔案,建立 1.11 版的新安裝項目。請參閱 Apigee Hybrid 1.11 版安裝說明。
- 按照下列網頁的操作說明,從備份檔還原 v1.11 區域 (或新安裝項目):
- Cloud Storage 介面 (CSI) 備份: Cassandra CSI 備份與還原。
- 非 CSI 備份: 在單一區域還原。
- 確認還原的安裝項目流量
- 選用:按照「解除安裝 Hybrid 執行階段」一文中的指示,移除 1.12 版安裝項目。
多區域回溯與復原
當 apigee-datastore 處於良好狀態時復原
這項程序說明如何將所有 Apigee Hybrid 元件從 v1.12 回溯至 v1.11,但 apigee-datastore 除外。v1.12 apigee-datastore 元件可回溯相容於 Hybrid v1.11 元件。
-
開始復原前,請先確認所有 Pod 都處於執行狀態:
kubectl get pods -n APIGEE_NAMESPACE
kubectl get pods -n apigee-system
- 確認所有區域中的所有 Cassandra 節點都處於
UN(Up / Normal) 狀態。如有任何 Cassandra 節點處於不同狀態,請先解決該問題,再開始升級程序。您可以使用下列指令驗證 Cassandra 節點的狀態:
- 列出 Cassandra Pod:
kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra
例如:
kubectl get pods -n apigee -l app=apigee-cassandraNAME 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 - 使用
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 statusDatacenter: 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 節點」一文中的指示操作。 - 列出 Cassandra Pod:
- 前往先前安裝 Apigee Hybrid Helm 資訊圖表的目錄
-
將環境變更為已升級的區域
kubectl config use-context UPGRADED_REGION_CONTEXT -
確認所有 Pod 都處於執行狀態:
kubectl get pods -n APIGEE_NAMESPACE
kubectl get pods -n apigee-system
-
使用 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
-
使用下列指令,將每個元件 (
apigee-datastore除外) 回復至先前版本:- 建立下列環境變數:
- PREVIOUS_HELM_CHARTS_HOME:先前安裝 Apigee Hybrid Helm 資訊套件的目錄。這是要復原的版本。
- 復原虛擬主機。針對覆寫檔案中提及的每個環境群組,重複執行下列指令。
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 1.10 中,這通常是apigee-virtualhost-ENV_GROUP_NAME。在 Hybrid 1.11 以上版本中,通常是 ENV_GROUP_NAME。 - 復原環境。針對覆寫檔案中提及的每個環境,重複執行下列指令。
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 1.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
- 復原機構:
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
- 復原 Ingress 管理工具:
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
- 還原 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
- 復原 Apigee Telemetry:
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
- 還原 Apigee 控制器:
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
- 回溯 Apigee Hybrid CRD:
kubectl apply -k $PREVIOUS_HELM_CHARTS_HOME/apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false
- 建立下列環境變數:
-
驗證所有元件的發布版本。除了
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 元件相容。
如要從正常運作的區域復原失敗的區域,請按照下列步驟操作:
- 將受影響區域的 API 流量重新導向至運作正常的區域。請相應規劃容量,以支援來自故障區域的轉移流量。
- 停用受影響的區域。針對每個受影響的區域,請按照「停用混合型區域」一文中的步驟操作。請等待停用程序完成,再進行下一個步驟。
- 按照「從升級失敗的區域復原」一文中的操作說明,清除失敗的區域。
- 復原受影響的區域。如要復原,請按照「GKE、GKE On-Prem 和 AKS 的多區域部署」一文所述,建立新區域。
從備份還原處於不良狀態的apigee-datastore多區域安裝作業
如果 apigee-datastore 元件升級失敗,您就無法從 1.12 版還原至 1.11 版。您必須從 v1.11 安裝的備份還原。請按照下列順序還原先前的版本。
- 如果您沒有 Apigee Hybrid 1.11 版的有效安裝項目 (例如在其他區域),請使用備份的圖表和覆寫檔案,建立 1.11 版的新安裝項目。請參閱 Apigee Hybrid 1.11 版安裝說明。
- 按照下列網頁的操作說明,從備份檔還原 v1.11 區域 (或新安裝項目):
- Cloud Storage 介面 (CSI) 備份: Cassandra CSI 備份與還原。
- 非 CSI 備份: 在多個區域還原。
- 確認還原的安裝項目流量
- 如果是多區域安裝,請重建並還原下一個區域。如需相關操作說明,請參閱「在多個區域中還原」一文的「從備份還原」一節。
- 按照「解除安裝 Hybrid 執行階段」中的操作說明,移除 1.12 版的安裝項目。
附錄:從升級失敗的狀態復原區域
如果從 1.11 升級至 1.12 失敗,請移除資料中心。
-
從即時區域驗證 Cassandra 叢集狀態:
-
將 kubectl 環境切換至要移除的區域:
kubectl config use-context CONTEXT_OF_LIVE_REGION
- 列出 Cassandra Pod:
kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra
例如:
kubectl get pods -n apigee -l app=apigee-cassandraNAME 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 -
執行其中一個 Cassandra Pod:
kubectl exec -it -n CASSANDRA_POD_NAME -- /bin/bash
-
檢查 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
-
描述叢集,確認您只看到來自即時區域的 Cassandra Pod IP,且所有 IP 都位於相同結構定義版本:
nodetool -u JMX_USER -pw JMX_PASSWORD describecluster
輸出內容應如下所示:
nodetool -u JMX_USER -pw JMX_PASSWORD describeclusterSchema versions: 4bebf2de-0582-31b4-9c5f-e36f60127e1b: [10.48.14.16, 10.48.12.16, 10.48.0.18]
-
將 kubectl 環境切換至要移除的區域:
-
清除 Cassandra 鍵空間複寫:
-
取得
user-setup工作並刪除。系統會立即建立新的user-setup工作。kubectl get jobs -n APIGEE_NAMESPACE
例如:
kubectl get jobs -n apigeeNAME 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 21skubectl delete jobs USER_SETUP_JOB_NAME -n APIGEE_NAMESPACE
輸出內容應顯示新工作已啟動:
kubectl delete jobs apigee-cassandra-user-setup-myhybridorg-8b3e61d -n apigeeapigee-cassandra-user-setup-myhybridorg-8b3e61d-wl92b 0/1 Init:0/1 0 1s - 按照「建立用戶端容器」一文中的操作說明建立用戶端容器,驗證 Cassandra keyspace 複寫設定。
-
取得所有鍵空間。進入 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) - 如果
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'}; - 使用下列
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 Pod 都處於「Up」/「Normal」狀態 (UN),請按照這個程序操作。
-
執行其中一個 Cassandra Pod:
kubectl exec -it -n CASSANDRA_POD_NAME -- /bin/bash
-
檢查 Cassandra 叢集的狀態:
nodetool -u JMX_USER -pw JMX_PASSWORD status
-
確認節點確實處於「關閉」狀態 (
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
-
移除對下行 (
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
-
移除參照後,請終止 Pod。新的 Cassandra Pod 應會啟動並加入叢集
kubectl delete pod -n POD_NAME
-
確認新的 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 狀態
升級後,如果已回溯至混合式 1.11 版,且處於停滯狀態,請使用這個程序。
apigee-datastore
-
再次修正資料儲存庫控制器狀態前,請先驗證該狀態是否為
releasing,以及 Pod 是否未與 Cassandra 叢集狀態一起啟動。-
使用 Helm 指令驗證資料儲存庫是否已復原:
helm -n APIGEE_NAMESPACE list
例如:
helm -n apigee listNAME 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 -
取得 Cassandra Pod 的狀態:
kubectl get pods -n APIGEE_NAMESPACE
例如:
kubectl get pods -n apigeeNAME 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 -
確認
apigeeds控制器是否處於釋出狀態:kubectl get apigeeds -n APIGEE_NAMESPACE
例如:
kubectl get apigeeds -n apigeeNAME STATE AGE default releasing 46h -
驗證 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 statusDefaulted 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
-
使用 Helm 指令驗證資料儲存庫是否已復原:
-
使用 1.12 版圖表升級資料儲存庫。
helm upgrade datastore APIGEE_HELM_1.12.0_HOME/apigee-datastore/ --install --namespace APIGEE_NAMESPACE -f overrides.yaml
-
確認所有 Pod 都是
Running,且 Cassandra 叢集再次正常運作。-
再次驗證所有 Pod:
READYkubectl get pods -n APIGEE_NAMESPACE
例如:
kubectl get pods -n apigeeNAME 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 -
驗證 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 statusDatacenter: 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 -
驗證
apigeeds控制器的狀態:kubectl get apigeeds -n APIGEE_NAMESPACE
例如:
kubectl get apigeeds -n apigeeNAME STATE AGE default running 2d1h
-
再次驗證所有 Pod:
此時您已修正資料儲存區,應該處於 running 狀態。