ACS叢集中Node對象以虛擬節點的形式提供,虛擬節點以label的形式標記了各類屬性,例如可用性區域、地區,以及虛擬節點的GPU型號等。在ACS叢集中,您可以通過Kubernetes原生調度語義實現節點親和性調度,通過在nodeSelector或nodeAffinity欄位中填寫特定的節點屬性,可以將應用運行在特定屬性的虛擬節點上。本文介紹ACS的節點親和性調度。
前提條件
已安裝調度器組件kube-scheduler,且版本滿足以下要求。
ACS叢集版本
調度器組件版本
1.31
v1.31.0-aliyun-1.2.0及以上
1.30
v1.30.3-aliyun-1.1.1及以上
1.28
v1.28.9-aliyun-1.1.0及以上
已安裝acs-virtual-node組件,版本為v2.12.0-acs.4或以上。
注意事項
ACS調度器配置項開啟GPU-HPN節點自訂標籤、調度器在新版本中已預設開啟,可無需關注,詳見kube-scheduler。
nodeSelector
nodeSelector可以直接指定虛擬節點中的標籤,來實現節點親和性調度。
nodeAffinity
nodeAffinity同樣可以聲明節點的親和性屬性,但其文法表達能力更強,對於同時符合以下條件的Pod,在ACS叢集中使用節點親和性調度時存在相關約束。
ACS調度器組件配置開啟GPU-HPN節點自訂標籤、調度器在新版本中已預設開啟,詳見kube-scheduler。
Pod的計算類型為高效能網路GPU型(GPU-HPN)。
Pod的
schedulerName為default-scheduler。調度器組件配置未勾選開啟GPU-HPN節點自訂標籤、調度器。
協議欄位 | 含義 | 約束條件 |
requiredDuringSchedulingIgnoredDuringExecution | 只有在規則被滿足的時候才能執行調度,類似 | nodeSelectorTerms欄位中:
|
preferredDuringSchedulingIgnoredDuringExecution | 按權重指定節點親和性,調度器會嘗試尋找滿足對應規則的節點,如果找不到匹配的節點,調度器仍然會調度該Pod。 | 不支援。 |
對於通用型、效能型和GPU型執行個體,nodeAffinity協議不存在以上約束。
操作樣本
樣本中展示了通過配置nodeSelector將應用調度到指定可用性區域的效果。
執行以下命令,查看叢集中的虛擬節點。
kubectl get node預期輸出:
NAME STATUS ROLES AGE VERSION virtual-kubelet-cn-hangzhou-i Ready agent 5h42m v1.28.3-xx virtual-kubelet-cn-hangzhou-j Ready agent 5h42m v1.28.3-xx使用以下YAML內容,建立dep-node-selector-demo.yaml檔案。
apiVersion: apps/v1 kind: Deployment metadata: name: dep-node-selector-demo labels: app: node-selector-demo spec: replicas: 4 selector: matchLabels: app: node-selector-demo template: metadata: labels: app: node-selector-demo spec: containers: - name: node-selector-demo image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "infinity" # 指定可用性區域為cn-hangzhou-j nodeSelector: topology.kubernetes.io/zone: cn-hangzhou-j執行以下命令,將應用部署到叢集。
kubectl apply -f dep-node-selector-demo.yaml執行以下命令,查看Pod調度的分布情況。
kubectl get pod -o wide預期輸出:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES dep-node-selector-demo-b4578576b-cgpfq 1/1 Running 0 112s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-j <none> <none> dep-node-selector-demo-b4578576b-fs8kl 1/1 Running 0 110s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-j <none> <none> dep-node-selector-demo-b4578576b-nh8zm 1/1 Running 0 2m8s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-j <none> <none> dep-node-selector-demo-b4578576b-rpp8l 1/1 Running 0 2m8s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-j <none> <none>可以看到4個Pod都分布在
cn-hangzhou-j可用性區域。