All Products
Search
Document Center

Container Service for Kubernetes:Koordinator Descheduler dan Kubernetes Descheduler

Last Updated:Jun 19, 2026

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.

  1. Koordinator Descheduler mulai mengembangkan Descheduling Framework-nya sebelum Kubernetes Descheduler dan menggunakan API konfigurasi yang berbeda: v1alpha2/DeschedulerConfiguration.

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

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

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

Catatan

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, dan maxNoOfPodsToEvictPerNamespace. Koordinator Descheduler menambahkan dryRun dan deschedulingInterval.

  • Pada API v1alpha1/DeschedulerPolicy Kubernetes Descheduler, parameter evictor Pod merupakan bagian dari konfigurasi sistem. Pada dua API lainnya, parameter tersebut berada dalam bidang args plug-in evictor.

  • Pada API v1alpha2/DeschedulerConfiguration Koordinator Descheduler, tipe data nodeSelector sedikit berbeda dari dua API lainnya. Lihat Konfigurasi sistem.

Perbedaan konfigurasi templat

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

  • v1alpha2/DeschedulerPolicy Kubernetes Descheduler dan v1alpha2/DeschedulerConfiguration Koordinator Descheduler serupa karena keduanya menggunakan templat descheduling. Keduanya berbeda dalam tipe data dan cara mengaktifkan plug-in evictor.

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

    • v1alpha2/DeschedulerPolicy hanya mendukung DefaultEvictor (diaktifkan otomatis). v1alpha2/DeschedulerConfiguration mendukung MigrationController dan DefaultEvictor, dengan perilaku DefaultEvictor yang sesuai dengan versi komunitas. Tentukan evictor dalam bidang templat evict dan filter.

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

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 mendukung nilai CrashLoopBackOff.

  • Bidang state mendukung 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 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

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 mengaktifkan beberapa metode eviction.

Migrasi ke Koordinator Descheduler

Untuk bermigrasi dari Kubernetes Descheduler ke Koordinator Descheduler, ikuti langkah-langkah berikut sesuai versi:

  1. Uninstal Kubernetes Descheduler yang saat ini Anda gunakan. Menjalankan beberapa descheduler dalam satu kluster menyebabkan kondisi race yang tidak dapat diprediksi.

  2. Instal dan konfigurasikan Koordinator Descheduler seperti yang dijelaskan dalam Aktifkan fitur descheduling.

    1. Konfigurasikan pengaturan tingkat sistem di Koordinator Descheduler berdasarkan Perbedaan konfigurasi sistem.

    2. Buat templat descheduling yang kompatibel dengan Koordinator Descheduler.

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

    3. Konfigurasikan plug-in di Koordinator Descheduler berdasarkan Perbedaan konfigurasi plug-in kebijakan dan Perbedaan konfigurasi plug-in evictor.

Referensi