全部产品
Search
文档中心

Container Service for Kubernetes:Perbandingan antara Koordinator Descheduler dan Kubernetes Descheduler

更新时间:Jul 02, 2025

Komponen ack-koordinator menyediakan modul descheduler bernama Koordinator Descheduler, yang dapat menjadwalkan ulang pod sesuai dengan aturan eviksi dari satu node ke node lain. Koordinator Descheduler dikembangkan berdasarkan Kerangka Penjadwalan Ulang (Descheduling Framework) dari Kubernetes Descheduler. Komponen ini kompatibel dengan semua kebijakan penjadwalan ulang dari Kubernetes Descheduler dan mengoptimalkan proses penjadwalan ulang pod.

Sebelum Anda memulai

Topik ini ditujukan untuk pengguna Kubernetes Descheduler dan menjelaskan korelasi antara Koordinator Descheduler dan Kubernetes Descheduler untuk membantu Anda bermigrasi ke Koordinator Descheduler. Sebelum membaca topik ini, disarankan untuk mempelajari fitur, atribut antarmuka, dan kebijakan Kubernetes Descheduler, seperti konfigurasi sistem, konfigurasi template, konfigurasi plugin kebijakan, dan konfigurasi plugin eviktor.

Korelasi antara Koordinator Descheduler dan Kubernetes Descheduler

Descheduling Framework dirancang sebelum rilis Kubernetes Descheduler versi 0.25.0. Framework ini memungkinkan Anda mengelola siklus hidup penjadwalan ulang menggunakan plugin. Descheduling Framework dikembangkan untuk memenuhi tujuan-tujuan berikut:

  • Menyediakan plugin berdasarkan kebijakan penjadwalan ulang yang ada dan logika eviksi pod untuk meningkatkan fleksibilitas penjadwalan ulang.

  • Membangun lingkungan runtime di mana plugin dapat dimuat dan dijalankan untuk mengelola siklus hidup penjadwalan ulang.

Setelah rilis Kubernetes Descheduler versi 0.26.0, kebijakan penjadwalan ulang yang disediakan oleh Kubernetes Descheduler dan DefaultEvictor diperkenalkan dalam Koordinator Descheduler versi 1.2.0.

Selain itu, Koordinator Descheduler menyediakan plugin eviktor bernama MigrationController.

Perbedaan Fitur

Koordinator Descheduler berlaku untuk sebagian besar skenario penggunaan Kubernetes Descheduler. Namun, kedua descheduler memiliki perbedaan dalam metode konfigurasi, kebijakan penjadwalan ulang, eviktor, dan kemampuan kontrol eviksi.

  1. Pengembangan Descheduling Framework oleh Koordinator Descheduler dilakukan sebelum Kubernetes Descheduler. Oleh karena itu, Koordinator Descheduler menggunakan antarmuka konfigurasi yang berbeda, yaitu v1alpha2/DeschedulerConfiguration.

  2. Plugin lowNodeLoad diperkenalkan dalam Koordinator Descheduler. Plugin ini bertanggung jawab untuk merasakan beban setiap node. Plugin descheduler asli Kubernetes LowNodeUtilization menjadwalkan ulang pod dari node yang terlalu dimanfaatkan ke node yang kurang dimanfaatkan. Plugin LowNodeLoad menjadwalkan ulang pod berdasarkan pemanfaatan sumber daya aktual dari node, yang lebih akurat. Untuk informasi lebih lanjut tentang plugin LowNodeLoad, lihat Bekerja dengan penjadwalan ulang hotspot sadar-beban.

  3. Koordinator Descheduler memperkenalkan pod eviktor MigrationController. MigrationController menyediakan lebih banyak kemampuan kontrol eviksi dengan keamanan yang ditingkatkan. Untuk informasi lebih lanjut, lihat Konfigurasi plugin eviktor.

Perbandingan Konfigurasi

Dalam contoh berikut, kebijakan RemovePodsViolatingNodeTaints diaktifkan untuk membandingkan konfigurasi Kubernetes Descheduler dan Koordinator Descheduler. Parameter apiVersion dan kind mendefinisikan versi. Tabel berikut menjelaskan komponen yang didukung oleh versi berbeda.

