準備從 Standard 遷移至 Autopilot


本頁提供相關考量事項和建議,協助您將工作負載從 Standard Google Kubernetes Engine (GKE) 叢集遷移至 Autopilot 叢集,盡量減少對服務的影響。這個頁面適用於已決定遷移至 Autopilot 的叢集管理員。如要在決定是否遷移前取得更多資訊,請參閱「選擇 GKE 作業模式」和「比較 GKE Autopilot 和 Standard」。

遷移作業的運作方式

Autopilot 叢集會自動執行許多選用功能,而這些功能在標準叢集中需要手動設定。此外,Autopilot 叢集會為應用程式強制執行更安全的預設設定,提供更適合用於正式環境的環境,並相較於 Standard 模式,減少您所需的管理負擔。Autopilot 叢集預設會套用多項 GKE 最佳做法和建議。Autopilot 採用以工作負載為中心的設定模型,您可以在 Kubernetes 資訊清單中要求所需項目,GKE 則會佈建相應的基礎架構。

將 Standard 工作負載遷移至 Autopilot 時,請準備工作負載資訊清單,確保這些資訊清單與 Autopilot 叢集相容,例如確保資訊清單要求您通常必須自行佈建的基礎架構。

如要準備及執行遷移作業,請完成下列高階工作:

  1. 對現有的 Standard 叢集執行前置檢查,確認是否與 Autopilot 相容。
  2. 如適用,請修改工作負載資訊清單,使其與 Autopilot 相容。
  3. 進行試運轉,確認工作負載在 Autopilot 上正常運作。
  4. 規劃及建立 Autopilot 叢集。
  5. 視情況更新基礎架構即程式碼工具。
  6. 執行遷移作業。

事前準備

開始之前,請確認您已完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update,取得最新版本。
  • 確認您有現有的 Standard 叢集,且正在執行工作負載。
  • 確認您有 Autopilot 叢集,且沒有任何工作負載可執行試運轉。如要建立新的 Autopilot 叢集,請參閱「建立 Autopilot 叢集」。

在叢集中啟用飛行前檢查元件

在 GKE 1.31.6-gke.1027000 以上版本中,Autopilot 飛行前檢查元件預設為停用。您必須先啟用預檢元件,才能在叢集中執行檢查。如果叢集執行的 GKE 版本早於 1.31.6-gke.1027000,請跳至下一節。

  • 在叢集中啟用預檢元件:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --enable-autopilot-compatibility-auditing
    

    更改下列內容:

    • CLUSTER_NAME:標準叢集名稱。
    • LOCATION:標準叢集的位置,例如 us-central1

    更新作業最多需要 30 分鐘才能完成。

對標準叢集執行預檢檢查

Google Cloud CLI 和 Google Kubernetes Engine API 提供前置檢查工具,可驗證執行中 Standard 工作負載的規格,找出與 Autopilot 叢集不相容的項目。這項工具適用於 GKE 1.26 以上版本。

  • 如要在指令列使用這項工具,請執行下列指令:
gcloud container clusters check-autopilot-compatibility CLUSTER_NAME

CLUSTER_NAME 替換為您的標準叢集名稱。如要以 JSON 檔案的形式取得輸出內容,可以選擇在這個指令中加入 --format=json

輸出內容包含所有執行中 Standard 工作負載的調查結果,並根據適用情況分類,提供可行的建議,確保與 Autopilot 相容。下表說明這些類別:

檔期前工具結果
Passed 工作負載會照常執行,不需為 Autopilot 進行任何設定。
Passed with optional configuration

工作負載會在 Autopilot 上執行,但您可以選擇變更設定,以獲得最佳體驗。如果您未變更設定,Autopilot 會為您套用預設設定。

舉例來說,如果工作負載在標準模式中執行 N2 機器,GKE 會為 Autopilot 套用一般用途運算類別。您可以視需要修改工作負載,要求使用 Balanced 運算類別,這類別是以 N2 機器為基礎。

Additional configuration required

除非變更設定,否則工作負載不會在 Autopilot 上執行。

舉例來說,假設某個容器在 Standard 中使用 NET_ADMIN 功能。為提升安全性,Autopilot 預設會捨棄這項功能,因此您必須先在叢集上啟用 NET_ADMIN,才能部署工作負載。

Incompatibility

由於工作負載使用的功能不支援 Autopilot,因此無法在 Autopilot 上執行。

舉例來說,Autopilot 叢集會拒絕特殊權限 Pod (Pod 規格中的 privileged: true),以提升預設安全防護機制。如要在 Autopilot 中執行該應用程式,唯一方法是移除具備特殊權限的設定。

根據預檢結果修改工作負載規格

