Anda dapat menggunakan ack-descheduler untuk mengoptimalkan penjadwalan pod yang tidak sesuai dengan node. Ini membantu menghindari pemborosan sumber daya dan meningkatkan pemanfaatan sumber daya dalam kluster Container Service for Kubernetes (ACK). Topik ini menjelaskan cara menggunakan ack-descheduler untuk mengoptimalkan penjadwalan pod.
ack-descheduler telah dihentikan. Lihat [Pemberitahuan Komponen] migrasi ack-descheduler untuk detail lebih lanjut. Kami menyarankan Anda bermigrasi dari ack-descheduler ke Koordinator Descheduler.
Prasyarat
Kluster ACK yang menjalankan Kubernetes 1.14 atau lebih baru telah dibuat. Tingkatkan kluster ACK secara manual jika diperlukan.
Komponen Helm harus versi 3.0 atau lebih baru. Untuk informasi lebih lanjut, lihat Perbarui Helm V2 ke Helm V3.
Instal ack-descheduler
Masuk ke Konsol ACK.
Di panel navigasi kiri Konsol ACK, pilih .
Di halaman Marketplace, klik tab App Catalog. Temukan dan klik ack-descheduler.
Di halaman ack-descheduler, klik Deploy.
Di wizard Deploy, pilih kluster dan namespace, lalu klik Next.
Di halaman wizard Parameters, konfigurasikan parameter dan klik OK.
Setelah ack-descheduler diinstal, CronJob secara otomatis dibuat di namespace
kube-system. Secara default, CronJob ini berjalan setiap 2 menit. Setelah instalasi selesai, Anda akan diarahkan ke halaman ack-descheduler-default. Jika semua sumber daya terkait telah dibuat, seperti yang ditunjukkan pada gambar berikut, komponen tersebut telah berhasil diinstal.
Gunakan ack-descheduler untuk mengoptimalkan penjadwalan pod
Jalankan perintah berikut untuk memeriksa pengaturan DeschedulerPolicy dari ConfigMap ack-descheduler-default.
kubectl describe cm ack-descheduler-default -n kube-systemOutput yang diharapkan:
Tabel berikut menjelaskan kebijakan penjadwalan yang dikembalikan dalam output sebelumnya. Untuk informasi lebih lanjut tentang pengaturan kebijakan di bagian
strategies, lihat Descheduler.Kebijakan
Deskripsi
RemoveDuplicates
Kebijakan ini menghapus pod duplikat dan memastikan hanya satu pod yang terkait dengan ReplicaSet, ReplicationController, StatefulSet, atau Job yang berjalan di node yang sama.
RemovePodsViolatingInterPodAntiAffinity
Kebijakan ini menghapus pod yang melanggar aturan anti-affinitas antar-pod.
LowNodeUtilization
Kebijakan ini menemukan node yang kurang dimanfaatkan, mengeluarkan pod dari node lain, dan menciptakan ulang pod di node yang kurang dimanfaatkan. Parameter kebijakan ini dikonfigurasi di bagian
nodeResourceUtilizationThresholds.RemovePodsHavingTooManyRestarts
Kebijakan ini menghapus pod yang telah di-restart sejumlah kali tertentu.
Verifikasi penjadwalan pod sebelum kebijakan penjadwalan dimodifikasi.
Buat Deployment untuk menguji penjadwalan.
Buat file nginx.yaml dan salin konten berikut ke file tersebut:
apiVersion: apps/v1 # untuk versi sebelum 1.8.0 gunakan apps/v1beta1 kind: Deployment metadata: name: nginx-deployment-basic labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 # Ganti dengan gambar yang ingin Anda gunakan. Nilainya harus dalam format <image_name:tags>. ports: - containerPort: 80Jalankan perintah berikut untuk membuat Deployment dengan file nginx.yaml:
kubectl apply -f nginx.yamlOutput yang diharapkan:
deployment.apps/nginx-deployment-basic createdTunggu 2 menit dan jalankan perintah berikut untuk memeriksa node tempat pod dijadwalkan:
kubectl get pod -o wide | grep nginxOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-deployment-basic-**1 1/1 Running 0 36s 172.25.XXX.XX1 cn-hangzhou.172.16.XXX.XX2 <none> <none> nginx-deployment-basic-**2 1/1 Running 0 11s 172.25.XXX.XX2 cn-hangzhou.172.16.XXX.XX3 <none> <none> nginx-deployment-basic-**3 1/1 Running 0 36s 172.25.XXX.XX3 cn-hangzhou.172.16.XXX.XX3 <none> <none>Output menunjukkan bahwa pod
nginx-deployment-basic-**2dan podnginx-deployment-basic-**3dijadwalkan ke node yang samacn-hangzhou.172.16.XXX.XX3.CatatanJika Anda menggunakan pengaturan default untuk ConfigMap ack-descheduler-default, hasil penjadwalan bervariasi berdasarkan kondisi aktual kluster.
Modifikasi kebijakan penjadwalan.
Jika Anda menggunakan beberapa kebijakan penjadwalan, hasil penjadwalan yang tidak diinginkan mungkin diperoleh. Untuk mencegah masalah ini, modifikasi ConfigMap di Langkah 1 untuk menyimpan hanya kebijakan RemoveDuplicates.
CatatanKebijakan RemoveDuplicates memastikan bahwa pod yang dikelola oleh pengontrol replikasi didistribusikan secara merata ke node yang berbeda.
Dalam contoh ini, nama ConfigMap diubah menjadi newPolicy.yaml setelah dimodifikasi. ConfigMap yang dimodifikasi berisi konten berikut:
apiVersion: v1 kind: ConfigMap metadata: name: descheduler namespace: kube-system labels: app.kubernetes.io/instance: descheduler app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: descheduler app.kubernetes.io/version: 0.20.0 helm.sh/chart: descheduler-0.20.0 annotations: meta.helm.sh/release-name: descheduler meta.helm.sh/release-namespace: kube-system data: policy.yaml: |- apiVersion: "descheduler/v1alpha1" kind: "DeschedulerPolicy" strategies: "RemoveDuplicates": # Simpan hanya kebijakan RemoveDuplicates. enabled: trueVerifikasi penjadwalan pod setelah kebijakan penjadwalan dimodifikasi.
Jalankan perintah berikut untuk menerapkan kebijakan penjadwalan baru:
kubectl apply -f newPolicy.yamlOutput yang diharapkan:
configmap/descheduler createdTunggu 2 menit dan jalankan perintah berikut untuk memeriksa node tempat pod dijadwalkan:
kubectl get pod -o wide | grep nginxOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-deployment-basic-**1 1/1 Running 0 8m26s 172.25.XXX.XX1 cn-hangzhou.172.16.XXX.XX2 <none> <none> nginx-deployment-basic-**2 1/1 Running 0 8m1s 172.25.XXX.XX2 cn-hangzhou.172.16.XXX.XX1 <none> <none> nginx-deployment-basic-**3 1/1 Running 0 8m26s 172.25.XXX.XX3 cn-hangzhou.172.16.XXX.XX3 <none> <none>Output menunjukkan bahwa pod
nginx-deployment-basic-**2dijadwalkan ulang kecn-hangzhou.172.16.XXX.XX1oleh ack-descheduler. Dalam kasus ini, masing-masing dari tiga pod uji dijadwalkan ke node yang berbeda. Ini menyeimbangkan penjadwalan pod di antara beberapa node.