本頁面說明如何設定 Google Kubernetes Engine (GKE) Autopilot 部署作業,要求以 Arm 架構為基礎的節點。
關於 Autopilot 中的 Arm 架構
Autopilot 叢集提供運算類別,可滿足特定硬體需求的工作負載。其中部分運算類別支援多個 CPU 架構,例如 amd64
和 arm64
。
Arm 節點的用途
與類似的 x86 節點相比,採用 Arm 架構的節點可提供更具成本效益的效能。在下列情況中,您應為 Autopilot 工作負載選取 Arm:
- 您的環境依賴 Arm 架構進行建構和測試。
- 您要為搭載 Arm CPU 的 Android 裝置開發應用程式。
- 您使用多架構映像檔,並希望在執行工作負載時盡可能提高成本效益。
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
- 請參閱 Arm 節點的規定和限制。
- 請確認您有 C4A 或 Tau T2A Compute Engine 機器類型的配額。
- 確認您有一個 Pod,其中包含為 Arm 架構建構的容器映像檔。
如何在 Autopilot 中要求 Arm 節點
如要指示 Autopilot 在 Arm 節點上執行 Pod,請在 nodeSelector 或 node affinity 規則中指定下列其中一個標籤:
kubernetes.io/arch: arm64
。對於執行 1.31.3-gke.1056000 以上版本的叢集,GKE 預設會將 Pod 放置在C4A
機器類型上。 如果叢集執行的是舊版,GKE 會將 Pod 放置在T2A
機型上。cloud.google.com/machine-family: ARM_MACHINE_SERIES
。 將ARM_MACHINE_SERIES
替換為 Arm 機型系列,例如C4A
或T2A
。GKE 會將 Pod 放置在指定的系列中。
根據預設,使用任一標籤時,如果節點有可用容量,GKE 會將其他 Pod 放在同一個節點上。如要為每個 Pod 要求專屬節點,請在資訊清單中加入 cloud.google.com/compute-class:
Performance
標籤。詳情請參閱「選擇機器系列,最佳化 Autopilot Pod 效能」。
或者,您也可以搭配使用 Scale-Out
和 arm64
標籤,要求 T2A
。
您也可以為 Spot Pod 要求 Arm 架構。
部署工作負載時,Autopilot 會執行下列操作:
- 自動佈建 Arm 節點來執行 Pod。
- 自動汙染新節點,防止非 Arm Pod 排程到這些節點上。
- 自動將容許條件新增至 Arm Pod,允許在新節點上排程。
Arm 架構的要求範例
下列範例規格說明如何在 Autopilot 中使用節點選取器或節點親和性規則,要求 Arm 架構。
nodeSelector
以下資訊清單範例說明如何在 nodeSelector 中要求 Arm 節點:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-arm
spec:
replicas: 3
selector:
matchLabels:
app: nginx-arm
template:
metadata:
labels:
app: nginx-arm
spec:
nodeSelector:
cloud.google.com/compute-class: Performance
kubernetes.io/arch: arm64
containers:
- name: nginx-arm
image: nginx
resources:
requests:
cpu: 2000m
memory: 2Gi
nodeAffinity
您可以使用節點親和性要求 Arm 節點。您也可以指定要使用的節點親和性類型:
requiredDuringSchedulingIgnoredDuringExecution
:必須使用指定的運算類別和架構。preferredDuringSchedulingIgnoredDuringExecution
:盡力使用指定的運算類別和架構。舉例來說,如果現有的 x86 節點可供分配,GKE 會將 Pod 放在 x86 節點上,而不是佈建新的 Arm 節點。除非您使用多架構映像檔資訊清單,否則 Pod 會當機。強烈建議您明確要求所需的特定架構。
下列資訊清單範例需要 Performance
類別和 Arm 節點:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-arm
spec:
replicas: 3
selector:
matchLabels:
app: nginx-arm
template:
metadata:
labels:
app: nginx-arm
spec:
terminationGracePeriodSeconds: 25
containers:
- name: nginx-arm
image: nginx
resources:
requests:
cpu: 2000m
memory: 2Gi
ephemeral-storage: 1Gi
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: cloud.google.com/compute-class
operator: In
values:
- Performance
- key: kubernetes.io/arch
operator: In
values:
- arm64
建議
- 建構及使用多架構映像檔,做為管道的一部分。多架構映像檔可確保 Pod 即使放置在 x86 節點上,也能正常運作。
- 在工作負載資訊清單中明確要求架構和運算類別。否則,Autopilot 會使用所選運算級別的預設架構,這可能不是 Arm。
可用性
您可以在支援 Arm 架構的Google Cloud 位置,將 Autopilot 工作負載部署在 Arm 架構上。詳情請參閱「可用地區和區域」。
疑難排解
如需常見錯誤和疑難排解資訊,請參閱「排解 Arm 工作負載問題」。