執行前置檢查後,請逐步檢查 JSON 輸出內容,找出需要變更的工作負載。建議您實作所有設定建議,包括選用建議。每項發現結果也會提供文件連結,說明工作負載規格應為何種形式。

Autopilot 和 Standard 的主要差異在於,Autopilot 會根據工作負載規格自動設定基礎架構。系統會自動將節點 taint 和容許條件等 Kubernetes 排程控制項,新增至執行中的工作負載。如有需要,您也應修改基礎架構即程式碼設定 (例如 Helm chart 或 Kustomize 疊加層),以符合上述條件。

您需要進行的常見設定變更包括:

Autopilot 的常見設定變更
運算和架構設定

Autopilot 叢集預設使用 E 系列機型。如需其他機型,工作負載規格必須要求運算類別,Autopilot 才會將這些 Pod 放置在使用特定機型或架構的節點上。

詳情請參閱「Autopilot 中的運算類別」。

加速器

以 GPU 為基礎的工作負載必須在工作負載規格中要求 GPU。Autopilot 會自動佈建節點,並提供必要的機器類型和加速器。

詳情請參閱「在 Autopilot 中部署 GPU 工作負載」。

資源要求

所有 Autopilot 工作負載都必須在 Pod 規格中指定 resources.requests 的值。GKE 會使用這些值,佈建適當的機器大小來執行 Pod。如果您省略任何要求,Autopilot 會自動套用特定預設要求,並根據工作負載的運算類別或硬體要求,強制執行特定最小值和最大值。

詳情請參閱「Autopilot 中的資源要求」。

Spot VM 上的容錯工作負載

如果工作負載在 Standard 的 Spot VM 上執行,請在工作負載設定中,為 cloud.google.com/gke-spot=true 設定節點選取器,要求使用 Spot Pod。

詳情請參閱「Spot Pods」。

在暫存 Autopilot 叢集上執行試營運

修改每個工作負載資訊清單後,請在新暫存 Autopilot 叢集上進行部署作業的試運轉,確保工作負載能正常執行。

指令列

執行下列指令:

kubectl create --dry-run=server -f=PATH_TO_MANIFEST

PATH_TO_MANIFEST 替換為修改後的工作負載資訊清單路徑。

IDE

如果您使用 Cloud Shell 編輯器,系統會內建試執行指令,並在任何開啟的資訊清單上執行。如果您使用 Visual Studio Code 或 Intellij IDE,請安裝 Cloud Code 擴充功能,自動對所有開啟的資訊清單執行試執行。

IDE 的「Problems」窗格會顯示任何模擬執行問題,例如下圖顯示的資訊清單模擬執行失敗,因為該資訊清單指定了 privileged: true

在 Visual Studio Code 中,針對名為 application.yaml 的資訊清單進行試執行時的輸出內容。訊息內容如下:Failed server dry-run apply on current-context: admission webhook denied the request.

規劃目的地 Autopilot 叢集

如果不再顯示問題,請規劃並建立新的 Autopilot 叢集,以供工作負載使用。這個叢集與您在前一節中用來測試資訊清單修改內容的 Autopilot 叢集不同。

請參閱「GKE 上手最佳做法」,瞭解基本設定需求。接著,請閱讀自動駕駛模式總覽,瞭解不同層級的特定用途資訊。

此外,請注意下列事項:

  • Autopilot 叢集是虛擬私有雲原生叢集,因此不建議從路徑導向的 Standard 叢集遷移至 Autopilot。
  • 為 Autopilot 叢集和 Standard 叢集使用相同或類似的 VPC,包括任何自訂防火牆規則和 VPC 設定。
  • Autopilot 叢集使用 GKE Dataplane V2,且僅支援 Cilium NetworkPolicy。系統不支援 Calico NetworkPolicy。
  • 如要在 Autopilot 中使用 IP 偽裝功能,請使用輸出 NAT 政策
  • 在建立叢集時,為叢集指定主要 IPv4 範圍,範圍大小與標準叢集相同。
  • 瞭解模式之間的配額差異,特別是當您有大型叢集時。
  • 瞭解 Autopilot 的每個節點最多可容納的 Pod 數量,這與 Standard 叢集不同。如果您經常使用節點或 Pod 親和性,這點就更重要。
  • 所有 Autopilot 叢集都使用 Cloud DNS

建立 Autopilot 叢集

準備好建立叢集時,請參閱「建立 Autopilot 叢集」。所有 Autopilot 叢集都是地區叢集,且會自動註冊發布版本,但您可以指定發布版本和叢集版本。建議您將一小部分工作負載部署至叢集,觸發節點自動佈建功能,以便立即排定實際工作環境的工作負載。

