本頁面提供考量事項和建議,協助您將工作負載從 Standard Google Kubernetes Engine (GKE) 叢集遷移至 Autopilot 叢集,盡可能減少服務中斷。本頁面適用於已決定遷移至 Autopilot 的叢集管理員。如需更多資訊,再決定是否要遷移,請參閱「選擇 GKE 作業模式」和「比較 GKE Autopilot 和 Standard」。
遷移作業的運作方式
Autopilot 叢集會自動執行許多選用功能,這些功能在 Standard 叢集中需要手動設定。此外,Autopilot 叢集會對應用程式強制執行更安全的預設設定,提供更適合可部署於正式環境的環境,並減少管理負擔 (相較於標準模式)。Autopilot 叢集預設會套用多項 GKE 最佳做法和建議。Autopilot 採用以工作負載為中心的設定模型,您可以在 Kubernetes 資訊清單中要求所需資源,GKE 則會佈建對應的基礎架構。
將 Standard 工作負載遷移至 Autopilot 時,請準備工作負載資訊清單,確保與 Autopilot 叢集相容,例如確保資訊清單要求您通常必須自行佈建的基礎架構。
為準備並順利執行遷移作業,您需要完成下列高階工作:
- 對現有的 Standard 叢集執行預檢,確認是否與 Autopilot 相容。
- 視情況修改工作負載資訊清單,使其與 Autopilot 相容。
- 進行模擬測試,確認工作負載在 Autopilot 上正常運作。
- 規劃及建立 Autopilot 叢集。
- 視情況更新基礎架構即程式碼工具。
- 執行遷移作業。
事前準備
開始之前,請確認您已執行下列工作:
- 啟用 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 規格中的 |
根據預檢結果修改工作負載規格
執行預檢後,請逐步查看 JSON 輸出內容,找出需要變更的工作負載。建議您也導入選用的設定建議。每項發現項目也會提供說明文件連結,說明工作負載規格應有的樣貌。
Autopilot 和 Standard 之間最重要的差異,在於 Autopilot 的基礎架構設定會根據工作負載規格自動完成。Kubernetes 排程控制項 (例如節點污點和容許條件) 會自動新增至執行中的工作負載。如有必要,您也應修改基礎架構即程式碼設定 (例如 Helm 圖表或 Kustomize 疊加層),以符合相關規定。
您需要進行的一些常見設定變更包括:
| Autopilot 的常見設定變更 | |
|---|---|
| 運算和架構設定 | Autopilot 叢集預設使用 E 系列機型。如需其他機型,工作負載規格必須要求運算類別,指示 Autopilot 將這些 Pod 放在使用特定機型或架構的節點上。 詳情請參閱「Autopilot 中的運算級別」。 |
| 加速器 | GPU 工作負載必須在工作負載規格中要求 GPU。Autopilot 會自動佈建具備所需機型和加速器的節點。 詳情請參閱「在 Autopilot 中部署 GPU 工作負載」。 |
| 資源要求 | 所有 Autopilot 工作負載都必須在 Pod 規格中指定 詳情請參閱「Autopilot 中的資源要求」。 |
| Spot VM 上的容錯工作負載 | 如果工作負載在 Standard 的 Spot VM 上執行,請在工作負載設定中,為 詳情請參閱「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 的資訊清單模擬測試失敗。

