All Products
Search
Document Center

Container Service for Kubernetes:Aktifkan fitur descheduling

Last Updated:Mar 27, 2026

Descheduling memindahkan pod yang sedang berjalan dan melanggar aturan eviction ke node lain tanpa menunggu penjadwal (scheduler) mendeteksi ketidakseimbangan. Gunakan fitur ini untuk memperbaiki penempatan pod yang salah setelah taint, aturan afinitas, atau profil beban node berubah.

Topik ini memandu Anda mengaktifkan descheduling melalui komponen ack-koordinator dengan menggunakan plug-in RemovePodsViolatingNodeTaints sebagai contoh.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Descheduling tidak didukung pada virtual node.

Catatan penggunaan

  • Koordinator Descheduler hanya meng-evict pod yang sedang berjalan. Fitur ini tidak membuat ulang atau menjadwalkan ulang pod tersebut. Setelah eviction, controller workload (seperti Deployment atau StatefulSet) akan membuat ulang pod, yang kemudian dijadwalkan oleh penjadwal standar.

  • Selama proses descheduling, pod lama dievict sebelum pod baru dibuat. Pastikan aplikasi Anda memiliki jumlah replicas yang cukup untuk menjaga ketersediaan selama eviction.

  • ack-descheduler sudah tidak digunakan lagi. Jika Anda masih menggunakannya, migrasikan ke Koordinator Descheduler. Untuk informasi selengkapnya, lihat Bagaimana cara migrasi dari ack-descheduler ke Koordinator Descheduler?.

Pilih plug-in descheduling

Pilih plug-in berdasarkan masalah yang ingin Anda selesaikan:

Skenario Plug-in Jenis kebijakan
Pod tetap berada di node yang mendapatkan taint NoSchedule setelah penjadwalan RemovePodsViolatingNodeTaints Deschedule
Pod melanggar aturan anti-afinitas antar-pod RemovePodsViolatingInterPodAntiAffinity Deschedule
Pod tidak lagi memenuhi aturan afinitas node RemovePodsViolatingNodeAffinity Deschedule
Pod sering restart RemovePodsHavingTooManyRestarts Deschedule
Pod melebihi time-to-live-nya PodLifeTime Deschedule
Pod berada dalam status Failed RemoveFailedPod Deschedule
Pod replikasi tersebar tidak merata di berbagai node RemoveDuplicates Balance
Node dimanfaatkan secara tidak merata berdasarkan alokasi sumber daya LowNodeUtilization Balance
Pod melanggar batasan penyebaran topologi (topology spread constraints) RemovePodsViolatingTopologySpreadConstraint Balance
Node kelebihan beban berdasarkan pemanfaatan sumber daya aktual LowNodeLoad Balance

Topik ini menggunakan RemovePodsViolatingNodeTaints sebagai contoh. Baca konsep descheduling dan Koordinator Descheduler vs. Kubernetes Descheduler sebelum memulai.

Cara kerja

Plug-in RemovePodsViolatingNodeTaints memeriksa setiap node terhadap taint NoSchedule pada interval yang telah dikonfigurasi. Jika pod yang sedang berjalan tidak memiliki toleransi terhadap taint NoSchedule suatu node, plug-in tersebut akan meng-evict pod tersebut. Controller workload kemudian membuat ulang pod, dan penjadwal menempatkannya pada node yang dapat ditoleransi oleh pod tersebut.

Gunakan bidang excludedTaints untuk mengecualikan taint tertentu dari pemeriksaan ini. Jika kunci taint atau pasangan key=value-nya cocok dengan entri dalam excludedTaints, plug-in akan mengabaikan taint tersebut.

Contoh skenario yang digunakan dalam topik ini:

Kluster tiga node memiliki Deployment dengan satu pod di setiap node. Administrator menambahkan taint NoSchedule ke dua node setelah pod sudah berjalan:

  • Node A mendapat taint deschedule=not-allow:NoSchedule. Karena deschedule=not-allow ada dalam excludedTaints, taint ini diabaikan — pod tetap berjalan.

  • Node B mendapat taint deschedule=allow:NoSchedule. Taint ini tidak dikecualikan — pod dievict dan dijadwalkan ulang ke Node C (yang tidak memiliki taint NoSchedule).

Langkah 1: Instal ack-koordinator dan aktifkan descheduling

