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或以上。
注意事項
nodeSelector
nodeSelector中可以直接指定虛擬節點中的標籤,來實現節點親和性調度。針對不同種類的虛擬節點,ACS分別支援以下標籤。
虛擬節點類型 | Label | 含義 | 範例 |
普通虛擬節點 | topology.kubernetes.io/zone | 網路可用性區域 | topology.kubernetes.io/zone: cn-shanghai-b |
高效能網路GPU型虛擬節點 | topology.kubernetes.io/zone | 網路可用性區域 | topology.kubernetes.io/zone: cn-shanghai-b |
alibabacloud.com/hpn-zone | 高速網路可用性區域 | alibabacloud.com/hpn-zone: B1 | |
alibabacloud.com/gpu-model-series | GPU型號 | alibabacloud.com/gpu-model-series: <example-model> |
nodeAffinity
nodeAffinity同樣可以聲明節點的親和性屬性,但其文法表達能力更強,對於不同的計算類型,ACS在具體欄位上存在以下約束。
計算類型 | 協議欄位 | 含義 | 約束條件 |
| requiredDuringSchedulingIgnoredDuringExecution | 只有在規則被滿足的時候才能執行調度,類似 | nodeSelectorTerms欄位中:
|
preferredDuringSchedulingIgnoredDuringExecution | 按權重指定節點親和性,調度器會嘗試尋找滿足對應規則的節點,如果找不到匹配的節點,調度器仍然會調度該Pod。 | 不支援。 |
對於通用型和效能型執行個體,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可用性區域。