Ketersediaan tinggi sangat penting bagi aplikasi terdistribusi. Dalam kluster Alibaba Cloud Container Compute Service (ACS), Anda dapat menyebarkan aplikasi terdistribusi di seluruh zona menggunakan semantik penjadwalan asli Kubernetes untuk memastikan ketersediaan tinggi. Anda dapat menambahkan label topologi dengan mengonfigurasi bidang TopologyKey dari batasan penyebaran topologi guna mendistribusikan beban kerja di seluruh zona. Topik ini menjelaskan batasan dan penggunaan batasan penyebaran topologi di ACS.
Prasyarat
kube-scheduler telah terpasang dan versinya memenuhi persyaratan berikut.
Versi kluster ACS
Versi Scheduler
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 terpasang dan versinya adalah v2.12.0-acs.4 atau yang lebih baru.
Catatan Penggunaan
Semua node dalam kluster ACS adalah node virtual. Anda dapat menambahkan label topologi ke node virtual dengan mengonfigurasi bidang TopologyKey dari batasan penyebaran topologi untuk mendistribusikan beban kerja di seluruh zona.
Tabel berikut menjelaskan label topologi yang didukung oleh ACS untuk berbagai jenis node.
Jenis Node Virtual | Label | Deskripsi | Contoh |
Node virtual reguler | topology.kubernetes.io/zone | Zona jaringan | topology.kubernetes.io/zone: cn-shanghai-b |
Node virtual GPU-HPN | topology.kubernetes.io/zone | Zona jaringan | topology.kubernetes.io/zone: cn-shanghai-b |
alibabacloud.com/hpn-zone | Zona jaringan berperforma tinggi | alibabacloud.com/hpn-zone: B1 |
ACS mendukung berbagai kelas komputasi. Batasan berikut berlaku ketika Anda mengonfigurasi bidang lain dari batasan distribusi topologi untuk pod dari berbagai kelas komputasi.
Kelas Komputasi | Bidang | Deskripsi | Batasan |
| labelSelector | Bidang ini digunakan untuk menemukan pod yang cocok. Pod yang cocok dengan pemilih label ini dihitung untuk menentukan jumlah pod dalam domain topologi. | Pod dengan akselerasi GPU dan pod GPU-HPN tidak dihitung. |
matchLabelKeys | Daftar kunci label pod yang digunakan untuk memilih pod yang akan dihitung distribusinya. | ||
| labelSelector | Bidang ini digunakan untuk menemukan pod yang cocok. Pod yang cocok dengan pemilih label ini dihitung untuk menentukan jumlah pod dalam domain topologi. | Pod di kelas komputasi lainnya, seperti kelas tujuan umum dan peningkatan performa, tidak dihitung. |
matchLabelKeys | Daftar kunci label pod yang digunakan untuk memilih pod yang akan dihitung distribusinya. | ||
nodeAffinityPolicy | Bidang ini menentukan bagaimana memperlakukan nodeAffinity atau nodeSelector dari pod saat kemiringan penyebaran topologi pod dihitung. | Tidak didukung. | |
nodeTaintsPolicy | Bidang ini menentukan bagaimana memperlakukan taint node saat kemiringan penyebaran topologi pod dihitung. | Tidak didukung. |
Untuk informasi lebih lanjut tentang bidang tersebut, lihat Batasan Penyebaran Topologi Pod.
Prosedur
Jalankan perintah berikut untuk melihat node dalam 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 bernama dep-spread-demo.yaml dan tambahkan konten berikut ke 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-hangzhou.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "infinity" # Tentukan batasan penyebaran. Nilai maxSkew menunjukkan bahwa perbedaan jumlah pod antar zona tidak boleh melebihi 1. 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 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 menunjukkan bahwa empat pod didistribusikan di dua zona.