Jika ack-koordinator sudah terinstal, pastikan versinya 1.2.0-ack.2 atau lebih baru sebelum melanjutkan.
  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster target dan klik namanya. Di panel navigasi kiri, klik Add-ons.

  3. Temukan ack-koordinator dan klik Install di pojok kanan bawah.

  4. Di kotak dialog Install, pilih Enable Descheduler for ACK-Koordinator, lalu konfigurasikan dan instal komponen sesuai petunjuk.

Koordinator Descheduler diterapkan sebagai Deployment pada node kluster.

Langkah 2: Aktifkan plug-in RemovePodsViolatingNodeTaints

Konfigurasi plug-in

Buat file bernama koord-descheduler-config.yaml dengan konten berikut. ConfigMap ini mengaktifkan RemovePodsViolatingNodeTaints dan mengonfigurasinya agar mengabaikan taint deschedule=not-allow.

# koord-descheduler-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: koord-descheduler-config
  namespace: kube-system
data:
  koord-descheduler-config: |
    # Jangan ubah konfigurasi sistem berikut untuk koord-desheduler.
    apiVersion: descheduler/v1alpha2
    kind: DeschedulerConfiguration
    leaderElection:
      resourceLock: leases
      resourceName: koord-descheduler
      resourceNamespace: kube-system
    deschedulingInterval: 120s # Interval eksekusi descheduler. Diatur ke 120 detik di sini.
    dryRun: false # Mode read-only global. Setelah diaktifkan, koord-descheduler tidak melakukan operasi apa pun.
    # Konfigurasi di atas adalah konfigurasi sistem.

    profiles:
    - name: koord-descheduler
      plugins:
        deschedule:
          enabled:
            - name: RemovePodsViolatingNodeTaints  # Aktifkan plug-in verifikasi taint node.

      pluginConfig:
      - name: RemovePodsViolatingNodeTaints # Konfigurasi plug-in verifikasi taint node.
        args:
          excludedTaints:
          - deschedule=not-allow # Abaikan node yang kunci taint-nya deschedule dan nilai taint-nya not-allow.

      # Diperlukan agar RemovePodsViolatingNodeTaints berfungsi. Jangan hapus.
      - name: MigrationController # Konfigurasi migration controller.
        args:
          apiVersion: descheduler/v1alpha2
          kind: MigrationControllerArgs
          defaultJobMode: EvictDirectly

Parameter RemovePodsViolatingNodeTaints:

Parameter Tipe Bawaan Deskripsi
excludedTaints list(string) Kunci taint atau pasangan key=value yang diabaikan. Pod pada node dengan taint ini tidak dievict.
includePreferNoSchedule bool false Jika true, juga memeriksa taint dengan efek PreferNoSchedule, bukan hanya NoSchedule.
namespaces.include list(string) Batasi descheduling hanya pada namespace tertentu. Saling eksklusif dengan namespaces.exclude.
namespaces.exclude list(string) Lewati descheduling pada namespace tertentu. Saling eksklusif dengan namespaces.include.
labelSelector map Batasi descheduling hanya pada pod yang sesuai dengan label yang ditentukan.

Terapkan konfigurasi

  1. Terapkan ConfigMap ke kluster:

    kubectl apply -f koord-descheduler-config.yaml
  2. Mulai ulang Koordinator Descheduler agar menerapkan konfigurasi baru:

    kubectl -n kube-system scale deploy ack-koord-descheduler --replicas 0
    # Expected output:
    # deployment.apps/ack-koord-descheduler scaled
    kubectl -n kube-system scale deploy ack-koord-descheduler --replicas 1
    # Expected output:
    # deployment.apps/ack-koord-descheduler scaled

Langkah 3: Verifikasi descheduling

