Ketersediaan tinggi merupakan persyaratan kritis bagi aplikasi terdistribusi. Di kluster Alibaba Cloud Container Compute Service (ACS), Anda dapat memanfaatkan semantik penjadwalan native Kubernetes untuk menyebarkan beban kerja di berbagai zona guna mencapai ketersediaan tinggi. Distribusi lintas zona ini dapat diaktifkan dengan menentukan label topologi pada bidang topologyKey dalam sebuah topology spread constraint. Topik ini menjelaskan kondisi dan penggunaan topology spread constraints di ACS.
Prasyarat
Sebelum memulai, pastikan Anda telah:
kube-scheduler terinstal pada versi yang memenuhi persyaratan berikut:
Versi kluster ACS Versi penjadwal minimum 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 terinstal pada v2.12.0-acs.4 atau yang lebih baru
Catatan penggunaan
Pengaturan Enable custom labels and scheduler for GPU-HPN nodes dalam konfigurasi komponen penjadwal ACS secara default diaktifkan pada versi-versi terbaru. Untuk informasi selengkapnya, lihat kube-scheduler.
Saat menggunakan topology spread constraints di kluster ACS, beberapa bidang memiliki batasan untuk Pod yang memenuhi semua kondisi berikut:
-
Jenis komputasi Pod adalah GPU-HPN.
-
schedulerNamePod diatur kedefault-scheduler. -
Opsi Enable Custom Tags And Scheduler For GPU-HPN Nodes tidak dipilih dalam konfigurasi komponen penjadwal.
|
Parameter |
Deskripsi |
Batasan |
|
labelSelector |
Menemukan Pod yang sesuai, yang dihitung untuk menentukan jumlah Pod di domain topologi terkait. |
Pod jenis komputasi lainnya, seperti general-purpose, performance-enhanced, dan gpu-accelerated, tidak termasuk dalam perhitungan. |
|
matchLabelKeys |
Daftar kunci label Pod yang, bersama dengan |
|
|
nodeAffinityPolicy |
Menentukan cara nodeAffinity/nodeSelector Pod diperlakukan saat menghitung ketimpangan penyebaran topologi. |
Tidak didukung. |
|
nodeTaintsPolicy |
Menentukan cara taint node diperlakukan saat menghitung ketimpangan penyebaran topologi. |
Tidak didukung. |
Batasan topology spread tersebut tidak berlaku untuk instans general-purpose, performance-enhanced, dan gpu-accelerated. Untuk informasi lebih lanjut mengenai setiap bidang, lihat Pod Topology Spread Constraints.
Prosedur
-
Jalankan perintah berikut untuk melihat node 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-xx -
Buat file bernama dep-spread-demo.yaml dan tambahkan konten berikut ke dalam file tersebut:
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" # Menentukan batasan penyebaran zona. maxSkew=1 berarti jumlah Pod boleh berbeda paling banyak satu di antara zona. topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: spread-demo -
Jalankan perintah berikut untuk menyebarluaskan dep-spread-demo ke kluster:
kubectl apply -f dep-spread-demo.yaml -
Jalankan perintah berikut untuk melihat hasil distribusi 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 bahwa empat Pod didistribusikan di dua zona.