本頁面說明如何將 Apigee 混合式機構從一個 Kubernetes 叢集遷移至另一個叢集。以下是可能需要將機構遷移至其他叢集的情況:
- 代管現有叢集的資料中心已無容量可用,或正在停用。
- 叢集執行舊版基礎架構或舊版 Kubernetes,而您想要遷移至採用較新基礎架構的叢集。
- 您想將多機構叢集中的機構移至個別叢集。
請注意,將機構遷移至其他混合型叢集時,可能會面臨風險和限制。執行遷移作業前,請先詳閱「限制」一節中的詳細說明。
限制
將混合式機構遷移至其他 Kubernetes 叢集時,請注意下列限制:
- 將機構資料移至新的 Kubernetes 叢集時,可能會發生資料遺失的風險。 遷移機構前,請使用混合式備份操作說明備份 Kubernetes 叢集中所有機構的資料。
- 在機構的所有鍵值空間中,機構遷移作業支援的資料大小上限為 5 GB,不含快取和配額。
- 系統不會遷移快取資料。Hybrid 會重建快取資料。
- 系統不會遷移配額資料。Hybrid 會重設配額資料。
- 您只能將機構遷移至不含現有混合式部署的 Kubernetes 叢集。系統不支援遷移至含有現有混合式部署的叢集。
- 遷移的機構只能移至單一地區部署的新叢集。 單一地區部署作業完成並開始運作後,您可以按照「多地區部署」一節所述的地區擴充程序,將服務擴展到其他地區。
- Cassandra 叢集應在所有區域中運作良好。
遷移機構
請按照下列操作說明,將混合式機構從一個 Kubernetes 叢集遷移至另一個叢集:
- 如果尚未啟用,請在 Kubernetes 叢集中啟用備份功能,其中包含要遷移的混合式組織。如需混合備份的相關資訊,請參閱 Cassandra 備份總覽。
- 使用下列指令啟動混合式備份工作:
kubectl create job -n apigee --from=cronjob/apigee-cassandra-backup <backup job name>
<backup job name>
可以是任何有效的容器名稱。 - 備份工作完成後,請按照「監控備份」一節的操作說明,確認備份作業是否已順利完成:
- 「檢查備份工作的狀態」
- 「檢查備份記錄」
- 確認備份作業成功後,請記下備份記錄結尾處的 ID 編號。舉例來說,成功備份的記錄應包含以下這一行:
記下行尾的多位數字。您稍後會需要這組號碼。INFO: completed upload for 20230207004250
- 將 Kubernetes 結構定義切換至目的地 Kubernetes 叢集:
kubectl config use-context <destination cluster name> # <destination cluster name>
其中
<destination cluster name>
是目標 Kubernetes 叢集的名稱。 - 按照「
在單一地區中還原」一文中的指示,將備份資料還原至目的地 Kubernetes 叢集。
- 針對要遷移至目的地混合式部署的機構組織,使用 overrides.yaml 檔案。
- 請記得將
restore:snapshotTimestamp
值設為步驟 4 中備份記錄顯示的多位數字。請參閱「 在單一區域中還原」。
- 還原作業完成後,請從目的地 Kubernetes 叢集中刪除所有機構資料 (除了要遷移的機構資料)。混合式備份檔案包含所有機構的資料,包括您可能不想遷移的資料。目的地混合式部署作業還原後,您必須按照下列步驟移除已複製到部署作業的任何額外機構資料:
- 確認目前的背景資訊是否為目的地 Kubernetes 叢集的正確背景資訊:
kubectl config current-context
- 執行
apigee-cassandra-default-0
pod:kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
- 執行下列指令:
find /opt/apigee/data/apigee-cassandra/ -iname '*_hybrid' -not -iname '*<migrated org name>*' -type d -maxdepth 2 -printf "%f\n"
如要瞭解如何找出
<migrated org name>
,請參閱「取得已遷移機構的名稱」。複製輸出內容中顯示的所有名稱清單。您將在步驟 7 中使用這份清單。
- 退出
apigee-cassandra-default-0
pod。 - 按照「
建立用於偵錯的用戶端容器」一文中的操作說明,建立 Cassandra 偵錯用戶端 Pod。收到
cqlsh
提示後,請繼續執行下一個步驟。 - 在
cqlsh
提示字元中執行下列指令:-
desc keyspaces;
請確認這項指令不會傳回錯誤。
- 針對步驟 7. c. 中建立的清單中每個名稱,執行下列指令:
drop keyspace <name>
-
- 退出 Cassandra 偵錯用戶端 pod。
- 執行
cqlsh
指令後,請針對目的地 Kubernetes 叢集中的所有 Cassandra 容器執行下列指令:kubectl exec -it -n apigee
-- /bin/bash find /opt/apigee/data/apigee-cassandra/ -iname '*_hybrid' -not -iname '*<migrated org name>*' -type d -maxdepth 2
如要瞭解如何找出
<migrated org name>
,請參閱「取得已遷移機構的名稱」。find /opt/apigee/data/apigee-cassandra/ -iname '*_hybrid' -not -iname '*
*' -type d -maxdepth 2 -exec rm -rf {} +
- 退出 Cassandra pod。
- 確認目前的背景資訊是否為目的地 Kubernetes 叢集的正確背景資訊:
- 將 Kubernetes 結構定義切換至來源 Kubernetes 叢集:
kubectl config use-context <source cluster name>
其中
<source cluster name>
是來源 Kubernetes 叢集的名稱。 - 從來源 Kubernetes 叢集中刪除已遷移的機構。請務必在刪除指令中使用該機構的
overrides.yaml
檔案:- 確認目前的背景資訊是來源 Kubernetes 叢集的正確背景資訊:
kubectl config current-context
視需要將 Kubernetes 情境設為叢集和組織需要停用的叢集。
列出目前的背景資訊,查看每個叢集的背景資訊名稱:
kubectl config get-contexts
將結構定義設為要停用的叢集和區域:
kubectl config use-context CONTEXT_NAME
其中 CONTEXT_NAME 是叢集和區域的內容名稱。
例如:
kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE gke_example-org-1_us-central1_example-cluster-1 gke_example-org-1_us-central1_example-cluster-1 gke_example-org-1_us-central1_example-cluster-1 apigee * gke_example-org-1_us-central1_example-cluster-2 gke_example-org-1_us-central1_example-cluster-2 gke_example-org-1_us-central1_example-cluster-2 apigee gke_example-org-1_us-west1_example-cluster-2 gke_example-org-1_us-west1_example-cluster-2 gke_example-org-1_us-west1_example-cluster-2 apigeekubectl config use-context gke_example-org-1_us-west1_example-cluster-2
- 刪除虛擬主機。
Helm
針對每個環境群組重複執行這項操作:
helm -n apigee delete ENV_GROUP_NAME
apigeectl
$APIGEECTL_HOME/apigeectl delete --settings virtualhost -f OVERRIDES_FILE.yaml
- 刪除環境。
Helm
針對每個環境重複執行這項操作:
helm -n apigee delete ENV_NAME
apigeectl
$APIGEECTL_HOME/apigeectl delete --all-envs -f OVERRIDES_FILE.yaml
- 刪除 Apigee 機構。
Helm
helm -n apigee delete ORG_NAME
apigeectl
$APIGEECTL_HOME/apigeectl delete -f OVERRIDES_FILE.yaml --org
- 執行 apigee-cassandra-default-0 Pod:
kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
- 執行下列指令:
find /opt/apigee/data/apigee-cassandra/ -iname '*<migrated org name>_hybrid' -type d -maxdepth 2 -printf "%f\n"
如要瞭解如何找出
<migrated org name>
,請參閱「取得已遷移機構的名稱」一文。複製輸出內容中顯示的所有名稱清單。您將在步驟 9 中使用這份清單。 j。
- 退出
apigee-cassandra-default-0
pod。 - 按照「
建立用於偵錯的用戶端容器」一文中的操作說明,建立 Cassandra 偵錯用戶端 Pod。收到
cqlsh
提示後,請繼續執行下一個步驟。 - 在
cqlsh
提示中執行下列指令:desc keyspaces;
請確認這項指令不會傳回錯誤。
- 針對步驟 10 中建立的清單中每個名稱,執行下列指令:
drop keyspace <name>;
- 退出 Cassandra 偵錯用戶端 pod。 執行
-
kubectl exec -it -n apigee <cassandra pod name> -- /bin/bash
-
find /opt/apigee/data/apigee-cassandra/ -iname '*<migrated org name>_hybrid' -type d -maxdepth 2
如要瞭解如何找出
<migrated org name>
,請參閱「取得已遷移機構的名稱」。 -
find /opt/apigee/data/apigee-cassandra/ -iname '*<migrated org name>_hybrid' -type d -maxdepth 2 -exec rm -rf {} +
- 退出 Cassandra pod。
cqlsh
指令後,請針對來源 Kubernetes 叢集中的所有 Cassandra 容器執行下列指令: - 確認目前的背景資訊是來源 Kubernetes 叢集的正確背景資訊:
取得已遷移機構的名稱
在上一節所述程序中,有幾個步驟需要遷移機構的名稱。如要取得已遷移的機構名稱,請按照下列步驟操作:
- 從機構的 overrides.yaml 檔案取得機構名稱。請務必檢查要遷移的機構的 overrides.yaml 檔案。
- 如果機構名稱包含任何連字號「-」,請將所有連字號「-」替換為底線「_」。