Contoh ini menggunakan kluster tiga node.

  1. Buat file bernama stress-demo.yaml dengan konten berikut:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: stress-demo
      namespace: default
      labels:
        app: stress-demo
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: stress-demo
      template:
        metadata:
          name: stress-demo
          labels:
            app: stress-demo
        spec:
          containers:
            - args:
                - '--vm'
                - '2'
                - '--vm-bytes'
                - '1600M'
                - '-c'
                - '2'
                - '--vm-hang'
                - '2'
              command:
                - stress
              image: registry-cn-beijing.ack.aliyuncs.com/acs/stress:v1.0.4
              imagePullPolicy: Always
              name: stress
              resources:
                limits:
                  cpu: '2'
                  memory: 4Gi
                requests:
                  cpu: '2'
                  memory: 4Gi
          restartPolicy: Always
  2. Terapkan workload uji:

    kubectl create -f stress-demo.yaml
  3. Tunggu hingga pod mencapai status Running:

    kubectl get pod -o wide

    Output yang diharapkan:

    NAME                         READY   STATUS    RESTARTS   AGE    IP              NODE                        NOMINATED NODE   READINESS GATES
    stress-demo-5f6cddf9-9****   1/1     Running   0          10s    192.XX.XX.27   cn-beijing.192.XX.XX.247   <none>           <none>
    stress-demo-5f6cddf9-h****   1/1     Running   0          10s    192.XX.XX.20   cn-beijing.192.XX.XX.249   <none>           <none>
    stress-demo-5f6cddf9-v****   1/1     Running   0          10s    192.XX.XX.32   cn-beijing.192.XX.XX.248   <none>           <none>
  4. Tambahkan taint NoSchedule ke dua node:

    • Tambahkan deschedule=not-allow:NoSchedule ke cn-beijing.192.XX.XX.247 (dikecualikan oleh excludedTaints — pod harus tetap berjalan):

      kubectl taint nodes cn-beijing.192.XX.XX.247 deschedule=not-allow:NoSchedule

      Output yang diharapkan:

      node/cn-beijing.192.XX.XX.247 tainted
    • Tambahkan deschedule=allow:NoSchedule ke cn-beijing.192.XX.XX.248 (tidak dikecualikan — pod harus dievict):

      kubectl taint nodes cn-beijing.192.XX.XX.248 deschedule=allow:NoSchedule

      Output yang diharapkan:

      node/cn-beijing.192.XX.XX.248 tainted
  5. Amati perubahan pod. Descheduler memeriksa taint pada setiap deschedulingInterval (120 detik):

    kubectl get pod -o wide -w

    Output yang diharapkan:

    NAME                         READY   STATUS              RESTARTS   AGE     IP             NODE                    NOMINATED NODE   READINESS GATES
    stress-demo-5f6cddf9-9****   1/1     Running             0          5m34s   192.XX.XX.27   cn-beijing.192.XX.XX.247   <none>           <none>
    stress-demo-5f6cddf9-h****   1/1     Running             0          5m34s   192.XX.XX.20   cn-beijing.192.XX.XX.249   <none>           <none>
    stress-demo-5f6cddf9-v****   1/1     Running             0          5m34s   192.XX.XX.32   cn-beijing.192.XX.XX.248   <none>           <none>
    stress-demo-5f6cddf9-v****   1/1     Terminating         0          7m58s   192.XX.XX.32   cn-beijing.192.XX.XX.248   <none>           <none>
    stress-demo-5f6cddf9-j****   0/1     ContainerCreating   0          0s      <none>         cn-beijing.192.XX.XX.249   <none>           <none>
    stress-demo-5f6cddf9-j****   1/1     Running             0          2s      192.XX.XX.32   cn-beijing.192.XX.XX.249   <none>           <none>

    Output tersebut mengonfirmasi:

    • Pod di cn-beijing.192.XX.XX.248 (taint deschedule=allow:NoSchedule, tidak dikecualikan) dievict.

    • Pod di cn-beijing.192.XX.XX.247 (taint deschedule=not-allow:NoSchedule, dikecualikan) tetap berjalan.

    • Pod yang dievict dijadwalkan ulang ke cn-beijing.192.XX.XX.249, yang tidak memiliki taint NoSchedule.

  6. Periksa event eviction untuk pod yang dievict:

    kubectl get event | grep stress-demo-5f6cddf9-v****

    Output yang diharapkan:

    3m24s       Normal    Evicting            podmigrationjob/b0fba65f-7fab-4a99-96a9-c71a3798****   Pod "default/stress-demo-5f6cddf9-v****" evicted from node "cn-beijing.192.XX.XX.248" by the reason "RemovePodsViolatingNodeTaints"
    2m51s       Normal    EvictComplete       podmigrationjob/b0fba65f-7fab-4a99-96a9-c71a3798****   Pod "default/stress-demo-5f6cddf9-v****" has been evicted
    3m24s       Normal    Descheduled         pod/stress-demo-5f6cddf9-v****                         Pod evicted from node "cn-beijing.192.XX.XX.248" by the reason "RemovePodsViolatingNodeTaints"
    3m24s       Normal    Killing             pod/stress-demo-5f6cddf9-v****                         Stopping container stress

    Setiap event berkaitan dengan fase dalam siklus hidup migrasi:

    Event Sumber Makna
    Evicting PodMigrationJob Descheduler telah memutuskan untuk meng-evict pod dan memulai job migrasi.
    Descheduled Pod Pod menerima sinyal eviction.
    Killing Pod Runtime kontainer menghentikan kontainer.
    EvictComplete PodMigrationJob Pod telah sepenuhnya dievict. Controller workload akan membuatnya ulang.

    Pod di cn-beijing.192.XX.XX.248 tidak memiliki toleransi terhadap taint deschedule=allow:NoSchedule (yang tidak ada dalam excludedTaints), sehingga dievict. Hasilnya sesuai ekspektasi.

