Koordinator Descheduler dalam add-on ack-koordinator menyediakan fungsionalitas descheduling untuk menjadwalkan ulang Pod yang berjalan secara tidak optimal ke node lain, serta memperluas Descheduling Framework komunitas Kubernetes Descheduler dengan kontrol eviction yang lebih baik. Koordinator Descheduler kompatibel dengan kebijakan Kubernetes Descheduler.
Sebelum Anda mulai
Pelajari fitur, atribut API, dan konfigurasi kebijakan (system, template, policy plugin, dan evictor plugin) Kubernetes Descheduler sebelum membandingkannya dengan Koordinator Descheduler.
Hubungan antara Koordinator Descheduler dan Kubernetes Descheduler
Sebelum versi 0.25.0, komunitas Kubernetes Descheduler mengusulkan Descheduling Framework, yaitu pendekatan berbasis plug-in untuk mengelola siklus hidup descheduling, dengan dua tujuan:
-
Mengubah kebijakan descheduling dan logika eviction Pod menjadi plug-in agar lebih fleksibel.
-
Mengimplementasikan runtime yang mendukung pemuatan plug-in, eksekusi, dan manajemen siklus hidup descheduling.
Mulai Kubernetes Descheduler 0.26.0, Koordinator Descheduler v1.2.0 mengintegrasikan semua kebijakan dan plug-in DefaultEvictor, serta menambahkan evictor MigrationController.
Perbedaan fitur
Koordinator Descheduler kompatibel dengan sebagian besar kasus penggunaan Kubernetes Descheduler, tetapi berbeda dalam metode konfigurasi, kebijakan descheduling, evictor, dan kontrol eviction.
-
Koordinator Descheduler mulai mengembangkan Descheduling Framework-nya sebelum Kubernetes Descheduler dan menggunakan API konfigurasi yang berbeda:
v1alpha2/DeschedulerConfiguration. -
Koordinator Descheduler menambahkan plug-in kebijakan LowNodeLoad untuk descheduling yang peka terhadap hotspot berdasarkan pemanfaatan node aktual, memberikan hasil yang lebih akurat dibandingkan plug-in LowNodeUtilization bawaan yang menggunakan laju alokasi resource. Lihat Gunakan descheduling yang peka terhadap hotspot.
-
Koordinator Descheduler menambahkan evictor
MigrationController.MigrationControllermenawarkan kontrol eviction yang lebih aman dan luas. Lihat Konfigurasi plug-in evictor.
Contoh konfigurasi
Contoh berikut menggunakan kebijakan RemovePodsViolatingNodeTaints (RemovePodsViolatingNodeTaints) untuk membandingkan format konfigurasi Kubernetes Descheduler dan Koordinator Descheduler. Versi konfigurasi ditentukan oleh bidang apiVersion dan kind.
|
Versi konfigurasi |
Kubernetes Descheduler |
Kubernetes Descheduler |
Koordinator Descheduler |
|
Versi komponen |
Semua versi |
v0.27.0 dan seterusnya |
Semua versi |
|
|
|
|
|
|
|
|
|
|
-
Contoh konfigurasi Kubernetes Descheduler
-
Untuk versi sebelum v0.27.0, versi konfigurasinya adalah
descheduler/v1alpha1/DeschedulerPolicy.# Atribut API. apiVersion: "descheduler/v1alpha1" kind: "DeschedulerPolicy" # Konfigurasi sistem. nodeSelector: "node=node1" maxNoOfPodsToEvictPerNode: 10 maxNoOfPodsToEvictPerNamespace: 10 # Konfigurasi eviction. Pada dua API konfigurasi lainnya, parameter ini merupakan bagian dari konfigurasi plug-in evictor. evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false # Konfigurasi kebijakan. Pada dua API lainnya, ini disediakan sebagai templat descheduling dan dipisah menjadi aktivasi plug-in dan pengaturan parameter. strategies: "RemovePodsViolatingNodeTaints": enabled: true params: nodeFit: true # Parameter nodeFit harus diaktifkan pada setiap kebijakan. Pada dua API lainnya, nodeFit merupakan bagian dari konfigurasi plug-in evictor. excludedTaints: - deschedule=not-allow # Abaikan node dengan taint key="deschedule" dan value="not-allow". -
Untuk v0.27.0 dan seterusnya, versi konfigurasinya adalah
descheduler/v1alpha2/DeschedulerPolicy.# Atribut API. apiVersion: "descheduler/v1alpha2" kind: "DeschedulerPolicy" # Konfigurasi sistem. nodeSelector: "node=node1" maxNoOfPodsToEvictPerNode: 10 maxNoOfPodsToEvictPerNamespace: 10 # Akhir konfigurasi sistem. # Daftar templat descheduling. profiles: - name: kubernetes-descheduler # Tentukan nama templat descheduling. # Konfigurasi templat. plugins: deschedule: enabled: - "RemovePodsViolatingNodeTaints" # Tipe data bidang `enabled` adalah daftar string. balance: disabled: - "*" # Akhir konfigurasi templat. # Daftar konfigurasi plug-in. pluginConfig: # Konfigurasi untuk plug-in kebijakan RemovePodsViolatingNodeTaints. - name: RemovePodsViolatingNodeTaints # Konfigurasi plug-in validasi taint node. args: excludedTaints: - deschedule=not-allow # Abaikan node dengan taint key="deschedule" dan value="not-allow". # Konfigurasi untuk plug-in evictor DefaultEvictor. - name: "DefaultEvictor" args: evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false nodeFit: true # Parameter nodeFit merupakan bagian dari konfigurasi plug-in evictor.
-
-
Contoh konfigurasi Koordinator Descheduler
Versi konfigurasinya adalah
descheduler/v1alpha2/DeschedulerConfiguration.# Atribut API. apiVersion: descheduler/v1alpha2 kind: DeschedulerConfiguration # Konfigurasi sistem. dryRun: false deschedulingInterval: 120s nodeSelector: node: node1 # Tipe data nodeSelector berbeda dari dua API konfigurasi lainnya. maxNoOfPodsToEvictPerNode: 10 maxNoOfPodsToEvictPerNamespace: 10 # Akhir konfigurasi sistem. # Daftar templat descheduling. profiles: - name: koord-descheduler # Konfigurasi templat. plugins: deschedule: enabled: - name: RemovePodsViolatingNodeTaints # Tipe data bidang `enabled` adalah daftar struct. balance: disabled: - name: "*" evict: # Gunakan bidang `evict` untuk menentukan evictor yang digunakan. enabled: - name: MigrationController # MigrationController diaktifkan secara default. # - name: DefaultEvictor # Opsional: DefaultEvictor. filter: # Gunakan bidang `filter` untuk menentukan filter eviction yang digunakan. enabled: - name: MigrationController # MigrationController diaktifkan secara default. # - name: DefaultEvictor # Opsional: DefaultEvictor. # Akhir konfigurasi templat. # Daftar konfigurasi plug-in. pluginConfig: # Konfigurasi untuk plug-in kebijakan RemovePodsViolatingNodeTaints. - name: RemovePodsViolatingNodeTaints # Konfigurasi plug-in validasi taint node. args: excludedTaints: - deschedule=not-allow # Abaikan node dengan taint key="deschedule" dan value="not-allow". # Konfigurasi untuk plug-in evictor DefaultEvictor. - name: "DefaultEvictor" args: evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false nodeFit: true # Parameter nodeFit merupakan bagian dari konfigurasi plug-in evictor.
Contoh-contoh ini hanya mencakup perbedaan versi konfigurasi. Lihat Konfigurasi sistem, Konfigurasi templat, Konfigurasi plug-in kebijakan, dan Konfigurasi plug-in evictor untuk detail parameter.
Perbedaan konfigurasi sistem
-
Konfigurasi sistem Kubernetes Descheduler (Top Level configuration) hanya mendukung
nodeSelector,maxNoOfPodsToEvictPerNode, danmaxNoOfPodsToEvictPerNamespace. Koordinator Descheduler menambahkandryRundandeschedulingInterval. -
Pada API
v1alpha1/DeschedulerPolicyKubernetes Descheduler, parameter evictor Pod merupakan bagian dari konfigurasi sistem. Pada dua API lainnya, parameter tersebut berada dalam bidangargsplug-in evictor. -
Pada API
v1alpha2/DeschedulerConfigurationKoordinator Descheduler, tipe datanodeSelectorsedikit berbeda dari dua API lainnya. Lihat Konfigurasi sistem.
Perbedaan konfigurasi templat
-
v1alpha1/DeschedulerPolicyKubernetes Descheduler tidak mendukung templat descheduling, sehingga format konfigurasinya sangat berbeda dari Koordinator Descheduler. -
v1alpha2/DeschedulerPolicyKubernetes Descheduler danv1alpha2/DeschedulerConfigurationKoordinator Descheduler serupa karena keduanya menggunakan templat descheduling. Keduanya berbeda dalam tipe data dan cara mengaktifkan plug-in evictor.-
v1alpha2/DeschedulerPolicymenggunakan daftar string untuk mengaktifkan atau menonaktifkan plug-in, sedangkanv1alpha2/DeschedulerConfigurationmenggunakan daftar struct di bawahplugins. -
v1alpha2/DeschedulerPolicyhanya mendukung DefaultEvictor (diaktifkan otomatis).v1alpha2/DeschedulerConfigurationmendukung MigrationController dan DefaultEvictor, dengan perilaku DefaultEvictor yang sesuai dengan versi komunitas. Tentukan evictor dalam bidang templatevictdanfilter.
-
Perbedaan konfigurasi plug-in kebijakan
Koordinator Descheduler mendukung semua kebijakan dari Kubernetes Descheduler 0.26.0, tetapi Koordinator Descheduler tidak mendukung parameter yang ditambahkan pada versi-versi berikutnya. Tabel berikut mencantumkan perbedaan parameter untuk Koordinator Descheduler.
|
Perubahan parameter kebijakan |
Kode contoh |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Perbedaan konfigurasi plug-in evictor
Koordinator Descheduler mendukung DefaultEvictor dari Kubernetes Descheduler 0.26.0. Parameter yang ditambahkan ke DefaultEvictor pada versi Kubernetes Descheduler berikutnya tidak didukung di Koordinator Descheduler.
DefaultEvictor
|
Perubahan parameter evictor |
Contoh |
|
|
|
MigrationController
Koordinator Descheduler juga mendukung plug-in evictor MigrationController, yang mengaktifkan beberapa metode eviction.
Migrasi ke Koordinator Descheduler
Untuk bermigrasi dari Kubernetes Descheduler ke Koordinator Descheduler, ikuti langkah-langkah berikut sesuai versi:
-
Uninstal Kubernetes Descheduler yang saat ini Anda gunakan. Menjalankan beberapa descheduler dalam satu kluster menyebabkan kondisi race yang tidak dapat diprediksi.
-
Instal dan konfigurasikan Koordinator Descheduler seperti yang dijelaskan dalam Aktifkan fitur descheduling.
-
Konfigurasikan pengaturan tingkat sistem di Koordinator Descheduler berdasarkan Perbedaan konfigurasi sistem.
-
Buat templat descheduling yang kompatibel dengan Koordinator Descheduler.
-
Jika Anda menggunakan Kubernetes Descheduler 0.26.0 atau lebih awal, hanya API
v1alpha1/DeschedulerPolicyyang didukung. Lengkapi konfigurasi berdasarkan Perbedaan konfigurasi templat. -
Jika Anda menggunakan Kubernetes Descheduler setelah 0.26.0, pastikan API konfigurasi yang Anda gunakan.
-
Jika API-nya adalah
v1alpha1/DeschedulerPolicy, buat templat descheduling yang kompatibel dengan Koordinator Descheduler berdasarkan Perbedaan konfigurasi templat. -
Jika API-nya adalah
v1alpha2/DeschedulerPolicy, modifikasi bidang konfigurasi di Koordinator Descheduler berdasarkan Perbedaan konfigurasi templat.
-
-
-
Konfigurasikan plug-in di Koordinator Descheduler berdasarkan Perbedaan konfigurasi plug-in kebijakan dan Perbedaan konfigurasi plug-in evictor.
-
Referensi
-
Instal komponen ack-koordinator dan aktifkan descheduling: Aktifkan fitur descheduling.
Anda juga dapat mengonfigurasi parameter lanjutan untuk Koordinator Descheduler, templat descheduling, plug-in kebijakan descheduling, dan plug-in evictor dalam ConfigMap. Untuk informasi selengkapnya, lihat Konfigurasi parameter lanjutan.
-
Ikhtisar komponen ack-koordinator dan catatan perubahan: ack-koordinator (sebelumnya ack-slo-manager).