本頁提供相關考量事項和建議,協助您將工作負載從 Standard Google Kubernetes Engine (GKE) 叢集遷移至 Autopilot 叢集,盡量減少對服務的影響。這個頁面適用於已決定遷移至 Autopilot 的叢集管理員。如要在決定是否遷移前取得更多資訊,請參閱「選擇 GKE 作業模式」和「比較 GKE Autopilot 和 Standard」。
遷移作業的運作方式
Autopilot 叢集會自動執行許多選用功能,而這些功能在標準叢集中需要手動設定。此外,Autopilot 叢集會為應用程式強制執行更安全的預設設定,提供更適合用於正式環境的環境,並相較於 Standard 模式,減少您所需的管理負擔。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
,取得最新版本。
- 確認您有現有的 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 規格中的 |
根據預檢結果修改工作負載規格
執行前置檢查後,請逐步檢查 JSON 輸出內容,找出需要變更的工作負載。建議您實作所有設定建議,包括選用建議。每項發現結果也會提供文件連結,說明工作負載規格應為何種形式。
Autopilot 和 Standard 的主要差異在於,Autopilot 會根據工作負載規格自動設定基礎架構。系統會自動將節點 taint 和容許條件等 Kubernetes 排程控制項,新增至執行中的工作負載。如有需要,您也應修改基礎架構即程式碼設定 (例如 Helm chart 或 Kustomize 疊加層),以符合上述條件。
您需要進行的常見設定變更包括:
Autopilot 的常見設定變更 | |
---|---|
運算和架構設定 | Autopilot 叢集預設使用 E 系列機型。如需其他機型,工作負載規格必須要求運算類別,Autopilot 才會將這些 Pod 放置在使用特定機型或架構的節點上。 詳情請參閱「Autopilot 中的運算類別」。 |
加速器 | 以 GPU 為基礎的工作負載必須在工作負載規格中要求 GPU。Autopilot 會自動佈建節點,並提供必要的機器類型和加速器。 詳情請參閱「在 Autopilot 中部署 GPU 工作負載」。 |
資源要求 | 所有 Autopilot 工作負載都必須在 Pod 規格中指定 詳情請參閱「Autopilot 中的資源要求」。 |
Spot VM 上的容錯工作負載 | 如果工作負載在 Standard 的 Spot VM 上執行,請在工作負載設定中,為 詳情請參閱「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
。
規劃目的地 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 物件狀態的方式。
工作負載類型 | 檔期前工具結果 | 遷移方法 |
---|---|---|
無狀態 |
|
對於 |
有狀態 |
|
請使用下列其中一種方法:
|
需要額外設定 | 在排定的停機時間內,更新 Kubernetes 資訊清單,然後在 Autopilot 上重新部署。如需高階步驟,請參閱「手動遷移有狀態的工作負載」。 |
高階遷移步驟
開始遷移前,請務必先解決飛行前檢查發現的任何 Incompatible
或 Additional configuration required
結果。如果您在 Autopilot 上部署工作負載時,未修改這些結果,工作負載就會失敗。
以下各節將概略說明假設的遷移作業。實際步驟會因環境和每個工作負載而異。 遷移正式環境前,請先規劃、測試及重新測試工作負載,找出問題。應考量的事項包括:
- 遷移程序的時間長度取決於要遷移的工作負載數量。
- 遷移有狀態工作負載時必須停機。
- 手動遷移可讓您在遷移期間專注於個別工作負載,以便即時解決個別案例的問題。
- 無論如何,請務必遷移可協助無狀態和有狀態工作負載運作的服務、Ingress 和其他 Kubernetes 物件。
使用 Backup for GKE 遷移所有工作負載
如果 Standard 叢集中執行的所有工作負載 (有狀態和無狀態) 都與 Autopilot 相容,且前置檢查工具針對每個工作負載傳回 Passed
或 Passed with optional configuration
,您可以使用 Backup for GKE 備份整個 Standard 叢集和工作負載的狀態,然後將備份還原到 Autopilot 叢集。
這種做法有以下優點:
- 您可以將所有工作負載從 Standard 移至 Autopilot 作業,只需進行最少的設定。
- 您可以遷移無狀態和有狀態的工作負載,並保留工作負載之間的關係,以及相關聯的 PersistentVolume。
- 回溯作業簡單易懂,且由 Google 管理。您可以復原整個遷移作業,也可以選擇性復原特定工作負載。
- 您可以跨 Google Cloud 區域遷移有狀態工作負載。手動遷移有狀態工作負載時,只能在同一區域進行。
使用這個方法時,GKE 會將 Autopilot 預設設定套用至從前置作業工具收到 Passed with optional configuration
結果的工作負載。遷移這些工作負載前,請確認您接受這些預設值。
手動遷移無狀態工作負載,完全不必停機
如要遷移無狀態工作負載,且服務不會停機,請將來源和目的地叢集註冊至 GKE 機群,並使用多叢集服務和多叢集 Ingress,確保工作負載在遷移期間保持可用。
- 為來源叢集和目的地叢集啟用多叢集服務和多叢集 Ingress。如需操作說明,請參閱「設定多叢集服務」和「設定多叢集 Ingress」。
- 如果您有後端依附元件 (例如資料庫工作負載),請使用多叢集服務從標準叢集匯出這些服務。這樣一來,Autopilot 叢集中的工作負載就能存取 Standard 叢集中的依附元件。如需操作說明,請參閱「註冊要匯出的服務」。
- 部署多叢集 Ingress 和多叢集服務,控管叢集間的連入流量。設定多叢集服務,只將流量傳送至 Standard 叢集。如需操作說明,請參閱「部署橫跨多個叢集的 Ingress」。
- 使用更新後的資訊清單,將無狀態工作負載部署至 Autopilot 叢集。匯出的多叢集服務會自動比對,並將流量傳送至對應的有狀態工作負載。
- 更新多叢集 Service,將連入流量導向 Autopilot 叢集。如需操作說明,請參閱「叢集選取」。
您現在可以從 Autopilot 叢集提供無狀態工作負載。如果來源叢集只有無狀態工作負載,且沒有任何依附元件,請繼續完成遷移作業。如有有狀態工作負載,請繼續進行「手動遷移有狀態工作負載」。
手動遷移有狀態工作負載
遷移無狀態工作負載後,您必須從 Standard 叢集停止並遷移有狀態工作負載。這個步驟會導致叢集停機。
- 開始環境停機。
- 暫停有狀態工作負載。
- 請確認您已修改工作負載資訊清單,以支援 Autopilot。詳情請參閱「根據預檢結果修改工作負載規格」。
在 Autopilot 叢集上部署工作負載。
在 Autopilot 叢集上部署有狀態工作負載的服務。
更新叢集內網路,讓無狀態工作負載繼續與後端工作負載通訊:
- 如果您在 Standard 叢集後端服務中使用靜態 IP 位址,請在 Autopilot 中重複使用該 IP 位址。
- 如果讓 Kubernetes 指派 IP 位址,請部署後端服務、取得新的 IP 位址,然後更新 DNS 以使用新的 IP 位址。
此時應符合下列條件:
- 您在 Autopilot 中執行所有無狀態工作負載。
- 所有後端有狀態工作負載也會在 Autopilot 中執行。
- 無狀態和有狀態工作負載可以彼此通訊。
- 多叢集服務會將所有連入流量導向 Autopilot 叢集。
將所有工作負載和 Kubernetes 物件遷移至新叢集後,請繼續完成遷移作業。
替代方案:在停機期間手動遷移所有工作負載
如果不想使用多叢集服務和多叢集 Ingress 遷移工作負載,盡量減少停機時間,請在停機期間遷移所有工作負載。這個方法會導致服務停機時間較長,但不需要使用多叢集功能。
- 開始休息時間。
- 在 Autopilot 叢集上部署無狀態資訊清單。
- 手動遷移有狀態工作負載。如需操作說明,請參閱「手動遷移有狀態的工作負載」一節。
- 修改叢集內和外部傳入流量的 DNS 記錄,改用服務的新 IP 位址。
- 結束休息時間。
完成遷移作業
將所有工作負載和服務移至新的 Autopilot 叢集後,請結束停機時間,並讓環境在預先決定的時間內運作。確認遷移狀態符合需求,且不需要還原遷移作業後,即可清除遷移構件並完成遷移。
選用:清除多叢集功能
如果您使用多叢集 Ingress 和多叢集服務進行遷移,且不希望 Autopilot 叢集繼續向機群註冊,請按照下列步驟操作:
- 如要處理外部傳入流量,請部署 Ingress,並將其設為公開工作負載的服務 IP 位址。如需操作說明,請參閱「外部應用程式負載平衡器的 Ingress」。
- 如果是叢集內流量 (例如從前端工作負載到具狀態的依附元件),請更新叢集 DNS 記錄,以使用這些服務的 IP 位址。
- 刪除您在遷移過程中建立的多叢集 Ingress 和多叢集 Service 資源。
- 停用多叢集 Ingress 和多叢集服務。
- 從機群取消註冊 Autopilot 叢集。
刪除 Standard 叢集
遷移作業完成後,經過一段時間,確認新叢集狀態符合需求,即可刪除標準叢集。建議您保留備份的標準資訊清單。
復原錯誤的遷移作業
如果遇到問題,想還原為標準叢集,請視遷移方式執行下列其中一項操作:
如果您在遷移期間使用 GKE 備份服務建立備份,請將備份還原至原始的標準叢集。如需操作說明,請參閱「還原備份」一文。
如果您是手動遷移工作負載,請以 Standard 叢集做為目的地,並以 Autopilot 叢集做為來源,重複執行前幾節的遷移步驟。大致來說,這項作業包含下列步驟:
- 開始休息時間。
- 手動將有狀態工作負載遷移至 Standard 叢集。如需操作說明,請參閱「手動遷移有狀態工作負載」一節。
- 使用遷移前備份的原始資訊清單,將無狀態工作負載移至 Standard 叢集。
- 將 Ingress 部署至 Standard 叢集,並將 DNS 切換至 Service 的新 IP 位址。
- 刪除 Autopilot 叢集。