更新基礎架構即程式碼工具

下列基礎架構即程式碼供應商支援 Autopilot:

請參閱偏好供應商的說明文件,並修改設定。

選擇遷移方法

您使用的遷移方法取決於個別工作負載,以及您對多叢集服務多叢集 Ingress 等網路概念的熟悉程度,以及您管理叢集中 Kubernetes 物件狀態的方式。

工作負載類型 檔期前工具結果 遷移方法
無狀態
  • 通過
  • 通過選用設定
  • 需要額外設定

對於 PassedPassed with optional configuration 工作負載,您也可以使用 GKE 備份功能將所有工作負載移至 Autopilot 叢集。您仍須更新管道和上游資訊清單,才能指定 Autopilot 叢集。如需高階步驟,請參閱「使用 GKE 備份服務遷移所有工作負載」。

有狀態
  • 通過
  • 通過選用設定

請使用下列其中一種方法:

  • GKE 備份服務:使用 GKE 備份服務將具狀態工作負載移至 Autopilot 叢集,同時維持現有的 PersistentVolume 關係。如需高階步驟,請參閱「使用 GKE 備份服務遷移所有工作負載」。支援跨區域遷移。
  • 手動:手動移動有狀態工作負載。 這種做法需要更審慎地規劃 PersistentVolumes 和 Compute Engine 磁碟。如需高階步驟,請參閱「手動遷移有狀態的工作負載」。不支援跨區域遷移。
需要額外設定 在排定的停機時間內,更新 Kubernetes 資訊清單,然後在 Autopilot 上重新部署。如需高階步驟,請參閱「手動遷移有狀態的工作負載」。

高階遷移步驟

開始遷移前,請務必先解決飛行前檢查發現的任何 IncompatibleAdditional configuration required 結果。如果您在 Autopilot 上部署工作負載時,未修改這些結果,工作負載就會失敗。

以下各節將概略說明假設的遷移作業。實際步驟會因環境和每個工作負載而異。 遷移正式環境前,請先規劃、測試及重新測試工作負載,找出問題。應考量的事項包括:

  • 遷移程序的時間長度取決於要遷移的工作負載數量。
  • 遷移有狀態工作負載時必須停機。
  • 手動遷移可讓您在遷移期間專注於個別工作負載,以便即時解決個別案例的問題。
  • 無論如何,請務必遷移可協助無狀態和有狀態工作負載運作的服務、Ingress 和其他 Kubernetes 物件。

使用 Backup for GKE 遷移所有工作負載

如果 Standard 叢集中執行的所有工作負載 (有狀態和無狀態) 都與 Autopilot 相容,且前置檢查工具針對每個工作負載傳回 PassedPassed with optional configuration,您可以使用 Backup for GKE 備份整個 Standard 叢集和工作負載的狀態,然後將備份還原到 Autopilot 叢集。

這種做法有以下優點:

  • 您可以將所有工作負載從 Standard 移至 Autopilot 作業,只需進行最少的設定。
  • 您可以遷移無狀態和有狀態的工作負載,並保留工作負載之間的關係,以及相關聯的 PersistentVolume。
  • 回溯作業簡單易懂,且由 Google 管理。您可以復原整個遷移作業,也可以選擇性復原特定工作負載。
  • 您可以跨 Google Cloud 區域遷移有狀態工作負載。手動遷移有狀態工作負載時,只能在同一區域進行。

使用這個方法時,GKE 會將 Autopilot 預設設定套用至從前置作業工具收到 Passed with optional configuration 結果的工作負載。遷移這些工作負載前,請確認您接受這些預設值。

手動遷移無狀態工作負載,完全不必停機

如要遷移無狀態工作負載,且服務不會停機,請將來源和目的地叢集註冊至 GKE 機群,並使用多叢集服務和多叢集 Ingress,確保工作負載在遷移期間保持可用。

  1. 為來源叢集和目的地叢集啟用多叢集服務和多叢集 Ingress。如需操作說明,請參閱「設定多叢集服務」和「設定多叢集 Ingress」。
  2. 如果您有後端依附元件 (例如資料庫工作負載),請使用多叢集服務從標準叢集匯出這些服務。這樣一來,Autopilot 叢集中的工作負載就能存取 Standard 叢集中的依附元件。如需操作說明,請參閱「註冊要匯出的服務」。
  3. 部署多叢集 Ingress 和多叢集服務,控管叢集間的連入流量。設定多叢集服務,只將流量傳送至 Standard 叢集。如需操作說明,請參閱「部署橫跨多個叢集的 Ingress」。
  4. 使用更新後的資訊清單,將無狀態工作負載部署至 Autopilot 叢集。匯出的多叢集服務會自動比對,並將流量傳送至對應的有狀態工作負載。
  5. 更新多叢集 Service,將連入流量導向 Autopilot 叢集。如需操作說明,請參閱「叢集選取」。

