將機構遷移至其他叢集

本頁面說明如何將 Apigee 混合式機構從一個 Kubernetes 叢集遷移至另一個叢集。以下是可能需要將機構遷移至其他叢集的情況:

  • 代管現有叢集的資料中心已無容量可用,或正在停用。
  • 叢集執行舊版基礎架構或舊版 Kubernetes,而您想要遷移至採用較新基礎架構的叢集。
  • 您想將多機構叢集中的機構移至個別叢集。

請注意,將機構遷移至其他混合型叢集時,可能會面臨風險和限制。執行遷移作業前,請先詳閱「限制」一節中的詳細說明。

限制

將混合式機構遷移至其他 Kubernetes 叢集時,請注意下列限制:

  • 將機構資料移至新的 Kubernetes 叢集時,可能會發生資料遺失的風險。 遷移機構前,請使用混合式備份操作說明備份 Kubernetes 叢集中所有機構的資料。
  • 在機構的所有鍵值空間中,機構遷移作業支援的資料大小上限為 5 GB,不含快取和配額。
  • 系統不會遷移快取資料。Hybrid 會重建快取資料。
  • 系統不會遷移配額資料。Hybrid 會重設配額資料。
  • 您只能將機構遷移至不含現有混合式部署的 Kubernetes 叢集。系統不支援遷移至含有現有混合式部署的叢集。
  • 遷移的機構只能移至單一地區部署的新叢集。 單一地區部署作業完成並開始運作後,您可以按照「多地區部署」一節所述的地區擴充程序,將服務擴展到其他地區。
  • Cassandra 叢集應在所有區域中運作良好。

遷移機構

