準備從 Standard 遷移至 Autopilot

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

遷移作業的運作方式

Autopilot 叢集會自動執行許多選用功能,這些功能在 Standard 叢集中需要手動設定。此外,Autopilot 叢集會對應用程式強制執行更安全的預設設定,提供更適合可部署於正式環境的環境,並減少管理負擔 (相較於標準模式)。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 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
  • 確認您已有執行工作負載的標準叢集。
  • 請確認您有不含工作負載的 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:Standard 叢集的名稱。
    • LOCATION:Standard 叢集的位置,例如 us-central1。

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

對 Standard 叢集執行預檢

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

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

將 CLUSTER_NAME 替換為 Standard 叢集名稱。您也可以在指令中加入 --format=json,將輸出內容儲存為 JSON 檔案。

輸出內容會顯示所有執行中 Standard 工作負載的發現項目,並依類別提供可行的建議,確保與 Autopilot 相容 (如適用)。下表說明這些類別:

預檢工具結果
Passed 工作負載會正常運作,不需為 Autopilot 進行任何設定。
Passed with optional configuration

工作負載會在 Autopilot 上執行,但您可以視需要變更設定,享有最佳體驗。如未變更設定,Autopilot 會套用預設設定。

舉例來說,如果工作負載在標準模式下是在 N2 機器上執行,GKE 會套用 Autopilot 的一般用途運算類別。您也可以視需要修改工作負載,要求使用由 N2 機器支援的 Balanced 運算類別。

Additional configuration required

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

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

Incompatibility

工作負載不會在 Autopilot 上執行,因為它使用的功能不受 Autopilot 支援。

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

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

執行預檢後,請逐步查看 JSON 輸出內容,找出需要變更的工作負載。建議您也導入選用的設定建議。每項發現項目也會提供說明文件連結,說明工作負載規格應有的樣貌。

Autopilot 和 Standard 之間最重要的差異,在於 Autopilot 的基礎架構設定會根據工作負載規格自動完成。Kubernetes 排程控制項 (例如節點污點和容許條件) 會自動新增至執行中的工作負載。如有必要,您也應修改基礎架構即程式碼設定 (例如 Helm 圖表或 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 Pod」。

在測試 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 叢集不同。

如需基本設定需求,請參閱「關於叢集設定選項」。接著,請參閱 Autopilot 總覽,其中提供不同層級的特定用途資訊。

此外,請考量下列事項:

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

建立 Autopilot 叢集

準備好建立叢集時,請參閱「建立 Autopilot 叢集」。所有 Autopilot 叢集都是區域性叢集,且會自動註冊至發布管道,但您可以指定管道和叢集版本。建議您將小型範例工作負載部署至叢集,觸發自動佈建節點功能,以便立即排定正式工作負載。

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

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

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

選擇遷移方式

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

工作負載類型 預檢工具結果 遷移方式
無狀態
  • 順利完成
  • 通過 (含選用設定)
  • 需要額外設定

如果是 Passed 和 Passed with optional configuration 工作負載,您也可以使用 GKE 備份將所有工作負載移至 Autopilot 叢集。您仍須更新管道和上游資訊清單,指定 Autopilot 叢集。如需概略步驟,請參閱「使用 GKE 備份遷移所有工作負載」。

有狀態
  • 順利完成
  • 通過 (含選用設定)

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

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

概略遷移步驟

開始遷移前,請務必解決預檢中的所有 Incompatible 或 Additional configuration required 結果。如果您在 Autopilot 上部署工作負載,且未修改這些結果,工作負載就會失敗。

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

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

使用 GKE 備份功能遷移所有工作負載

如果 Standard 叢集中執行的所有工作負載 (有狀態和無狀態) 都與 Autopilot 相容,且預檢工具為每個工作負載傳回 Passed 或 Passed with optional configuration,您可以使用 GKE 備份,備份 Standard 叢集和工作負載的完整狀態,並將備份還原至 Autopilot 叢集。

這種做法有以下優點:

  • 只要進行最基本的設定,就能將所有工作負載從 Standard 模式移至 Autopilot 模式。
  • 您可以移動無狀態和有狀態工作負載,並保留工作負載與相關聯 PersistentVolume 之間的關係。
  • 復原作業由 Google 管理,操作簡單。您可以復原整個遷移作業,或選擇性復原特定工作負載。
  • 您可以跨 Google Cloud 區域遷移有狀態工作負載。手動遷移有狀態工作負載時,只能在相同區域內進行。

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

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

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

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

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

手動遷移有狀態的工作負載

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

  1. 開始環境停機時間。
  2. 暫停有狀態的工作負載。
  3. 請務必修改工作負載資訊清單,確保與 Autopilot 相容。詳情請參閱「根據預檢結果修改工作負載規格」。
  4. 在 Autopilot 叢集部署工作負載。

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

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

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

在這個階段,應符合下列條件:

  • 您在 Autopilot 中執行所有無狀態工作負載。
  • 任何後端有狀態工作負載也都在 Autopilot 中執行。
  • 無狀態和有狀態工作負載可以互相通訊。
  • 多叢集 Service 會將所有傳入流量導向 Autopilot 叢集。

將所有工作負載和 Kubernetes 物件遷移至新叢集後,請按照「完成遷移」一節的說明操作。

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

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

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

完成遷移作業

將所有工作負載和服務移至新的 Autopilot 叢集後,請結束停機時間,並讓環境在預定時間內穩定運作。如果對遷移狀態感到滿意,且確定不需要復原遷移作業,可以清除遷移構件並完成遷移。

選用:清除多叢集功能

如果您使用多叢集 Ingress 和多叢集 Service 進行遷移,且不希望 Autopilot 叢集繼續註冊至機群,請執行下列操作:

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

刪除 Standard 叢集

遷移作業完成後,請等待一段時間,確認新叢集的狀態符合預期,再刪除 Standard 叢集。建議您保留備份的標準資訊清單。

復原失敗的遷移作業

如果發生問題,且想還原為標準叢集,請根據遷移方式執行下列任一操作:

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

  • 如果您手動遷移工作負載,請重複上一節的遷移步驟,並將 Standard 叢集設為目的地,Autopilot 叢集設為來源。大致步驟如下:

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

後續步驟