All Products
Search
Document Center

Container Service for Kubernetes:Koordinator Descheduler and Kubernetes Descheduler

Last Updated:Apr 01, 2026

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.

  1. Karena Koordinator Descheduler mulai mengembangkan Descheduling Framework lebih awal daripada Kubernetes Descheduler, modul ini menggunakan API konfigurasi yang berbeda: v1alpha2/DeschedulerConfiguration.

  2. 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.

  3. Koordinator Descheduler menambahkan evictor MigrationController. MigrationController menawarkan 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

apiVersion

descheduler/v1alpha1

descheduler/v1alpha2

descheduler/v1alpha2

kind

DeschedulerPolicy

DeschedulerPolicy

DeschedulerConfiguration

  • 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.

Catatan

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, dan maxNoOfPodsToEvictPerNamespace. Selain itu, Koordinator Descheduler menambahkan parameter dryRun dan deschedulingInterval ke dalam konfigurasi sistemnya.

  • Pada API v1alpha1/DeschedulerPolicy Kubernetes Descheduler, parameter evictor Pod dikonfigurasi dalam konfigurasi sistem. Pada dua API lainnya, parameter ini dikonfigurasi untuk plug-in evictor dalam bidang args.

  • Pada API v1alpha2/DeschedulerConfiguration Koordinator Descheduler, tipe data nodeSelector sedikit berbeda dari dua API lainnya. Untuk informasi lebih lanjut, lihat Konfigurasi sistem.

Perbedaan konfigurasi templat

  • Versi konfigurasi v1alpha1/DeschedulerPolicy Kubernetes Descheduler tidak mendukung templat descheduling, sehingga format konfigurasinya sangat berbeda dari format Koordinator Descheduler.

  • Versi konfigurasi v1alpha2/DeschedulerPolicy Kubernetes Descheduler dan v1alpha2/DeschedulerConfiguration Koordinator Descheduler mirip karena keduanya menggunakan format templat descheduling. Perbedaannya terletak pada tipe data dalam konfigurasi templat dan cara mengaktifkan plug-in evictor.

    • v1alpha2/DeschedulerPolicy menggunakan daftar string untuk mengaktifkan atau menonaktifkan beberapa plug-in, sedangkan v1alpha2/DeschedulerConfiguration menggunakan daftar struct di bawah kunci plugins.

    • v1alpha2/DeschedulerPolicy hanya mendukung plug-in evictor DefaultEvictor, yang tidak perlu diaktifkan secara manual. v1alpha2/DeschedulerConfiguration mendukung 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 bidang evict dan filter pada 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

RemovePodsViolatingNodeAffinity: Mendukung preferredDuringSchedulingIgnoredDuringExecution dalam bidang nodeAffinityType.

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemovePodsViolatingNodeAffinity"
      args:
        nodeAffinityType:
        - "preferredDuringSchedulingIgnoredDuringExecution"
    plugins:
      deschedule:
        enabled:
          - "RemovePodsViolatingNodeAffinity"

RemovepodsViolatingTopologySpreadConstraint:

  • Menambahkan bidang constraints.

  • Menambahkan bidang topologyBalanceNodeFit.

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemovePodsViolatingTopologySpreadConstraint"
      args:
        constraints:
          - DoNotSchedule
        topologyBalanceNodeFit: false  
    plugins:
      balance:
        enabled:
          - "RemovePodsViolatingTopologySpreadConstraint"

RemovePodsHavingTooManyRestarts: Menambahkan bidang states.

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemovePodsHavingTooManyRestarts"
      args:
        states:
        - "CrashLoopBackOff"
    plugins:
      deschedule:
        enabled:
          - "RemovePodsHavingTooManyRestarts"

PodLifeTime:

  • Bidang state mengizinkan nilai CrashLoopBackOff.

  • Bidang state mengizinkan nilai ImagePullBackOff.

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "PodLifeTime"
      args:
        states:
        - "CrashLoopBackOff"
        - "ImagePullBackOff"
    plugins:
      deschedule:
        enabled:
          - "PodLifeTime"

RemoveFailedPods: Menambahkan bidang exitCodes.

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemoveFailedPods"
      args:
        exitCodes:
        - 1
    plugins:
      deschedule:
        enabled:
          - "RemoveFailedPods"

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

DefaultEvictor:

  • Menambahkan bidang evictDaemonSetPods.

  • Menambahkan bidang minReplicas.

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "DefaultEvictor"
      args:
        evictDaemonSetPods: false
        minReplicas: 2
    - name: "PodLifeTime"
      args:
        maxPodLifeTimeSeconds: 86400
    plugins:
      deschedule:
        enabled:
          - "PodLifeTime"

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:

  1. Pertama, uninstal instalasi Kubernetes Descheduler Anda saat ini. Menjalankan beberapa descheduler dalam satu kluster dapat menyebabkan kondisi race yang tidak terduga.

  2. Instal dan konfigurasikan Koordinator Descheduler dengan mengikuti petunjuk di Aktifkan fitur descheduling.

    1. Lihat Perbedaan konfigurasi sistem untuk menyiapkan konfigurasi tingkat sistem yang diperlukan di Koordinator Descheduler.

    2. Buat templat descheduling yang kompatibel dengan Koordinator Descheduler.

      • Jika Anda menggunakan Kubernetes Descheduler 0.26.0 atau lebih lama, hanya API konfigurasi v1alpha1/DeschedulerPolicy yang 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.

    3. 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).