Pengaturan Versi

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

  • Konfigurasi sampel Kubernetes Descheduler

    • Pada versi sebelum v0.27.0, versi descheduler/v1alpha1/DeschedulerPolicy digunakan.

      # Atribut antarmuka.
      apiVersion: "descheduler/v1alpha1"
      kind: "DeschedulerPolicy"
      
      # Konfigurasi sistem.
      nodeSelector: "node=node1"
      maxNoOfPodsToEvictPerNode: 10
      maxNoOfPodsToEvictPerNamespace: 10
      
      # Konfigurasi eviksi. Pada antarmuka lainnya, parameter berikut adalah konfigurasi plugin eviktor.
      evictFailedBarePods: false
      evictLocalStoragePods: true
      evictSystemCriticalPods: true
      evictDaemonSetPods: false
      ignorePvcPods: false
      
      # Konfigurasi kebijakan penjadwalan ulang. Pada dua antarmuka lainnya, konfigurasi kebijakan penjadwalan ulang digantikan oleh konfigurasi template penjadwalan ulang, yang terdiri dari parameter untuk mengaktifkan/menonaktifkan dan mengonfigurasi plugin.
      strategies:
        "RemovePodsViolatingNodeTaints":
          enabled: true
          params:
            nodeFit: true # nodeFit harus diaktifkan pada setiap kebijakan. Pada dua antarmuka lainnya, nodeFit adalah parameter plugin eviktor.
            excludedTaints:
              - deschedule=not-allow # Abaikan node yang memiliki taint key "deschedule" dan taint value "not-allow".

    • Pada v0.27.0 dan versi yang lebih baru, versi descheduler/v1alpha2/DeschedulerPolicy digunakan.

      # Atribut antarmuka.
      apiVersion: "descheduler/v1alpha2"
      kind: "DeschedulerPolicy"
      
      # Konfigurasi sistem.
      nodeSelector: "node=node1"
      maxNoOfPodsToEvictPerNode: 10
      maxNoOfPodsToEvictPerNamespace: 10
      # Konfigurasi sebelumnya adalah konfigurasi sistem.
      
      # Daftar template.
      profiles:
      - name: kubernetes-descheduler  # Nama template penjadwalan ulang.
      
        # Konfigurasi template.
        plugins:
          deschedule:
            enabled:
              - "RemovePodsViolatingNodeTaints" # Parameter enabled adalah array.
          balance:
            disabled:
              - "*"
        # Konfigurasi sebelumnya adalah konfigurasi template.
      
        # Daftar plugin.
        pluginConfig:
      
        # Konfigurasi plugin kebijakan RemovePodsViolatingNodeTaints.
        - name: RemovePodsViolatingNodeTaints # Konfigurasi plugin verifikasi taint node.
            args:
              excludedTaints:
              - deschedule=not-allow # Abaikan node yang memiliki taint key "deschedule" dan taint value "not-allow".
      
        # Konfigurasi plugin eviktor DefaultEvictor.
        - name: "DefaultEvictor"
          args:
            evictFailedBarePods: false
            evictLocalStoragePods: true
            evictSystemCriticalPods: true
            evictDaemonSetPods: false
            ignorePvcPods: false
            nodeFit: true # nodeFit adalah parameter plugin eviktor.
  • Konfigurasi sampel Koordinator Descheduler

    Versi descheduler/v1alpha2/DeschedulerConfiguration digunakan.

    # Atribut antarmuka.
    apiVersion: descheduler/v1alpha2
    kind: DeschedulerConfiguration
    
    # Konfigurasi sistem.
    dryRun: false
    deschedulingInterval: 120s
    nodeSelector:
      node: node1 # Tipe data parameter nodeSelector berbeda dari antarmuka lainnya.
    maxNoOfPodsToEvictPerNode: 10
    maxNoOfPodsToEvictPerNamespace: 10
    # Konfigurasi sebelumnya adalah konfigurasi sistem.
    
    # Daftar template.
    profiles:
    - name: koord-descheduler
    
      # Konfigurasi template.
      plugins:
        deschedule:
          enabled:
            - name: RemovePodsViolatingNodeTaints # Parameter enabled adalah daftar terstruktur.
        balance:
          disabled:
            - name: "*"
        evict: # Anda dapat menentukan parameter evict untuk menggunakan eviktor.
          enabled:
            - name: MigrationController # Aktifkan MigrationController secara default.
            # - name: DefaultEvictor # Tentukan DefaultEvictor.
        filter: # Anda dapat menentukan parameter filter untuk menggunakan kebijakan penyaringan eviksi.
          enabled:
            - name: MigrationController # Aktifkan MigrationController secara default.
            # - name: DefaultEvictor # Tentukan DefaultEvictor.
      # Konfigurasi sebelumnya adalah konfigurasi template.
    
      # Daftar plugin.
      pluginConfig:
    
      # Konfigurasi plugin kebijakan RemovePodsViolatingNodeTaints.
      - name: RemovePodsViolatingNodeTaints # Konfigurasi plugin verifikasi taint node.
          args:
            excludedTaints:
            - deschedule=not-allow # Abaikan node yang memiliki taint key "deschedule" dan taint value "not-allow".
    
      # Konfigurasi plugin eviktor DefaultEvictor.
      - name: "DefaultEvictor"
        args:
          evictFailedBarePods: false
          evictLocalStoragePods: true
          evictSystemCriticalPods: true
          evictDaemonSetPods: false
          ignorePvcPods: false
          nodeFit: true # nodeFit adalah parameter plugin eviktor.