您現在可以從 Autopilot 叢集提供無狀態工作負載。如果來源叢集只有無狀態工作負載,且沒有任何依附元件,請繼續完成遷移作業。如有有狀態工作負載,請繼續進行「手動遷移有狀態工作負載」。

手動遷移有狀態工作負載

遷移無狀態工作負載後,您必須從 Standard 叢集停止並遷移有狀態工作負載。這個步驟會導致叢集停機。

  1. 開始環境停機。
  2. 暫停有狀態工作負載。
  3. 請確認您已修改工作負載資訊清單,以支援 Autopilot。詳情請參閱「根據預檢結果修改工作負載規格」。
  4. 在 Autopilot 叢集上部署工作負載。

  5. 在 Autopilot 叢集上部署有狀態工作負載的服務。

  6. 更新叢集內網路,讓無狀態工作負載繼續與後端工作負載通訊:

    • 如果您在 Standard 叢集後端服務中使用靜態 IP 位址,請在 Autopilot 中重複使用該 IP 位址。
    • 如果讓 Kubernetes 指派 IP 位址,請部署後端服務、取得新的 IP 位址,然後更新 DNS 以使用新的 IP 位址。

此時應符合下列條件:

  • 您在 Autopilot 中執行所有無狀態工作負載。
  • 所有後端有狀態工作負載也會在 Autopilot 中執行。
  • 無狀態和有狀態工作負載可以彼此通訊。
  • 多叢集服務會將所有連入流量導向 Autopilot 叢集。

將所有工作負載和 Kubernetes 物件遷移至新叢集後,請繼續完成遷移作業

替代方案:在停機期間手動遷移所有工作負載

如果不想使用多叢集服務和多叢集 Ingress 遷移工作負載,盡量減少停機時間,請在停機期間遷移所有工作負載。這個方法會導致服務停機時間較長,但不需要使用多叢集功能。

  1. 開始休息時間。
  2. 在 Autopilot 叢集上部署無狀態資訊清單。
  3. 手動遷移有狀態工作負載。如需操作說明,請參閱「手動遷移有狀態的工作負載」一節。
  4. 修改叢集內和外部傳入流量的 DNS 記錄,改用服務的新 IP 位址。
  5. 結束休息時間。

完成遷移作業

將所有工作負載和服務移至新的 Autopilot 叢集後,請結束停機時間,並讓環境在預先決定的時間內運作。確認遷移狀態符合需求,且不需要還原遷移作業後,即可清除遷移構件並完成遷移。

選用:清除多叢集功能

如果您使用多叢集 Ingress 和多叢集服務進行遷移,且不希望 Autopilot 叢集繼續向機群註冊,請按照下列步驟操作:

  1. 如要處理外部傳入流量,請部署 Ingress,並將其設為公開工作負載的服務 IP 位址。如需操作說明,請參閱「外部應用程式負載平衡器的 Ingress」。
  2. 如果是叢集內流量 (例如從前端工作負載到具狀態的依附元件),請更新叢集 DNS 記錄,以使用這些服務的 IP 位址。
  3. 刪除您在遷移過程中建立的多叢集 Ingress 和多叢集 Service 資源。
  4. 停用多叢集 Ingress 和多叢集服務
  5. 從機群取消註冊 Autopilot 叢集

刪除 Standard 叢集

遷移作業完成後,經過一段時間,確認新叢集狀態符合需求,即可刪除標準叢集。建議您保留備份的標準資訊清單。

復原錯誤的遷移作業

如果遇到問題,想還原為標準叢集,請視遷移方式執行下列其中一項操作:

  • 如果您在遷移期間使用 GKE 備份服務建立備份,請將備份還原至原始的標準叢集。如需操作說明,請參閱「還原備份」一文。

  • 如果您是手動遷移工作負載,請以 Standard 叢集做為目的地,並以 Autopilot 叢集做為來源,重複執行前幾節的遷移步驟。大致來說,這項作業包含下列步驟:

    1. 開始休息時間。
    2. 手動將有狀態工作負載遷移至 Standard 叢集。如需操作說明,請參閱「手動遷移有狀態工作負載」一節。
    3. 使用遷移前備份的原始資訊清單,將無狀態工作負載移至 Standard 叢集。
    4. 將 Ingress 部署至 Standard 叢集,並將 DNS 切換至 Service 的新 IP 位址。
    5. 刪除 Autopilot 叢集。

後續步驟