Konfigurasi parameter lanjutan

Gunakan ConfigMap untuk mengonfigurasi perilaku global dan pengaturan templat detail halus untuk Koordinator Descheduler.

Contoh konfigurasi lanjutan

Contoh berikut menunjukkan ConfigMap Koordinator Descheduler yang telah dikonfigurasi lengkap. Konfigurasi ini menggunakan DeschedulerConfiguration untuk pengaturan global, mengaktifkan RemovePodsViolatingNodeTaints sebagai kebijakan descheduling, dan menggunakan MigrationController sebagai evictor.

# koord-descheduler-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: koord-descheduler-config
  namespace: kube-system
data:
  koord-descheduler-config: |
    # Jangan ubah konfigurasi sistem berikut untuk koord-desheduler.
    apiVersion: descheduler/v1alpha2
    kind: DeschedulerConfiguration
    leaderElection:
      resourceLock: leases
      resourceName: koord-descheduler
      resourceNamespace: kube-system
    dryRun: false # Mode read-only global. Setelah diaktifkan, koord-descheduler tidak melakukan operasi apa pun.
    deschedulingInterval: 120s # Interval eksekusi descheduler. Diatur ke 120 detik dalam contoh ini.
    nodeSelector: # Node yang terlibat dalam descheduling. Secara bawaan, semua node ikut dalam descheduling.
      matchLabels:
        alibabacloud.com/nodepool-id: nodepool-1 # Sesuaikan berdasarkan kebutuhan Anda.
    maxNoOfPodsToEvictPerNode: 10 # Jumlah maksimum pod yang dapat dievict dari satu node. Batas ini berlaku secara global. Secara bawaan, tidak ada batas.
    maxNoOfPodsToEvictPerNamespace: 10 # Jumlah maksimum pod yang dapat dievict dari satu namespace. Batas ini berlaku secara global. Secara bawaan, tidak ada batas.
    # Konfigurasi di atas adalah konfigurasi sistem.

    # Daftar templat.
    profiles:
    - name: koord-descheduler # Nama templat.

      # Cakupan: terapkan templat ini hanya pada node tertentu.
      # Metode 1: Pilih node dalam satu kelompok node.
      nodeSelector:
        matchLabels:
          alibabacloud.com/nodepool-id: nodepool-1 # Sesuaikan berdasarkan kebutuhan Anda
      # Metode 2: Pilih node dalam beberapa kelompok node.
      # nodeSelector:
      #   matchExpressions:
      #   - key: alibabacloud.com/nodepool-id
      #     operator: In
      #     values:
      #     - nodepool-1
      #     - nodepool-2

      plugins:
        deschedule: # Semua plug-in dinonaktifkan secara bawaan. Tentukan yang ingin diaktifkan.
          enabled:
            - name: RemovePodsViolatingNodeTaints  # Aktifkan plug-in verifikasi taint node.
        balance: # Semua plug-in dinonaktifkan secara bawaan.
          disabled:
            - name: "*" # Nonaktifkan semua plug-in Balance.
        evict:
          enabled:
            - name: MigrationController # MigrationController diaktifkan secara bawaan.
        filter:
          enabled:
            - name: MigrationController # Gunakan kebijakan penyaringan MigrationController secara bawaan.

      pluginConfig:
      - name: RemovePodsViolatingNodeTaints
        args:
          excludedTaints:
          - deschedule=not-allow # Abaikan node yang kunci taint-nya deschedule dan nilai taint-nya not-allow.
          - reserved # Abaikan node yang kunci taint-nya reserved.
          includePreferNoSchedule: false # Jika false, hanya memeriksa taint NoSchedule.
          namespaces:
            include: # Batasi descheduling hanya pada namespace berikut.
              - "namespace1"
              - "namespace2"
            # exclude: # Atau, kecualikan namespace berikut.
            #   - "namespace1"
            #   - "namespace2"
          labelSelector: # Hanya deschedule pod yang sesuai dengan label berikut.
            accelerator: nvidia-tesla-p100

      - name: MigrationController
        args:
          apiVersion: descheduler/v1alpha2
          kind: MigrationControllerArgs
          defaultJobMode: EvictDirectly
          evictLocalStoragePods: false # Jika false, pod yang menggunakan emptyDir atau hostPath tidak dideschedule.
          maxMigratingPerNode: 1 # Maksimum pod yang dimigrasikan secara bersamaan pada satu node.
          maxMigratingPerNamespace: 1  # Maksimum pod yang dimigrasikan secara bersamaan dalam satu namespace.
          maxMigratingPerWorkload: 1 # Maksimum pod yang dimigrasikan secara bersamaan dalam satu workload.
          maxUnavailablePerWorkload: 2 # Maksimum pod replikasi yang tidak tersedia dalam satu workload.
          objectLimiters:
            workload: # Pembatasan laju migrasi tingkat workload. Bawaan: hanya 1 pod per workload dalam 5 menit.
              duration: 5m
              maxMigrating: 1
          evictionPolicy: Eviction # Gunakan API Eviction secara bawaan.