規劃目的地 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 物件的狀態。
| 工作負載類型 | 預檢工具結果 | 遷移方式 |
|---|---|---|
| 無狀態 |
|
如果是 |
| 有狀態 |
|
請使用下列其中一種方法:
|
| 需要額外設定 | 在排定的停機時間內,更新 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,確保工作負載在遷移期間仍可使用。
- 為來源叢集和目的地叢集啟用多叢集 Service 和多叢集 Ingress。如需操作說明,請參閱「設定多叢集服務」和「設定多叢集 Ingress」。
- 如果您有資料庫工作負載等後端依附元件,請使用多叢集 Service 從 Standard 叢集匯出這些 Service。這樣一來,Autopilot 叢集中的工作負載就能存取 Standard 叢集中的依附元件。如需操作說明,請參閱「註冊要匯出的 Service」。
- 部署多叢集 Ingress 和多叢集 Service,控管叢集之間的傳入流量。設定多叢集 Service,只將流量傳送至 Standard 叢集。如需操作說明,請參閱「部署橫跨多個叢集的 Ingress」。
- 使用更新後的資訊清單,將無狀態工作負載部署至 Autopilot 叢集。匯出的多叢集 Service 會自動比對流量,並將流量傳送至對應的有狀態工作負載。
- 更新多叢集 Service,將傳入流量導向 Autopilot 叢集。如需操作說明,請參閱「叢集選取」。
您現在可以透過 Autopilot 叢集提供無狀態工作負載。如果來源叢集中只有無狀態工作負載,且沒有任何依附元件,請繼續完成遷移。如果您有有狀態工作負載,請前往「手動遷移有狀態工作負載」。
手動遷移有狀態的工作負載
遷移無狀態工作負載後,您必須暫停並遷移 Standard 叢集中的有狀態工作負載。這個步驟會導致叢集停機。
- 開始環境停機時間。
- 暫停有狀態的工作負載。
- 請務必修改工作負載資訊清單,確保與 Autopilot 相容。詳情請參閱「根據預檢結果修改工作負載規格」。
在 Autopilot 叢集部署工作負載。
在 Autopilot 叢集上部署有狀態工作負載的 Service。
更新叢集內網路,讓無狀態工作負載繼續與後端工作負載通訊:
- 如果您在 Standard 叢集後端 Service 中使用靜態 IP 位址,請在 Autopilot 中重複使用該 IP 位址。
- 如果讓 Kubernetes 指派 IP 位址,請部署後端服務、取得新的 IP 位址,然後更新 DNS 以使用新的 IP 位址。
在這個階段,應符合下列條件:
- 您在 Autopilot 中執行所有無狀態工作負載。
- 任何後端有狀態工作負載也都在 Autopilot 中執行。
- 無狀態和有狀態工作負載可以互相通訊。
- 多叢集 Service 會將所有傳入流量導向 Autopilot 叢集。
將所有工作負載和 Kubernetes 物件遷移至新叢集後,請按照「完成遷移」一節的說明操作。
替代方案:在停機期間手動遷移所有工作負載
如果不想使用多叢集 Service 和多叢集 Ingress,在最短停機時間內遷移工作負載,請在停機期間遷移所有工作負載。這個方法會導致服務停機時間較長,但不需要使用多叢集功能。
- 開始休息。
- 在 Autopilot 叢集部署無狀態資訊清單。
- 手動遷移有狀態的工作負載。如需操作說明,請參閱「手動遷移有狀態工作負載」一節。
- 修改叢集內和傳入外部流量的 DNS 記錄,以使用 Service 的新 IP 位址。
- 結束休息時間。
完成遷移作業
將所有工作負載和服務移至新的 Autopilot 叢集後,請結束停機時間,並讓環境在預定時間內穩定運作。如果對遷移狀態感到滿意,且確定不需要復原遷移作業,可以清除遷移構件並完成遷移。
選用:清除多叢集功能
如果您使用多叢集 Ingress 和多叢集 Service 進行遷移,且不希望 Autopilot 叢集繼續註冊至機群,請執行下列操作:
- 如要處理傳入的外部流量,請部署 Ingress,並將其設為公開工作負載的 Service IP 位址。如需操作說明,請參閱「外部應用程式負載平衡器的 Ingress」。
- 如果是叢集內流量 (例如從前端工作負載到有狀態依附元件),請更新叢集 DNS 記錄,改用這些 Service 的 IP 位址。
- 刪除遷移期間建立的多叢集 Ingress 和多叢集 Service 資源。
- 停用多叢集 Ingress 和多叢集 Service。
- 從機群中取消註冊 Autopilot 叢集。
刪除 Standard 叢集
遷移作業完成後,請等待一段時間,確認新叢集的狀態符合預期,再刪除 Standard 叢集。建議您保留備份的標準資訊清單。
復原失敗的遷移作業
如果發生問題,且想還原為標準叢集,請根據遷移方式執行下列任一操作:
如果您在遷移期間使用 GKE 備份建立備份,請將備份還原至原始 Standard 叢集。如需操作說明,請參閱「還原備份」。
如果您手動遷移工作負載,請重複上一節的遷移步驟,並將 Standard 叢集設為目的地,Autopilot 叢集設為來源。大致步驟如下:
- 開始停機。
- 手動將有狀態工作負載遷移至 Standard 叢集。如需操作說明,請參閱「手動遷移有狀態工作負載」一節。
- 使用遷移前備份的原始資訊清單,將無狀態工作負載移至 Standard 叢集。
- 將 Ingress 部署至標準叢集,並將 DNS 轉換至 Service 的新 IP 位址。
- 刪除 Autopilot 叢集。