Komponen ack-koordinator mencakup modul Koordinator Descheduler yang menyediakan kemampuan descheduling untuk memindahkan Pod yang salah tempat ke node lain. Koordinator Descheduler dibangun di atas Descheduling Framework yang diusulkan oleh komunitas Kubernetes Descheduler. Modul ini kompatibel dengan kebijakan Kubernetes Descheduler dan menawarkan fitur tambahan.
Sebelum memulai
Topik ini ditujukan bagi pengguna Kubernetes Descheduler. Dokumen ini menjelaskan hubungan antara Koordinator Descheduler dan Kubernetes Descheduler serta memberikan panduan migrasi komponen. Sebelum melanjutkan, Anda harus memahami fitur, atribut API, dan konfigurasi kebijakan (termasuk konfigurasi sistem, konfigurasi templat, konfigurasi plug-in kebijakan, dan konfigurasi plug-in evictor) dari Kubernetes Descheduler.
Hubungan antara Koordinator Descheduler dan Kubernetes Descheduler
Sebelum rilis versi 0.25.0, komunitas Kubernetes Descheduler mengusulkan Descheduling Framework, yang menggunakan pendekatan berbasis plug-in untuk mengelola siklus hidup descheduling. Descheduling Framework memiliki dua tujuan utama:
Mengubah kebijakan descheduling dan logika eviction Pod yang ada menjadi plug-in untuk meningkatkan fleksibilitas kebijakan.
Mengimplementasikan lingkungan runtime yang mendukung pemuatan dan eksekusi plug-in serta mengelola seluruh siklus hidup descheduling.
Setelah Kubernetes Descheduler merilis versi 0.26.0, Koordinator Descheduler v1.2.0 mengintegrasikan semua kebijakan dan plug-in DefaultEvictor dari Kubernetes Descheduler v0.26.0, serta memperkenalkan plug-in evictor tambahan, yaitu MigrationController.
Perbedaan fitur
Koordinator Descheduler kompatibel dengan sebagian besar kasus penggunaan Kubernetes Descheduler, tetapi terdapat beberapa perbedaan dalam metode konfigurasi, kebijakan descheduling, evictor, dan kemampuan kontrol eviction. Perbedaan utamanya adalah sebagai berikut.
Karena Koordinator Descheduler mulai mengembangkan Descheduling Framework lebih awal daripada Kubernetes Descheduler, modul ini menggunakan API konfigurasi yang berbeda:
v1alpha2/DeschedulerConfiguration.Koordinator Descheduler memperkenalkan plug-in kebijakan LowNodeLoad, yang memungkinkan descheduling berbasis hotspot berdasarkan pemanfaatan node aktual. Plug-in Kubernetes Descheduler asli, LowNodeUtilization, membuat keputusan descheduling berdasarkan tingkat alokasi resource. Sebaliknya, LowNodeLoad menggunakan pemanfaatan node aktual, sehingga memberikan hasil yang lebih akurat. Untuk informasi lebih lanjut tentang plug-in LowNodeLoad, lihat Gunakan descheduling berbasis hotspot.
Koordinator Descheduler menambahkan evictor
MigrationController.MigrationControllermenawarkan kemampuan kontrol eviction yang lebih aman dan luas. Untuk informasi lebih lanjut, lihat Konfigurasi plug-in evictor.
Contoh konfigurasi
Contoh berikut mengaktifkan kebijakan RemovePodsViolatingNodeTaints (RemovePodsViolatingNodeTaints) untuk membandingkan format konfigurasi Kubernetes Descheduler dan Koordinator Descheduler. Versi konfigurasi ditentukan oleh bidang apiVersion dan kind. Tabel berikut menunjukkan komponen mana yang mendukung tiap versi.
Versi konfigurasi | Kubernetes Descheduler | Kubernetes Descheduler | Koordinator Descheduler |
Versi komponen | Semua versi | v0.27.0 dan yang lebih baru | 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, konfigurasi ini disediakan sebagai templat descheduling dan dibagi 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 yang lebih baru, 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 di atas hanya menyoroti perbedaan antara versi konfigurasi dan tidak menjelaskan setiap parameter secara detail. Untuk informasi lebih lanjut, lihat Konfigurasi sistem, Konfigurasi templat, Konfigurasi plug-in kebijakan, dan Konfigurasi plug-in evictor.
Perbedaan konfigurasi sistem
Konfigurasi sistem Kubernetes Descheduler (Top Level configuration) hanya mendukung parameter
nodeSelector,maxNoOfPodsToEvictPerNode, danmaxNoOfPodsToEvictPerNamespace. Selain itu, Koordinator Descheduler menambahkan parameterdryRundandeschedulingIntervalke dalam konfigurasi sistemnya.Pada API
v1alpha1/DeschedulerPolicyKubernetes Descheduler, parameter evictor Pod dikonfigurasi dalam konfigurasi sistem. Pada dua API lainnya, parameter ini dikonfigurasi untuk plug-in evictor dalam bidangargs.Pada API
v1alpha2/DeschedulerConfigurationKoordinator Descheduler, tipe datanodeSelectorsedikit berbeda dari dua API lainnya. Untuk informasi lebih lanjut, lihat Konfigurasi sistem.
Perbedaan konfigurasi templat
Versi konfigurasi
v1alpha1/DeschedulerPolicyKubernetes Descheduler tidak mendukung templat descheduling, sehingga format konfigurasinya sangat berbeda dari format Koordinator Descheduler.Versi konfigurasi
v1alpha2/DeschedulerPolicyKubernetes Descheduler danv1alpha2/DeschedulerConfigurationKoordinator Descheduler mirip karena keduanya menggunakan format templat descheduling. Perbedaannya terletak pada tipe data dalam konfigurasi templat dan cara mengaktifkan plug-in evictor.v1alpha2/DeschedulerPolicymenggunakan daftar string untuk mengaktifkan atau menonaktifkan beberapa plug-in, sedangkanv1alpha2/DeschedulerConfigurationmenggunakan daftar struct di bawah kunciplugins.v1alpha2/DeschedulerPolicyhanya mendukung plug-in evictor DefaultEvictor, yang tidak perlu diaktifkan secara manual.v1alpha2/DeschedulerConfigurationmendukung kedua plug-in evictor MigrationController dan DefaultEvictor, di mana perilaku DefaultEvictor konsisten dengan versi komunitas. Anda dapat menentukan plug-in evictor mana yang akan diaktifkan dalam bidangevictdanfilterpada konfigurasi templat.
Perbedaan konfigurasi plug-in kebijakan
Koordinator Descheduler kompatibel dengan semua kebijakan descheduling dari Kubernetes Descheduler 0.26.0. Namun, Koordinator Descheduler tidak mendukung parameter konfigurasi baru yang diperkenalkan untuk plug-in kebijakan di versi Kubernetes Descheduler setelah 0.26.0. Tabel berikut menjelaskan perbedaan parameter konfigurasi untuk kebijakan descheduling Koordinator Descheduler dibandingkan dengan versi Kubernetes Descheduler setelah 0.26.0.
Perubahan parameter kebijakan | Kode contoh |
| |
| |
| |
| |
| |
Perbedaan konfigurasi plug-in evictor
Koordinator Descheduler kompatibel dengan evictor Pod DefaultEvictor dari Kubernetes Descheduler versi 0.26.0. Namun, parameter baru yang ditambahkan ke DefaultEvictor di versi Kubernetes Descheduler setelah 0.26.0 tidak didukung di Koordinator Descheduler.
DefaultEvictor
Perubahan parameter evictor | Contoh |
| |
MigrationController
Koordinator Descheduler juga mendukung plug-in evictor MigrationController, yang memungkinkan berbagai metode eviction. Untuk informasi lebih lanjut, lihat MigrationController.
Migrasi ke Koordinator Descheduler
Untuk melakukan migrasi dari Kubernetes Descheduler ke Koordinator Descheduler, ikuti langkah-langkah berikut sesuai versi:
Pertama, uninstal instalasi Kubernetes Descheduler Anda saat ini. Menjalankan beberapa descheduler dalam satu kluster dapat menyebabkan kondisi race yang tidak terduga.
Instal dan konfigurasikan Koordinator Descheduler dengan mengikuti petunjuk di Aktifkan fitur descheduling.
Lihat Perbedaan konfigurasi sistem untuk menyiapkan konfigurasi tingkat sistem yang diperlukan di Koordinator Descheduler.
Buat templat descheduling yang kompatibel dengan Koordinator Descheduler.
Jika Anda menggunakan Kubernetes Descheduler 0.26.0 atau lebih lama, hanya API konfigurasi
v1alpha1/DeschedulerPolicyyang didukung. Lihat Perbedaan konfigurasi templat untuk menyelesaikan konfigurasi.Jika Anda menggunakan versi Kubernetes Descheduler setelah 0.26.0, pastikan API konfigurasi yang Anda gunakan.
Jika API-nya adalah
v1alpha1/DeschedulerPolicy, lihat Perbedaan konfigurasi templat untuk membuat templat descheduling yang kompatibel dengan Koordinator Descheduler.Jika API-nya adalah
v1alpha2/DeschedulerPolicy, lihat Perbedaan konfigurasi templat untuk memodifikasi bidang konfigurasi terkait di Koordinator Descheduler.
Lihat Perbedaan konfigurasi plug-in kebijakan dan Perbedaan konfigurasi plug-in evictor untuk mengatur konfigurasi plug-in spesifik di Koordinator Descheduler.
Dokumen terkait
Anda juga dapat mengonfigurasi parameter advanced untuk Koordinator Descheduler, templat descheduling, plug-in kebijakan descheduling, dan plug-in evictor dalam ConfigMap. Untuk informasi lebih lanjut, lihat Konfigurasi parameter advanced.
Untuk informasi lebih lanjut tentang komponen ack-koordinator dan changelog-nya, lihat ack-koordinator (ack-slo-manager).