請按照下列操作說明,將混合式機構從一個 Kubernetes 叢集遷移至另一個叢集:

  1. 如果尚未啟用,請在 Kubernetes 叢集中啟用備份功能,其中包含要遷移的混合式組織。如需混合備份的相關資訊,請參閱 Cassandra 備份總覽
  2. 使用下列指令啟動混合式備份工作:
    kubectl create job -n apigee --from=cronjob/apigee-cassandra-backup <backup job name>

    <backup job name> 可以是任何有效的容器名稱。

  3. 備份工作完成後,請按照「監控備份」一節的操作說明,確認備份作業是否已順利完成:
    • 「檢查備份工作的狀態」
    • 「檢查備份記錄」
  4. 確認備份作業成功後,請記下備份記錄結尾處的 ID 編號。舉例來說,成功備份的記錄應包含以下這一行:
    INFO: completed upload for 20230207004250
    記下行尾的多位數字。您稍後會需要這組號碼。
  5. 將 Kubernetes 結構定義切換至目的地 Kubernetes 叢集:
    kubectl config use-context <destination cluster name> # <destination cluster name>

    其中 <destination cluster name> 是目標 Kubernetes 叢集的名稱。

  6. 按照「 在單一地區中還原」一文中的指示,將備份資料還原至目的地 Kubernetes 叢集。
    • 針對要遷移至目的地混合式部署的機構組織,使用 overrides.yaml 檔案。
    • 請記得將 restore:snapshotTimestamp 值設為步驟 4 中備份記錄顯示的多位數字。請參閱「 在單一區域中還原」。
  7. 還原作業完成後,請從目的地 Kubernetes 叢集中刪除所有機構資料 (除了要遷移的機構資料)。混合式備份檔案包含所有機構的資料,包括您可能不想遷移的資料。目的地混合式部署作業還原後,您必須按照下列步驟移除已複製到部署作業的任何額外機構資料:
    1. 確認目前的背景資訊是否為目的地 Kubernetes 叢集的正確背景資訊:
      kubectl config current-context
    2. 執行 apigee-cassandra-default-0 pod:
      kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
    3. 執行下列指令:
      find /opt/apigee/data/apigee-cassandra/ -iname '*_hybrid' -not -iname '*<migrated org name>*' -type d -maxdepth 2 -printf "%f\n"

      如要瞭解如何找出 <migrated org name>,請參閱「取得已遷移機構的名稱」。

      複製輸出內容中顯示的所有名稱清單。您將在步驟 7 中使用這份清單。

    4. 退出 apigee-cassandra-default-0 pod。
    5. 按照「 建立用於偵錯的用戶端容器」一文中的操作說明,建立 Cassandra 偵錯用戶端 Pod。收到 cqlsh 提示後,請繼續執行下一個步驟。
    6. cqlsh 提示字元中執行下列指令:
      • desc keyspaces;

        請確認這項指令不會傳回錯誤。

      • 針對步驟 7. c. 中建立的清單中每個名稱,執行下列指令:
        drop keyspace <name>
    7. 退出 Cassandra 偵錯用戶端 pod。
    8. 執行 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 {} +
    9. 退出 Cassandra pod。
  8. 將 Kubernetes 結構定義切換至來源 Kubernetes 叢集:
    kubectl config use-context <source cluster name>

    其中 <source cluster name> 是來源 Kubernetes 叢集的名稱。

  9. 從來源 Kubernetes 叢集中刪除已遷移的機構。請務必在刪除指令中使用該機構的 overrides.yaml 檔案:
    1. 確認目前的背景資訊是來源 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           apigee
      
          kubectl config use-context gke_example-org-1_us-west1_example-cluster-2
    2. 刪除虛擬主機。

      Helm

      針對每個環境群組重複執行這項操作:

      helm -n apigee delete ENV_GROUP_NAME
      

      apigeectl

      $APIGEECTL_HOME/apigeectl delete --settings virtualhost -f OVERRIDES_FILE.yaml
    3. 刪除環境。

      Helm

      針對每個環境重複執行這項操作:

      helm -n apigee delete ENV_NAME
      

      apigeectl

      $APIGEECTL_HOME/apigeectl delete --all-envs -f OVERRIDES_FILE.yaml
    4. 刪除 Apigee 機構。

      Helm

      helm -n apigee delete ORG_NAME
      

      apigeectl

      $APIGEECTL_HOME/apigeectl delete -f OVERRIDES_FILE.yaml --org
    5. 執行 apigee-cassandra-default-0 Pod:
      kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
    6. 執行下列指令:
      find /opt/apigee/data/apigee-cassandra/ -iname '*<migrated org name>_hybrid' -type d -maxdepth 2 -printf "%f\n"

      如要瞭解如何找出 <migrated org name>,請參閱「取得已遷移機構的名稱」一文。

      複製輸出內容中顯示的所有名稱清單。您將在步驟 9 中使用這份清單。 j。

    7. 退出 apigee-cassandra-default-0 pod。
    8. 按照「 建立用於偵錯的用戶端容器」一文中的操作說明,建立 Cassandra 偵錯用戶端 Pod。收到 cqlsh 提示後,請繼續執行下一個步驟。
    9. cqlsh 提示中執行下列指令:
      desc keyspaces;

      請確認這項指令不會傳回錯誤。

    10. 針對步驟 10 中建立的清單中每個名稱,執行下列指令:
      drop keyspace <name>;
    11. 退出 Cassandra 偵錯用戶端 pod。
    12. 執行 cqlsh 指令後,請針對來源 Kubernetes 叢集中的所有 Cassandra 容器執行下列指令:
      • 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 {} +
    13. 退出 Cassandra pod。

取得已遷移機構的名稱

在上一節所述程序中,有幾個步驟需要遷移機構的名稱。如要取得已遷移的機構名稱,請按照下列步驟操作:

  1. 從機構的 overrides.yaml 檔案取得機構名稱。請務必檢查要遷移的機構的 overrides.yaml 檔案。
  2. 如果機構名稱包含任何連字號「-」,請將所有連字號「-」替換為底線「_」。