本頁面說明如何準備工作負載,以便在 GKE Standard 叢集的 Arm 節點上排程。如要進一步瞭解如何使用 Autopilot 排定 Arm 工作負載,請參閱「在 Arm 架構上部署 Autopilot 工作負載」。
如要順利將工作負載排定至 Arm 節點,您必須具備下列條件:
- 與 Arm 相容的容器映像檔。如需如何檢查這項資訊的指引,請參閱「我的工作負載是否已準備好使用 Arm?」一文。
- Arm 節點,可在其中排定與 Arm 相容的工作負載。如要建立必要資源,請參閱「使用 Arm 節點建立叢集和節點集區」。
- 叢集位於 Google Cloud 地區或區域,且有可用的 Arm 虛擬機器 (VM)。如需可篩選的機器類型和平台表格,請參閱「可用地區和區域」。
總覽
根據預設,GKE 只會將工作負載排定至 x86 型節點 (搭載 Intel 或 AMD 處理器的 Compute Engine 機器系列),方法是在所有 Arm 節點上放置汙點 (kubernetes.io/arch=arm64:NoSchedule
)。這項汙點可防止 x86 相容工作負載意外排定至 Arm 節點。如要將工作負載部署至 Arm 節點,請使用本頁面所述的欄位,引導排程器將工作負載傳送至所需類型的節點。
請使用下列其中一個欄位:
使用節點選取器或節點親和性規則時,只有在您聲明工作負載的容器映像檔可在節點架構上執行時,GKE 才會排定與 Arm 相容的工作負載。
如要排程與 Arm 相容的工作負載,請使用節點選取器或節點相依性規則,如以下各節所述。GKE 會自動在工作負載設定中新增容許條件,讓 Pod 在 Arm 節點上執行。
新增至工作負載的容許度會與新增至所有 Arm 節點的汙染 (kubernetes.io/arch=arm64:NoSchedule
) 相符,讓工作負載排定在 Arm 節點上。
在某些情況下 (例如您有多重架構映像檔,可在任何節點上執行),您可能需要手動將這項容許度新增至工作負載設定。如需相關操作說明,請參閱「使用容許度將多架構工作負載排程至任何架構」。
使用節點選取器排定 Arm 工作負載
在規格中新增下列節點選取器:
nodeSelector:
kubernetes.io/arch: arm64
節點選取器會指定這項工作負載只能排定至具有 arm64
標籤的節點,而 GKE 叢集上的所有 Arm 節點都有這個標籤。
在工作負載設定中加入這個節點選取器後,GKE 會新增容許度來比對汙點,允許工作負載排定至 Arm 節點。
使用節點親和性規則排定 Arm 工作負載
您也可以使用節點親和性排定工作負載。
將工作負載排定至單一架構
在規格中新增下列節點親和性:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
節點親和性規則會指定工作負載只能排定至具有 arm64
標籤的節點,而 GKE 叢集上的所有 Arm 節點都有這個標籤。
在工作負載設定中加入這項節點親和性規則時,GKE 會新增容許度來比對汙點,允許工作負載排定至 Arm 節點。
將工作負載排定至 x86 和 Arm 架構
如要跨 x86 (Intel 和 AMD 處理器) 和 Arm 架構排定工作負載,可以透過不同方式指定。
使用容許度,將多架構工作負載排程至任何架構
如果您有多架構映像檔,且想在標準叢集中排定任何可用的架構類型,只要將容許度新增至工作負載規格即可。工作負載可排程至所有架構類型,因此您不需要本頁所述的節點選取器或節點親和性規則。
新增容許條件:
tolerations:
- key: kubernetes.io/arch
operator: Equal
value: arm64
effect: NoSchedule
使用這項容許度,GKE 就能將工作負載排程至任何架構類型的節點。
舉例來說,假設您有一個叢集,其中包含下列節點集區:
- 使用 c4a-standard-16 VM (
arm64
) 的 my-c4a-node-pool。 - my-c2-node-pool,使用 c2-standard-8 VM (
amd64
)。 - my-t2d-node-pool,使用 t2-standard-48 VM (
amd64
)。
如果您將使用多重架構映像檔的工作負載部署至這個叢集,且工作負載設定中包含 arm64
容許度,GKE 可能會跨所有節點集區排定工作負載。
使用節點親和性規則,將多架構工作負載排程至任何架構
如要將工作負載排定至各種架構類型 (包括 x86 和 Arm) 的節點,也可以使用節點親和性規則。透過節點親和性規則,您可以明確指定要排定工作負載的架構類型。建議您採用這種做法,在 Autopilot 叢集上排定工作負載。詳情請參閱「在 Arm 架構上部署 Autopilot 工作負載」。
如果是以 x86 為基礎的工作負載,您不需要這些節點選取器、節點親和性規則或容許度,即可排定工作負載。如果您只想將映像檔排程至以 x86 為基礎的節點,則不需要使用這些欄位。
如要將工作負載排定至任何架構類型,請在節點親和性欄位的 values
區段中,列出 arm64
和 amd64
。amd64
包含使用 x86 處理器的任何節點。
以下範例指定這項工作負載可排定在搭載 Arm 處理器或 x86 處理器的節點上:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
- amd64
各架構類型的標籤如下:
arm64
,適用於使用 Arm 處理器的節點 (例如 C4A)。amd64
,適用於使用 AMD 處理器的節點 (例如 Tau T2D) 或使用 Intel 處理器的節點 (例如 C2)。
舉例來說,假設您有一個叢集,其中包含下列節點集區和指定的節點親和性規則:
- 使用 c4a-standard-16 VM (
arm64
) 的 my-c4a-node-pool。 - my-c2-node-pool,使用 c2-standard-8 VM (
amd64
)。 - my-t2d-node-pool,使用 t2-standard-48 VM (
amd64
)。
如果您將使用多架構映像檔的工作負載部署至這個叢集,且節點親和性包含在 values
清單中,GKE 會在工作負載設定中新增容許條件,並可能在所有節點集區中排定工作負載。arm64
部署工作負載
您已指定要排程與 Arm 相容的工作負載,現在可以部署工作負載。
將工作負載部署至 GKE 叢集時,不同架構類型使用的指令相同。只要完成必要步驟,您就能部署與 Arm 相容的工作負載,就像部署任何其他工作負載一樣。如要查看部署工作負載的範例,請參閱下列頁面:
疑難排解
如需常見錯誤和疑難排解資訊,請參閱「排解 Arm 工作負載問題」。