Konfigurasi sistem

Konfigurasikan perilaku tingkat sistem global dalam DeschedulerConfiguration.

Parameter Tipe Nilai valid Deskripsi Contoh
dryRun boolean true / false (bawaan: false) Mode read-only. Jika diaktifkan, tidak ada pod yang dimigrasikan. false
deschedulingInterval time.Duration >0s Frekuensi eksekusi descheduler. 120s
nodeSelector Struktur Batasi node mana saja yang memenuhi syarat untuk descheduling. Mendukung matchLabels (satu kelompok node) atau matchExpressions (beberapa kelompok node). Lihat Kubernetes labelSelector. Lihat contoh YAML di atas
maxNoOfPodsToEvictPerNode int ≥0 (bawaan: 0) Maksimum pod yang dievict dari satu node per siklus descheduling. Nilai 0 berarti tidak ada batas. 10
maxNoOfPodsToEvictPerNamespace int ≥0 (bawaan: 0) Maksimum pod yang dievict dari satu namespace per siklus descheduling. Nilai 0 berarti tidak ada batas. 10

Konfigurasi templat

Koordinator Descheduler menggunakan templat (profiles) untuk mengelompokkan kebijakan descheduling dan evictor. Setiap templat memiliki bidang berikut:

  • `name`: Pengenal string untuk templat.

  • `plugins`: Mengaktifkan atau menonaktifkan kebijakan descheduling (deschedule, balance), evictor (evict), dan filter pra-eviction (filter).

  • `pluginConfig`: Argumen lanjutan per plug-in. Atur bidang name agar sesuai dengan nama plug-in dan konfigurasikan args. Lihat Konfigurasi plug-in kebijakan dan Konfigurasi plug-in evictor.

  • `nodeSelector`: Membatasi cakupan templat hanya pada node tertentu. Jika tidak diatur, templat berlaku untuk semua node.

Bidang nodeSelector dalam konfigurasi templat memerlukan ack-koordinator v1.6.1-ack.1.16 atau lebih baru.

Referensi bidang `plugins`:

Bidang Plug-in yang didukung Deskripsi
deschedule RemovePodsViolatingNodeTaints, RemovePodsViolatingInterPodAntiAffinity, RemovePodsViolatingNodeAffinity, RemovePodsHavingTooManyRestarts, PodLifeTime, RemoveFailedPod Semua dinonaktifkan secara bawaan. Tentukan plug-in yang ingin diaktifkan.
balance RemoveDuplicates, LowNodeUtilization, HighNodeUtilization, RemovePodsViolatingTopologySpreadConstraint, LowNodeLoad Semua dinonaktifkan secara bawaan. Tentukan plug-in yang ingin diaktifkan.
evict MigrationController, DefaultEvictor Evictor pod. MigrationController diaktifkan secara bawaan. Jangan aktifkan beberapa plug-in evict secara bersamaan.
filter MigrationController, DefaultEvictor Kebijakan penyaringan pra-eviction. MigrationController diaktifkan secara bawaan. Jangan aktifkan beberapa plug-in filter secara bersamaan.

Konfigurasi plug-in kebijakan