Catatan

Konfigurasi sampel berikut hanya menunjukkan perbedaan antara versi berbeda. Untuk informasi lebih lanjut tentang parameter, lihat Konfigurasi sistem, Konfigurasi template, Konfigurasikan plugin kebijakan, dan Konfigurasikan plugin eviktor.

Perbedaan Konfigurasi Sistem

  • Konfigurasi sistem Kubernetes Descheduler (Konfigurasi Tingkat Atas) hanya berisi parameter nodeSelector, maxNoOfPodsToEvictPerNode, dan maxNoOfPodsToEvictPerNamespace. Konfigurasi sistem Koordinator Descheduler juga mencakup parameter dryRun dan deschedulingInterval.

  • Parameter pod eviktor dalam konfigurasi sistem pada antarmuka v1alpha1/DeschedulerPolicy Kubernetes Descheduler digantikan oleh parameter plugin eviktor dalam konfigurasi args dari antarmuka lainnya.

  • Tipe data parameter nodeSelector dalam antarmuka v1alpha2/DeschedulerConfiguration Koordinator Descheduler berbeda dari antarmuka lainnya. Untuk informasi lebih lanjut, lihat Konfigurasi sistem.

Perbedaan Konfigurasi Template

  • Versi v1alpha1/DeschedulerPolicy Kubernetes Descheduler tidak mendukung template penjadwalan ulang. Oleh karena itu, konfigurasinya berbeda dari Koordinator Descheduler.

  • Versi v1alpha2/DeschedulerPolicy Kubernetes Descheduler mirip dengan versi v1alpha2/DeschedulerConfiguration Koordinator Descheduler. Keduanya mendukung template penjadwalan ulang. Namun, konfigurasi template dari kedua versi tersebut menggunakan tipe data dan metode yang berbeda untuk mengaktifkan plugin eviktor.

    • v1alpha2/DeschedulerPolicy mendefinisikan array untuk mengaktifkan atau menonaktifkan beberapa plugin. v1alpha2/DeschedulerConfiguration mendefinisikan daftar terstruktur plugins untuk mengonfigurasi plugin.

    • v1alpha2/DeschedulerPolicy hanya mendukung plugin eviktor DefaultEvictor, yang diaktifkan secara otomatis. v1alpha2/DeschedulerConfiguration mendukung plugin eviktor MigrationController dan DefaultEvictor. Plugin eviktor DefaultEvictor berfungsi sama seperti versi open source. Anda dapat menambahkan parameter evict dan filter ke konfigurasi template untuk menentukan plugin eviktor yang ingin Anda aktifkan.

Perbedaan Konfigurasi Plugin Kebijakan

