Ketersediaan tinggi merupakan persyaratan utama untuk eksekusi tugas terdistribusi. Di kluster ACS, gunakan semantik penjadwalan native Kubernetes untuk mendistribusikan beban kerja (workloads) ke berbagai zona dan mencapai penerapan dengan ketersediaan tinggi. Untuk mengaktifkan distribusi tingkat zona bagi beban kerja, tentukan label topologi zona di bidang topologyKey dalam konfigurasi topology spread constraints. Topik ini menjelaskan kendala dan penggunaan topology spread constraints di ACS.
Prasyarat
kube-scheduler telah diinstal dan versinya memenuhi persyaratan berikut.
Versi kluster ACS
Versi komponen penjadwal
1.31
v1.31.0-aliyun-1.2.0 dan yang lebih baru
1.30
v1.30.3-aliyun-1.1.1 dan yang lebih baru
1.28
v1.28.9-aliyun-1.1.0 dan yang lebih baru
acs-virtual-node telah diinstal dan versinya v2.12.0-acs.4 atau yang lebih baru.
Catatan
Konfigurasi Enable Custom Tags and the Scheduler for GPU-HPN Nodes untuk komponen penjadwal ACS diaktifkan secara default pada versi-versi baru. Untuk informasi selengkapnya, lihat kube-scheduler.
Fitur topology spread constraints di kluster ACS menerapkan kendala khusus hanya pada Pod yang memenuhi semua kondisi berikut:
Pod menggunakan tipe komputasi High-Performance Network GPU (GPU-HPN).
schedulerNamePod adalahdefault-scheduler.Dalam konfigurasi komponen penjadwal, opsi Enable Custom Tags And Scheduler For GPU-HPN Nodes tidak dipilih.
Bidang Protokol | Makna | Kendala |
labelSelector | Digunakan untuk menemukan Pod yang cocok. Pod yang sesuai dengan label ini dihitung untuk menentukan jumlah Pod di domain topologi terkait. | Pod dari tipe komputasi lain (tujuan umum, komputasi-teroptimalkan, GPU) tidak termasuk dalam perhitungan jumlah yang cocok. |
matchLabelKeys | Daftar kunci tag yang digunakan bersama labelSelector untuk memilih kumpulan Pod yang akan dihitung distribusinya. | |
nodeAffinityPolicy | Menunjukkan cara menangani nodeAffinity/nodeSelector Pod saat menghitung deviasi distribusi topologi Pod. | Tidak didukung. |
nodeTaintsPolicy | Menunjukkan cara menangani taint node saat menghitung deviasi distribusi topologi Pod. | Tidak didukung. |
Untuk instans tujuan umum, komputasi-teroptimalkan, dan GPU, kebijakan penyebaran topologi zona tidak tunduk pada kendala-kendala tersebut. Untuk deskripsi rinci setiap bidang, lihat Topology Spread Constraints.
Prosedur
Jalankan perintah berikut untuk melihat node virtual di kluster.
kubectl get nodeOutput yang diharapkan:
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-xxBuat file `dep-spread-demo.yaml` dengan konten YAML berikut.
apiVersion: apps/v1 kind: Deployment metadata: name: dep-spread-demo labels: app: spread-demo spec: replicas: 4 selector: matchLabels: app: spread-demo template: metadata: labels: app: spread-demo spec: containers: - name: spread-demo image: registry-cn-beijing.ack.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "infinity" # Tentukan kondisi penyebaran zona. maxSkew memastikan bahwa jumlah Pod antar zona tidak berbeda lebih dari satu. topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: spread-demoJalankan perintah berikut untuk menerapkan `dep-spread-demo` ke kluster.
kubectl apply -f dep-spread-demo.yamlJalankan perintah berikut untuk melihat distribusi penjadwalan Pod.
kubectl get pod -o wideOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES dep-spread-demo-7c656dbf5f-6twkc 1/1 Running 0 2m29s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-i <none> <none> dep-spread-demo-7c656dbf5f-cgxr8 1/1 Running 0 2m29s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-j <none> <none> dep-spread-demo-7c656dbf5f-f4fz9 1/1 Running 0 2m29s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-j <none> <none> dep-spread-demo-7c656dbf5f-kc6xf 1/1 Running 0 2m29s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-i <none> <none>Output tersebut menunjukkan empat Pod tersebar di dua zona.