ACK叢集預設會將所有工作負載調度到x86架構的Worker節點。如果您的叢集中既有Arm節點,又有非Arm節點(例如x86節點),為了確保只相容Arm架構的工作負載調度到Arm節點,或多架構鏡像優先調度到Arm節點,您可以基於Kubernetes原生調度配置來實現。
前提條件
已建立Arm叢集或Arm節點池,且叢集版本符合要求。具體操作,請參見配置ARM節點池。
Arm執行個體開放的地區及可用性區域是有限制的,請保證叢集在已開放地區。查詢Arm執行個體開放的地區及可用性區域,請參見ECS執行個體規格可購買地區總覽。
已安裝Kube Scheduler組件。具體操作,請參見kube-scheduler。
注意事項
如果您的ACK叢集同時存在Arm節點和x86節點,為了防止不支援Arm的應用和組件被錯誤地調度到Arm節點,請為Arm節點添加汙點kubernetes.io/arch=arm64:NoSchedule
。如果您的叢集版本為v1.24之前,在使用nodeSelector
或者nodeAffinity
指定應用調度至Arm節點時,您需要同時聲明汙點容忍kubernetes.io/arch=arm64:NoSchedule
的tolerations
。如果您的叢集版本為v1.24版本及之後,調度器能夠自動識別Arm節點的汙點kubernetes.io/arch=arm64:NoSchedule
,無需您額外聲明tolerations
。
相關計費
建立的Arm架構類型的ECI Pod,按照實際產生的ECS規格進行計費,不按照vCPU和記憶體計費。
ECI Pod建立成功後,您可以執行kubectl describe pod
命令查看其YAML詳情。通過k8s.aliyun.com/eci-instance-spec
欄位確認ECI Pod實際使用的ECS規格,ECI會按照該ECS規格進行計費。
關於Arm架構的ECS規格的詳細資料,請參見:
指定Arm架構的工作負載調度到Arm節點
如果您的叢集中既有Arm節點也有非Arm節點,且您的應用只支援Arm架構,您可以指定應用運行在Arm節點上,以免應用Pod被調度到非Arm節點上導致啟動失敗。所有Arm節點上預設帶有Labelkubernetes.io/arch=arm64
,您可以通過兩種方式nodeSelector和nodeAffinity指定應用部署到Arm節點上。
使用nodeSelector
您可以在Pod上增加如下約束,使用nodeSelector將Pod調度到Arm架構的節點上。nodeSelector將指定此工作負載僅調度到具有arm64
標籤的節點,ACK叢集的Arm架構的節點都具有此標籤。
nodeSelector:
kubernetes.io/arch: arm64 # 指定Arm節點。
您可以使用以下範例程式碼將一個無狀態應用部署到Arm節點。
使用nodeAffinity
您可以在Pod上增加如下約束,使用節點親和性聲明指定應用部署到Arm節點上。此約束指定Pod只能被調度到帶有Label kubernetes.io/arm=arm64
的節點上。
當Pod Spec上帶有此約束時,調度器自動容忍節點上的汙點kubernetes.io/arch=arm64:NoSchedule
。
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
您可以使用以下範例程式碼將一個無狀態應用部署到Arm節點。
指定多架構鏡像調度到Arm節點
ACK叢集預設會將所有工作負載調度到x86架構的節點,並在x86節點資源不足時保持等待x86節點資源。如果您的應用鏡像為多架構鏡像,例如同時支援x86和Arm架構,您需要配置跨x86和Arm架構的節點調度。
例如,您可以通過配置節點親和性,使工作負載優先調度到Arm架構或x86架構的節點上,並在目標類型的節點資源不足時嘗試調度至其他架構類型的節點。
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
將工作負載優先調度到Arm架構
優先調度到Arm架構的節點上的工作負載樣本如下。
將工作負載優先調度到x86架構上
優先將工作負載調度至x86架構的節點的樣本如下。
常見問題
是否可以使用Arm架構類型的競價(Spot)執行個體?
目前已經提供Arm架構的競價執行個體。關於使用方式,請參見使用搶佔式執行個體。
在ACK叢集中使用Arm架構節點的限制?
目前,對於Arm架構,組件中心僅支援以下組件:
核心組件
日誌和監控
儲存
網路
應用市場的組件不支援Arm。
相關文檔
您也可以建立Arm虛擬節點,並配置工作負載(優先)調度至Arm節點。具體操作,請參見調度至Arm虛擬節點。
您可以使用阿里雲Container Registry企業版(ACR EE)構建多架構容器鏡像。具體操作,請參見構建多架構容器鏡像。
如果您有巨量資料任務需求且不想關心底層叢集資源的營運工作,您可以使用Arm虛擬節點運行Spark作業。