本頁說明如何將 Apigee Hybrid 機構從一個 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-0Pod 的指令: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.f 中需要這份清單。
- 結束
apigee-cassandra-default-0pod。 - 按照「
建立用於偵錯的用戶端容器」一文中的操作說明,建立 Cassandra 偵錯用戶端 Pod。收到
cqlsh提示後,請繼續執行下一個步驟。 - 在
cqlsh提示字元中執行下列指令:-
desc keyspaces;
確認這項指令未傳回任何錯誤。
- 針對步驟 7. c. 中建立的清單中的每個名稱,執行下列指令:
drop keyspace <name>
-
- 結束 Cassandra 偵錯用戶端 Pod。
- 執行
cqlsh指令後,在目標 Kubernetes 叢集中的所有 Cassandra Pod 上執行下列指令: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
apigeectl delete --settings virtualhost -f <overrides.yaml>
apigeectl delete --all-envs -f <overrides.yaml>
apigeectl delete -f <overrides.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-0pod。 - 按照「
建立用於偵錯的用戶端容器」一文中的操作說明,建立 Cassandra 偵錯用戶端 Pod。收到
cqlsh提示後,請繼續下一個步驟。 - 在
cqlsh提示中執行下列指令:desc keyspaces;
確認這項指令未傳回任何錯誤。
- 針對步驟 10. f. 中建立的清單中的每個名稱,執行下列指令:
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 Pod 上執行下列指令: - 確認目前的內容是來源 Kubernetes 叢集的正確內容:
取得已遷移機構的名稱
上一節所述程序中的幾個步驟需要遷移機構的名稱。如要取得遷移後的機構名稱,請按照下列步驟操作:
- 從機構的 overrides.yaml 檔案取得機構名稱。請務必檢查要遷移的機構專用的 overrides.yaml 檔案。
- 如果機構名稱包含任何破折號「-」,請將所有破折號「-」替換為底線「_」。