Koordinator Descheduler mendukung enam plug-in Deschedule dan lima plug-in Balance dari Kubernetes Descheduler. Plug-in LowNodeLoad disediakan oleh Koordinator. Untuk informasi selengkapnya, lihat Bekerja dengan descheduling hotspot berbasis beban.

Jenis kebijakan Plug-in Deskripsi
Deschedule RemovePodsViolatingInterPodAntiAffinity Meng-evict pod yang melanggar aturan anti-afinitas antar-pod.
Deschedule RemovePodsViolatingNodeAffinity Meng-evict pod yang tidak lagi memenuhi aturan afinitas node.
Deschedule RemovePodsViolatingNodeTaints Meng-evict pod yang tidak dapat mentoleransi taint node.
Deschedule RemovePodsHavingTooManyRestarts Meng-evict pod yang sering restart.
Deschedule PodLifeTime Meng-evict pod yang TTL-nya telah kedaluwarsa.
Deschedule RemoveFailedPod Meng-evict pod dalam status Failed.
Balance RemoveDuplicates Menyebarluaskan pod replikasi secara merata di berbagai node.
Balance LowNodeUtilization Mendistribusikan ulang pod berdasarkan alokasi sumber daya node.
Balance HighNodeUtilization Mengkonsolidasi pod dari node yang kurang dimanfaatkan ke node yang lebih dimanfaatkan.
Balance RemovePodsViolatingTopologySpreadConstraint Meng-evict pod yang melanggar batasan penyebaran topologi.

Konfigurasi plug-in evictor

Koordinator Descheduler mendukung dua plug-in evictor: DefaultEvictor dan MigrationController.

MigrationController

MigrationController menyediakan kontrol eviction detail halus dan observabilitas melalui job migrasi.

Parameter Tipe Nilai valid Deskripsi Contoh
evictLocalStoragePods boolean true / false (bawaan: false) Jika false, pod yang menggunakan emptyDir atau hostPath tidak dideschedule. false
maxMigratingPerNode int64 ≥0 (bawaan: 2) Maksimum pod yang dimigrasikan secara bersamaan pada satu node. Nilai 0 berarti tidak ada batas. 2
maxMigratingPerNamespace int64 ≥0 (bawaan: 0) Maksimum pod yang dimigrasikan secara bersamaan dalam satu namespace. Nilai 0 berarti tidak ada batas. 1
maxMigratingPerWorkload intOrString ≥0 (bawaan: 10%) Maksimum pod atau persentase yang dimigrasikan secara bersamaan dalam satu workload. Nilai 0 berarti tidak ada batas. Jika workload hanya memiliki satu pod, maka dikecualikan dari descheduling. 1 atau 10%
maxUnavailablePerWorkload intOrString ≥0 dan < jumlah replica (bawaan: 10%) Maksimum pod replikasi yang tidak tersedia dalam satu workload. Nilai 0 berarti tidak ada batas. 1 atau 10%
objectLimiters.workload Struktur Duration >0 (bawaan: 5m); MaxMigrating ≥0 (bawaan: 10%) Membatasi laju migrasi tingkat workload dalam jendela waktu tertentu. Duration menentukan panjang jendela. MaxMigrating menentukan maksimum pod yang dimigrasikan dalam jendela tersebut. duration: 5m maxMigrating: 1
evictionPolicy string Eviction (bawaan), Delete, Soft Mengontrol cara pod dievict. Eviction: memanggil API Eviction untuk eviction yang graceful. Delete: memanggil API Delete. Soft: menambahkan anotasi scheduling.koordinator.sh/soft-eviction untuk penanganan khusus di downstream. Eviction

DefaultEvictor

DefaultEvictor adalah evictor standar Kubernetes Descheduler. Untuk detail konfigurasi, lihat DefaultEvictor.

MigrationController vs. DefaultEvictor

Kemampuan DefaultEvictor MigrationController
Metode eviction Hanya API Eviction API Eviction, API Delete, atau anotasi Soft
Batas eviction per node Didukung Didukung
Batas eviction per namespace Didukung Didukung
Batas eviction per workload Tidak didukung Didukung
Batas ketidaktersediaan per workload Tidak didukung Didukung
Pembatasan laju eviction Tidak didukung Pembatasan berbasis jendela waktu per workload
Observabilitas eviction Hanya log komponen Log komponen dan event Kubernetes dengan status migrasi per pod

Langkah selanjutnya