Penjadwalan sumber daya berbasis prioritas disediakan oleh Alibaba Cloud untuk memenuhi kebutuhan elastisitas dalam penjadwalan pod. Saat meluncurkan aplikasi atau melakukan penskalaan, Anda dapat mengonfigurasi kebijakan sumber daya kustom untuk menjadwalkan pod aplikasi ke Container Compute Service (ACS) dari Alibaba Cloud. Dengan cara ini, Instance Elastic Compute Service (ECS) dan pod ACS dapat ditempatkan secara kolokasi.
Pada kube-scheduler v1.x.x-aliyun-6.4 dan versi lebih baru, parameter ignorePreviousPod dari ResourcePolicy diatur ke False dan parameter ignoreTerminatingPod diatur ke True secara default. ResourcePolicy yang ada yang menggunakan parameter sebelumnya tidak terpengaruh oleh perubahan ini atau pembaruan lebih lanjut.
Batasan
Jika Anda menggunakan fitur ini bersama dengan pod-deletion-cost dalam skenario penskalaan masuk, Anda tidak dapat melakukan penskalaan masuk dalam urutan terbalik.
Parameter
maxhanya tersedia jika klaster Anda menjalankan Kubernetes 1.26 atau lebih baru dan versi scheduler yang terinstal di klaster Anda adalah 6.7 atau lebih baru.Jika Anda menggunakan fitur ini bersama dengan pool node elastis, node yang tidak valid mungkin ditambahkan ke pool node elastis. Pastikan bahwa pool node elastis termasuk dalam unit. Jangan tentukan parameter
maxuntuk unit-unit tersebut.
Cara Penggunaan
Untuk informasi lebih lanjut tentang fitur penjadwalan berbasis prioritas dari klaster Container Service for Kubernetes (ACK) Pro, lihat Konfigurasikan penjadwalan sumber daya berbasis prioritas.
Prasyarat
Klaster ACK Pro yang menjalankan Kubernetes 1.26 atau lebih baru telah dibuat. Untuk informasi lebih lanjut tentang cara memperbarui versi Kubernetes dari klaster ACK, lihat Perbarui versi Kubernetes dari klaster ACK.
Versi scheduler tertentu diperlukan berdasarkan versi Kubernetes dari klaster. Tabel berikut menjelaskan versi scheduler yang diperlukan dan versi node virtual untuk setiap versi Kubernetes.
Versi Kubernetes
Versi Scheduler
Versi Node Virtual
≥ V1.26
≥ V1.26.3-aliyun-6.7.0
≥ V2.13.0
Untuk informasi lebih lanjut tentang fitur-fitur dari versi scheduler yang berbeda, lihat kube-scheduler.
Untuk informasi lebih lanjut tentang cara mengaktifkan daya komputasi ACS untuk klaster ACK Pro, lihat Gunakan daya komputasi ACS dalam klaster ACK Pro.
Penjadwalan kolokasi Instance ECS dan daya komputasi ACS
Anda ingin menjadwalkan pod dari Deployment ke beberapa jenis sumber daya, seperti instance ECS berlangganan, instance ECS bayar sesuai pemakaian, dan pod ACS. Untuk mengurangi biaya sumber daya, Anda ingin menjadwalkan pod ke sumber daya berdasarkan prioritas berikut: instance ECS berlangganan > instance ECS bayar sesuai pemakaian > pod ACS. Dalam aktivitas penskalaan masuk, Anda ingin menghapus pod dari sumber daya ini berdasarkan urutan berikut: pod ACS, instance ECS bayar sesuai pemakaian, dan instance ECS berlangganan. Dalam contoh ini, setiap node memiliki 2 vCore dan 4 GB memori. Lakukan langkah-langkah berikut untuk mengonfigurasi penjadwalan kolokasi Instance ECS dan daya komputasi ACS:
Jalankan perintah berikut untuk menambahkan
labelyang menunjukkan metode pembayaran yang berbeda ke node. Anda juga dapat menggunakan pool node untuk secara otomatis menambahkanlabelke node.kubectl label node cn-beijing.10.0.3.137 paidtype=subscription kubectl label node cn-beijing.10.0.3.138 paidtype=subscription kubectl label node cn-beijing.10.0.6.46 paidtype=pay-as-you-go kubectl label node cn-beijing.10.0.6.47 paidtype=pay-as-you-goNode
labeldeskripsi.paidtype=subscription: berlangganan
paidtype=pay-as-you-go: bayar sesuai pemakaian
Buat ResourcePolicy berdasarkan konten berikut:
apiVersion: scheduling.alibabacloud.com/v1alpha1 kind: ResourcePolicy metadata: name: nginx namespace: default spec: selector: app: nginx # Anda harus menentukan label pod yang ingin Anda terapkan ResourcePolicy. strategy: prefer units: - resource: ecs nodeSelector: paidtype: subscription - resource: ecs nodeSelector: paidtype: pay-as-you-go - resource: acsGunakan template berikut untuk membuat Deployment yang menyediakan dua pod:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: nginx labels: app: nginx # Label pod harus sama dengan yang Anda tentukan untuk selector dalam ResourcePolicy. alibabacloud.com/compute-class: general-purpose # Kelas komputasi dari daya komputasi ACS. Nilai default: general-purpose. alibabacloud.com/compute-qos: default # Kelas kualitas layanan (QoS) dari pod ACS. Nilai default: default. spec: containers: - name: nginx image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 resources: limits: cpu: 2 requests: cpu: 2Sebarkan aplikasi NGINX dan tanyakan pod.
Jalankan perintah berikut untuk menyebarkan aplikasi NGINX:
kubectl apply -f nginx.yamlOutput yang diharapkan:
deployment.apps/nginx createdJalankan perintah berikut untuk menanyakan pod:
kubectl get pods -o wideOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-9cdf7bbf9-b**** 1/1 Running 0 66s 172.29.112.215 cn-beijing.10.0.3.137 <none> <none> nginx-9cdf7bbf9-r**** 1/1 Running 0 66s 172.29.113.23 cn-beijing.10.0.3.138 <none> <none>Output menunjukkan bahwa dua pod dijadwalkan ke node yang memiliki
paidtype=subscriptionlabel. Dalam contoh ini, cn-beijing.10.0.3.137 dan cn-beijing.10.0.3.138 digunakan.
Tambahkan pod untuk aplikasi NGINX.
Jalankan perintah berikut untuk meningkatkan jumlah pod menjadi empat:
kubectl scale deployment nginx --replicas 4Output yang diharapkan:
deployment.apps/nginx scaledJalankan perintah berikut untuk menanyakan status pod:
kubectl get pods -o wideOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-9cdf7bbf9-4**** 1/1 Running 0 16s 172.29.113.155 cn-beijing.10.0.6.47 <none> <none> nginx-9cdf7bbf9-b**** 1/1 Running 0 3m48s 172.29.112.215 cn-beijing.10.0.3.137 <none> <none> nginx-9cdf7bbf9-f**** 1/1 Running 0 16s 172.29.113.88 cn-beijing.10.0.6.46 <none> <none> nginx-9cdf7bbf9-r**** 1/1 Running 0 3m48s 172.29.113.23 cn-beijing.10.0.3.138 <none> <none>Output menunjukkan bahwa pod baru dijadwalkan ke node yang memiliki
paidtype=pay-as-you-golabelkarena node yang memilikipaidtype=subscriptionlabeltidak mencukupi. Dalam contoh ini, cn-beijing.10.0.6.46 dan cn-beijing.10.0.6.47 digunakan.Jalankan perintah berikut untuk meningkatkan jumlah pod menjadi enam:
kubectl scale deployment nginx --replicas 6Output yang diharapkan:
deployment.apps/nginx scaledJalankan perintah berikut untuk menanyakan status pod:
kubectl get pods -o wideOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-9cdf7bbf9-4**** 1/1 Running 0 3m10s 172.29.113.155 cn-beijing.10.0.6.47 <none> <none> nginx-9cdf7bbf9-b**** 1/1 Running 0 6m42s 172.29.112.215 cn-beijing.10.0.3.137 <none> <none> nginx-9cdf7bbf9-f**** 1/1 Running 0 3m10s 172.29.113.88 cn-beijing.10.0.6.46 <none> <none> nginx-9cdf7bbf9-r**** 1/1 Running 0 6m42s 172.29.113.23 cn-beijing.10.0.3.138 <none> <none> nginx-9cdf7bbf9-s**** 1/1 Running 0 36s 10.0.6.68 virtual-kubelet-cn-beijing-j <none> <none> nginx-9cdf7bbf9-v**** 1/1 Running 0 36s 10.0.6.67 virtual-kubelet-cn-beijing-j <none> <none>Output menunjukkan bahwa instance ECS kekurangan sumber daya. Pod dijadwalkan ke ACS. Dalam contoh ini, virtual-kubelet-cn-beijing-j digunakan.
Kurangi pod untuk aplikasi NGINX.
Jalankan perintah berikut untuk mengurangi jumlah pod menjadi empat:
kubectl scale deployment nginx --replicas 4Output yang diharapkan:
deployment.apps/nginx scaledJalankan perintah berikut untuk menanyakan status pod:
kubectl get pods -o wideOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-9cdf7bbf9-4**** 1/1 Running 0 4m59s 172.29.113.155 cn-beijing.10.0.6.47 <none> <none> nginx-9cdf7bbf9-b**** 1/1 Running 0 8m31s 172.29.112.215 cn-beijing.10.0.3.137 <none> <none> nginx-9cdf7bbf9-f**** 1/1 Running 0 4m59s 172.29.113.88 cn-beijing.10.0.6.46 <none> <none> nginx-9cdf7bbf9-r**** 1/1 Running 0 8m31s 172.29.113.23 cn-beijing.10.0.3.138 <none> <none> nginx-9cdf7bbf9-s**** 1/1 Terminating 0 2m25s 10.0.6.68 virtual-kubelet-cn-beijing-j <none> <none> nginx-9cdf7bbf9-v**** 1/1 Terminating 0 2m25s 10.0.6.67 virtual-kubelet-cn-beijing-j <none> <none>Output menunjukkan bahwa pod yang berjalan di ACS dihapus.
Jalankan perintah berikut untuk mengurangi jumlah pod menjadi dua:
kubectl scale deployment nginx --replicas 2Output yang diharapkan:
deployment.apps/nginx scaledJalankan perintah berikut untuk menanyakan status pod:
kubectl get pods -o wideOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-9cdf7bbf9-4**** 0/1 Terminating 0 6m43s 172.29.113.155 cn-beijing.10.0.6.47 <none> <none> nginx-9cdf7bbf9-b**** 1/1 Running 0 10m 172.29.112.215 cn-beijing.10.0.3.137 <none> <none> nginx-9cdf7bbf9-f**** 0/1 Terminating 0 6m43s 172.29.113.88 cn-beijing.10.0.6.46 <none> <none> nginx-9cdf7bbf9-r**** 1/1 Running 0 10m 172.29.113.23 cn-beijing.10.0.3.138 <none> <none>Output menunjukkan bahwa pod pada node yang memiliki
paidtype=pay-as-you-golabeldihapus.Tunggu beberapa menit dan jalankan perintah berikut untuk menanyakan status pod lagi:
kubectl get pods -o wideOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-9cdf7bbf9-b**** 1/1 Running 0 11m 172.29.112.215 cn-beijing.10.0.3.137 <none> <none> nginx-9cdf7bbf9-r**** 1/1 Running 0 11m 172.29.113.23 cn-beijing.10.0.3.138 <none> <none>Output menunjukkan bahwa pod hanya berjalan pada node dengan
paidtype=subscriptionlabel.
Referensi
Saat Anda menyebarkan klaster ACK, Anda dapat mengonfigurasi toleransi dan afinitas node untuk memungkinkan scheduler hanya menggunakan instance ECS atau daya komputasi ACS, atau mengizinkan scheduler secara otomatis mengajukan sumber daya komputasi ACS ketika instance ECS tidak mencukupi. Anda dapat mengonfigurasi kebijakan penjadwalan yang berbeda untuk menskalakan sumber daya dalam skenario yang berbeda. Untuk informasi lebih lanjut, lihat Gunakan daya komputasi ACS dalam klaster ACK Pro.
Ketersediaan tinggi dan performa tinggi sangat penting untuk pekerjaan terdistribusi. Dalam klaster ACK Pro, Anda dapat menggunakan semantik penjadwalan asli Kubernetes untuk menyebarkan pekerjaan terdistribusi di zona untuk ketersediaan tinggi. Anda juga dapat menggunakan semantik penjadwalan asli Kubernetes untuk menyebarkan pekerjaan terdistribusi di zona tertentu berdasarkan pengaturan afinitas untuk performa tinggi. Untuk informasi lebih lanjut, lihat Penjadwalan afinitas node.