ACK One Fleet dapat mendistribusikan replika beban kerja secara dinamis, seperti Deployments, StatefulSets, dan Jobs, di seluruh kluster terkait berdasarkan sumber daya yang tersedia melalui PropagationPolicy. Secara default, instance ACK One Fleet mengaktifkan penjadwalan ulang. Karena ketersediaan sumber daya kluster berfluktuasi seiring waktu, beberapa replika di kluster terkait mungkin menjadi tidak dapat dijadwalkan. Instance Fleet secara otomatis memeriksa replika yang tidak dapat dijadwalkan setiap dua menit dan memicu penjadwalan ulang jika mereka tetap dalam keadaan ini selama lebih dari 30 detik.
Prasyarat
Fitur manajemen Fleet telah diaktifkan.
Instance Fleet memiliki beberapa kluster terkait.
Izin AliyunAdcpFullAccess telah diberikan kepada pengguna RAM.
Alat baris perintah AMC telah diinstal.
Prosedur
Langkah 1: Buat aplikasi di Fleet
Buat file bernama
web-demo.yamldan tambahkan konten berikut:apiVersion: apps/v1 kind: Deployment metadata: name: web-demo spec: replicas: 3 selector: matchLabels: app: web-demo template: metadata: labels: app: web-demo spec: containers: - name: nginx image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0 ports: - containerPort: 80Jalankan perintah berikut untuk menerapkan aplikasi:
kubectl apply -f web-demo.yaml
Langkah 2: Buat kebijakan distribusi
Buat kebijakan distribusi berbasis bobot dinamis distribution policy yang secara otomatis menyesuaikan rasio alokasi replika sesuai dengan sumber daya yang tersedia di semua node di kluster terkait.
apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: PropagationPolicy metadata: name: web-demo spec: resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: web-demo placement: clusterAffinity: clusterNames: - ${cluster1-id} # ID kluster Anda. - ${cluster2-id} replicaScheduling: replicaSchedulingType: Divided replicaDivisionPreference: Weighted weightPreference: dynamicWeight: AvailableReplicasJalankan perintah berikut untuk memeriksa status distribusi aplikasi:
kubectl amc get deploy web-demo -MOutput yang diharapkan (hasil dapat bervariasi berdasarkan rasio sumber daya yang tersedia di kluster terkait):
NAME CLUSTER READY UP-TO-DATE AVAILABLE AGE ADOPTION web-demo cxxxxxxxx1 2/2 2 2 11s Y web-demo cxxxxxxxx2 3/3 3 3 11s Y
Langkah 3: Verifikasi kemampuan penjadwalan ulang
Anda dapat mensimulasikan skenario di mana beban kerja berada dalam keadaan Pending karena sumber daya tidak mencukupi dengan memberi tanda pada node dan memulai ulang deployment yang ada.
Jalankan perintah berikut untuk memberi tanda pada semua node dengan
NoSchedule:kubectl --kubeconfig=<cluster1.config> taint nodes foo=bar:NoSchedule --all=trueJalankan perintah berikut untuk memulai ulang beban kerja yang ada. Beban kerja tersebut diharapkan gagal.
kubectl --kubeconfig=<cluster1.config> rollout restart deploy web-demoSetelah menunggu sekitar 3 menit, jalankan perintah berikut untuk memeriksa hasil penjadwalan:
kubectl amc get deploy web-demo -MOutput yang diharapkan:
NAME CLUSTER READY UP-TO-DATE AVAILABLE AGE ADOPTION web-demo cxxxxxxxx2 5/5 5 5 11s YOutput yang diharapkan menunjukkan bahwa replika beban kerja di Cluster1 telah dijadwalkan ulang ke Cluster2.