Koordinator Descheduler menyesuaikan semua kebijakan penjadwalan ulang dalam Kubernetes Descheduler 0.26.0. Pada versi setelah Kubernetes Descheduler 0.26.0, beberapa parameter baru dalam kebijakan penjadwalan ulang tidak dapat digunakan dalam Koordinator Descheduler. Tabel berikut menjelaskan perubahan pada parameter kebijakan penjadwalan ulang Koordinator Descheduler dibandingkan dengan versi setelah Kubernetes Descheduler 0.26.0.

Perubahan parameter plugin kebijakan

Contoh

RemovePodsViolatingNodeAffinity: preferredDuringSchedulingIgnoredDuringExecution dapat digunakan dalam parameter nodeAffinityType.

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

RemovepodsViolatingTopologySpreadConstraint:

  • Parameter constraints ditambahkan.

  • Parameter topologyBalanceNodeFit ditambahkan.

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

RemovePodsHavingTooManyRestarts: Parameter states ditambahkan.

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

PodLifeTime:

  • Parameter state mendukung CrashLoopBackOff.

  • Parameter state mendukung ImagePullBackOff.

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

RemoveFailedPods: Parameter exitCodes ditambahkan.

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

Perbedaan Konfigurasi Plugin Eviktor

Koordinator Descheduler menyesuaikan dengan pod eviktor DefaultEvictor dari Kubernetes Descheduler 0.26.0. Koordinator Descheduler tidak mendukung parameter DefaultEvictor baru dalam versi setelah Kubernetes Descheduler 0.26.0.

Default Evictor

Perubahan parameter plugin eviktor

Contoh

DefaultEvictor:

  • Parameter evictDaemonSetPods ditambahkan.

  • Parameter minReplicas ditambahkan.

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 mendukung plugin eviktor MigrationController, yang memungkinkan Anda menggunakan beberapa metode eviksi. Untuk informasi lebih lanjut, lihat MigrationController.

Bermigrasi dari Kubernetes Descheduler ke Koordinator Descheduler

Metode yang digunakan untuk bermigrasi dari Kubernetes Descheduler ke Koordinator Descheduler bervariasi berdasarkan versi yang digunakan. Lakukan langkah-langkah berikut untuk menyelesaikan migrasi.

  1. Hapus instalasi Kubernetes Descheduler. Jika beberapa descheduler ada dalam kluster, kondisi balapan yang tidak terprediksi mungkin terjadi.

  2. Referensi Aktifkan fitur penjadwalan ulang dan instal serta konfigurasikan Koordinator Descheduler.

    1. Referensi Perbedaan konfigurasi sistem dan konfigurasikan konfigurasi sistem untuk Koordinator Descheduler.

    2. Buat template penjadwalan ulang yang sesuai dengan Koordinator Descheduler.

      • Jika Anda menggunakan Kubernetes Descheduler 0.26.0 atau lebih lama, hanya antarmuka v1alpha1/DeschedulerPolicy yang didukung. Referensi Perbedaan konfigurasi template dan lengkapi konfigurasinya.

      • Jika Anda menggunakan versi setelah Kubernetes Descheduler 0.26.0, Anda perlu mengonfirmasi antarmuka yang digunakan.

        • Jika antarmukanya adalah v1alpha1/DeschedulerPolicy, referensi Perbedaan konfigurasi template dan buat template penjadwalan ulang yang sesuai dengan Koordinator Descheduler.

        • Jika antarmukanya adalah v1alpha2/DeschedulerPolicy, referensi Perbedaan konfigurasi template dan modifikasi parameter dalam Koordinator Descheduler.

    3. Referensi Perbedaan konfigurasi plugin kebijakan dan Perbedaan konfigurasi plugin eviktor dan konfigurasikan parameter plugin dalam Koordinator Descheduler.

Referensi

  • Untuk informasi lebih lanjut tentang cara menginstal komponen ack-koordinator dan mengaktifkan penjadwalan ulang, lihat Aktifkan fitur penjadwalan ulang.

    Anda juga dapat mengonfigurasi parameter lanjutan untuk Koordinator Descheduler, template penjadwalan ulang, plugin kebijakan penjadwalan ulang, dan plugin eviktor dalam ConfigMap. Untuk informasi lebih lanjut, lihat Konfigurasikan parameter lanjutan.

  • Untuk informasi lebih lanjut tentang pengenalan ack-koordinator dan catatan rilis, lihat ack-koordinator (ack-slo-manager).