All Products
Search
Document Center

Container Service for Kubernetes:Gunakan descheduling yang peka terhadap hotspot untuk menyeimbangkan beban node

Last Updated:Mar 26, 2026

Komponen ack-koordinator mencakup modul Koordinator Descheduler yang mendeteksi node yang berjalan di atas ambang batas beban aman dan secara otomatis mengusir Pod untuk menyeimbangkan kembali kluster. Berbeda dengan plugin Kubernetes LowNodeUtilization bawaan yang bertindak berdasarkan tingkat alokasi sumber daya, plugin LowNodeLoad bertindak berdasarkan utilisasi sumber daya aktual, sehingga memberikan gambaran yang lebih akurat tentang kondisi kesehatan kluster.

Topik ini menjelaskan cara mengaktifkan descheduling hotspot yang peka terhadap beban dan mengonfigurasi parameter lanjutannya.

Batasan

  • Hanya kluster ACK managed Pro yang didukung.

  • Diperlukan versi komponen berikut:

    KomponenVersi
    ACK Schedulerv1.22.15-ack-4.0 atau yang lebih baru, v1.24.6-ack-4.0 atau yang lebih baru
    ack-koordinatorv1.1.1-ack.1 atau yang lebih baru
    Helmv3.0 atau yang lebih baru
Penting

Koordinator Descheduler hanya mengusir Pod; penjadwalan ulang ditangani oleh ACK Scheduler. Gunakan descheduling bersama dengan penjadwalan yang peka terhadap beban agar ACK Scheduler tidak menempatkan kembali Pod yang diusir ke node hotspot.

Penting

Saat descheduling, Pod lama diusir sebelum Pod baru dibuat. Pastikan aplikasi Anda memiliki replika redundan yang cukup untuk mencegah pengusiran memengaruhi ketersediaan.

Penting

Descheduling menggunakan API eviction standar Kubernetes. Pastikan Pod aplikasi Anda dapat dimasuki kembali (re-entrant) sehingga restart setelah eviction tidak mengganggu layanan Anda.

Penagihan

ack-koordinator gratis untuk diinstal dan digunakan. Biaya tambahan mungkin berlaku dalam skenario berikut:

  • Sumber daya node pekerja: ack-koordinator adalah komponen yang dikelola sendiri dan mengonsumsi sumber daya node pekerja setelah instalasi. Konfigurasikan permintaan sumber daya untuk setiap modul saat menginstal komponen tersebut.

  • Metrik kustom Prometheus: Jika Anda mengaktifkan Enable Prometheus Monitoring for ACK-Koordinator dan menggunakan layanan Alibaba Cloud Prometheus, metrik yang diekspos dihitung sebagai metrik kustom dan dikenai biaya. Biaya tergantung pada ukuran kluster dan jumlah aplikasi. Tinjau dokumentasi penagihan instans Prometheus sebelum mengaktifkan fitur ini. Kueri data penggunaan untuk memantau dan mengelola konsumsi sumber daya Anda.

Cara kerja

Siklus eksekusi

Koordinator Descheduler berjalan secara berkala. Setiap siklus eksekusi terdiri dari tiga tahap:

Koordinator Descheduler execution procedure
  1. Pengumpulan data: Mengambil informasi node dan workload beserta data utilisasi sumber dayanya.

  2. Eksekusi plugin (menggunakan LowNodeLoad sebagai contoh):

    1. Mengidentifikasi node hotspot berdasarkan highThresholds dan lowThresholds.

    2. Menelusuri semua node hotspot, memberi skor pada Pod yang memenuhi syarat, dan mengurutkannya untuk eviction. Lihat Kebijakan pemberian skor Pod.

    3. Memeriksa setiap Pod kandidat terhadap batasan migrasi—kapasitas kluster, utilisasi sumber daya, dan batas rasio replika. Lihat Kebijakan descheduling hotspot yang peka terhadap beban.

    4. Menandai Pod yang lolos semua pemeriksaan sebagai kandidat migrasi dan melewatkan yang tidak lolos.

  3. Eviction dan migrasi Pod: Mengusir kandidat migrasi menggunakan API eviction.

Klasifikasi node

Plugin LowNodeLoad mengklasifikasikan node ke dalam tiga kategori berdasarkan dua ambang batas: lowThresholds (ambang batas idle) dan highThresholds (ambang batas hotspot).

Sebagai contoh, dengan lowThresholds = 45% dan highThresholds = 70%:

Node classification diagram
  1. Node idle: Utilisasi sumber daya di bawah lowThresholds (< 45%).

  2. Node normal: Utilisasi sumber daya berada di antara lowThresholds dan highThresholds (45%–70%). Ini adalah rentang target.

  3. Node hotspot: Utilisasi sumber daya melebihi highThresholds (> 70%). Pod diusir hingga beban node turun menjadi 70% atau di bawahnya.

Data utilisasi sumber daya diperbarui setiap menit dan mencerminkan rata-rata selama 5 menit.

Jika semua node dalam kluster berada di atas lowThresholds, beban keseluruhan kluster dianggap tinggi. Dalam kondisi ini, Koordinator Descheduler menangguhkan descheduling meskipun beberapa node melebihi highThresholds.

Kebijakan descheduling hotspot yang peka terhadap beban

KebijakanDeskripsi
Hot spot check retrySebuah node diidentifikasi sebagai hotspot hanya setelah secara berturut-turut melebihi highThresholds selama sejumlah siklus eksekusi yang dikonfigurasi (default: 5). Hal ini mencegah positif palsu akibat lonjakan pemantauan sesaat.
Node sortingDi antara node hotspot yang teridentifikasi, descheduling dimulai dari node dengan utilisasi sumber daya tertinggi. Utilisasi CPU dan memori dibandingkan secara berurutan.
Pod scoringUntuk setiap node hotspot, Pod diberi skor dan diurutkan sebelum eviction: (1) kelas Priority yang lebih rendah terlebih dahulu (default adalah 0, yang terendah); (2) kelas QoS yang lebih rendah; (3) untuk priority dan QoS yang sama, Pod diurutkan berdasarkan utilisasi sumber daya dan waktu startup. Jika Anda memerlukan urutan eviction tertentu, konfigurasikan kelas Priority atau QoS yang berbeda untuk Pod Anda.
FilterMembatasi cakupan descheduling ke namespace, Pod, atau node tertentu menggunakan pemilih label. Lihat evictableNamespaces, podSelectors, dan nodeSelector di konfigurasi plugin LowNodeLoad.
Pre-checkSebelum mengusir Pod, descheduler memeriksa bahwa: (1) node yang cocok tersedia di kluster setelah mempertimbangkan Node Affinity, Node Selector, Tolerations, dan sumber daya yang tersedia; (2) kapasitas node idle cukup tanpa mendorongnya melebihi highThresholds. Kapasitas yang tersedia dihitung sebagai: (highThresholds − beban saat ini) × kapasitas total. Misalnya, jika sebuah node idle memiliki beban 20%, highThresholds adalah 70%, dan node tersebut memiliki 96 vCore, kapasitas yang tersedia adalah (70% − 20%) × 96 = 48 vCore.
Migration throttlingMembatasi migrasi Pod konkuren per node, namespace, dan workload. Jendela waktu mencegah Pod dalam workload yang sama dimigrasikan terlalu sering. Koordinator Descheduler kompatibel dengan mekanisme Kubernetes Pod Disruption Budget (PDB) untuk kontrol ketersediaan detail halus.
ObservabilityEvent migrasi dipancarkan untuk setiap Pod, menunjukkan alasan dan statusnya. Jalankan kubectl get event | grep <pod-name> untuk melihat detail migrasi.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Sebuah kluster ACK managed Pro

  • ACK Scheduler v1.22.15-ack-4.0 atau yang lebih baru, ack-koordinator v1.1.1-ack.1 atau yang lebih baru, dan Helm v3.0 atau yang lebih baru

Langkah 1: Aktifkan descheduling di ack-koordinator

  • Instalasi baru: Instal ack-koordinator dan pilih Enable Descheduling For Ack-koordinator pada halaman konfigurasi komponen. Lihat Instal komponen ack-koordinator.

  • Instalasi yang sudah ada: Pada halaman konfigurasi komponen, pilih Enable Descheduling For Ack-koordinator. Lihat Ubah komponen ack-koordinator.

Langkah 2: Aktifkan plugin LowNodeLoad

  1. Buat file koord-descheduler-config.yaml dengan konten berikut. ConfigMap ini mengaktifkan plugin descheduling LowNodeLoad.

    # koord-descheduler-config.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: koord-descheduler-config
      namespace: kube-system
    data:
      koord-descheduler-config: |
        # Konfigurasi sistem untuk koord-descheduler. Jangan ubah bagian ini.
        apiVersion: descheduler/v1alpha2
        kind: DeschedulerConfiguration
        leaderElection:
          resourceLock: leases
          resourceName: koord-descheduler
          resourceNamespace: kube-system
        deschedulingInterval: 120s  # Interval eksekusi. Descheduler berjalan setiap 120 detik.
                                    # Tidak boleh melebihi detectorCacheTimeout (default: 5m).
        dryRun: false               # Atur ke true untuk menjalankan dalam mode read-only (tanpa eviction).
        # Akhir konfigurasi sistem.
    
        profiles:
        - name: koord-descheduler
          plugins:
            balance:
              enabled:
                - name: LowNodeLoad      # Aktifkan plugin LowNodeLoad untuk descheduling hotspot.
            evict:
              enabled:
                - name: MigrationController  # Aktifkan controller eviction dan migrasi.
    
          pluginConfig:
          - name: MigrationController
            args:
              apiVersion: descheduler/v1alpha2
              kind: MigrationControllerArgs
              defaultJobMode: EvictDirectly
    
          - name: LowNodeLoad
            args:
              apiVersion: descheduler/v1alpha2
              kind: LowNodeLoadArgs
    
              # Sebuah node dianggap idle jika penggunaan SEMUA sumber daya berada di bawah lowThresholds.
              lowThresholds:
                cpu: 20    # Utilisasi CPU 20%
                memory: 30 # Utilisasi memori 30%
    
              # Sebuah node dianggap hotspot jika penggunaan SALAH SATU sumber daya melebihi highThresholds.
              highThresholds:
                cpu: 50    # Utilisasi CPU 50%
                memory: 60 # Utilisasi memori 60%
    
              # Membatasi cakupan descheduling ke namespace tertentu.
              # include dan exclude saling eksklusif—konfigurasikan hanya salah satu.
              evictableNamespaces:
                include:
                  - default
                # exclude:
                #   - "kube-system"
                #   - "koordinator-system"
  2. Terapkan ConfigMap ke kluster.

    kubectl apply -f koord-descheduler-config.yaml
  3. Restart Koordinator Descheduler untuk memuat konfigurasi baru.

    kubectl -n kube-system scale deploy ack-koord-descheduler --replicas 0
    kubectl -n kube-system scale deploy ack-koord-descheduler --replicas 1

Langkah 3 (opsional): Aktifkan penjadwalan yang peka terhadap beban

Untuk penyeimbangan beban optimal, aktifkan penjadwalan yang peka terhadap beban agar ACK Scheduler tidak menempatkan kembali Pod ke node hotspot setelah eviction. Lihat Langkah 1: Aktifkan penjadwalan yang peka terhadap beban.

Atur loadAwareThreshold dalam kebijakan penjadwalan yang peka terhadap beban ke nilai yang sama dengan highThresholds. Jika nilainya berbeda, Pod yang diusir mungkin dijadwalkan ulang kembali ke node hotspot—terutama ketika hanya tersedia beberapa node dengan tingkat utilisasi yang serupa.

Langkah 4: Verifikasi descheduling

Contoh ini menggunakan kluster tiga node di mana setiap node memiliki 104 core dan memori 396 GiB.

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

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: stress-demo
      namespace: default
      labels:
        app: stress-demo
    spec:
      replicas: 6
      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: polinux/stress
              imagePullPolicy: Always
              name: stress
              resources:
                limits:
                  cpu: '2'
                  memory: 4Gi
                requests:
                  cpu: '2'
                  memory: 4Gi
          restartPolicy: Always
  2. Terapkan workload pengujian stres.

    kubectl create -f stress-demo.yaml

    Output yang diharapkan:

    deployment.apps/stress-demo created
  3. Verifikasi Pod sedang berjalan dan catat node tempat mereka dijadwalkan.

    kubectl get pod -o wide

    Output yang diharapkan:

    NAME                           READY   STATUS    RESTARTS   AGE   IP            NODE                     NOMINATED NODE   READINESS GATES
    stress-demo-588f9646cf-s****   1/1     Running   0          82s   10.XX.XX.53   cn-beijing.10.XX.XX.53   <none>           <none>
  4. Tingkatkan beban pada cn-beijing.10.XX.XX.53 dan periksa utilisasi node.

    kubectl top node

    Output yang diharapkan:

    NAME                      CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
    cn-beijing.10.XX.XX.215   17611m       17%    24358Mi         6%
    cn-beijing.10.XX.XX.53    63472m       63%    11969Mi         3%

    Node cn-beijing.10.XX.XX.53 berada pada 63% CPU, yang melebihi ambang batas hotspot yang dikonfigurasi sebesar 50%. Node cn-beijing.10.XX.XX.215 berada pada 17% CPU, yang berada di bawah ambang batas idle sebesar 20%.

  5. Aktifkan plugin LowNodeLoad seperti yang dijelaskan dalam Langkah 2: Aktifkan plugin LowNodeLoad.

  6. Amati perubahan Pod.

    Secara default, sebuah node harus melebihi highThresholds selama lima pemeriksaan berturut-turut sebelum diklasifikasikan sebagai hotspot. Dengan interval default 120 detik, proses ini membutuhkan waktu sekitar 10 menit.
    kubectl get pod -w

    Output yang diharapkan:

    NAME                           READY   STATUS             RESTARTS   AGE   IP             NODE                     NOMINATED NODE   READINESS GATES
    stress-demo-588f9646cf-s****   1/1     Terminating        0          59s   10.XX.XX.53    cn-beijing.10.XX.XX.53   <none>           <none>
    stress-demo-588f9646cf-7****   1/1     ContainerCreating  0          10s   10.XX.XX.215   cn-beijing.10.XX.XX.215  <none>           <none>
  7. Periksa event eviction.

    kubectl get event | grep stress-demo-588f9646cf-s****

    Output yang diharapkan:

    2m14s   Normal   Evicting        podmigrationjob/00fe88bd-****   Pod "default/stress-demo-588f9646cf-s****" diusir dari node "cn-beijing.10.XX.XX.53" dengan alasan "node overutilized, cpu usage(68.53%)>threshold(50.00%)"
    101s    Normal   EvictComplete   podmigrationjob/00fe88bd-****   Pod "default/stress-demo-588f9646cf-s****" telah diusir
    2m14s   Normal   Descheduled     pod/stress-demo-588f9646cf-s****   Pod diusir dari node "cn-beijing.10.XX.XX.53" dengan alasan "node overutilized, cpu usage(68.53%)>threshold(50.00%)"
    2m14s   Normal   Killing         pod/stress-demo-588f9646cf-s****   Menghentikan kontainer stress

    Pod pada node hotspot telah diusir dan dimigrasikan ke cn-beijing.10.XX.XX.215.

Konfigurasi lanjutan

Semua parameter Koordinator Descheduler diatur dalam ConfigMap yang dibuat pada Langkah 2. Berikut ini menunjukkan konfigurasi lanjutan lengkap untuk descheduling hotspot yang peka terhadap beban.

# koord-descheduler-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: koord-descheduler-config
  namespace: kube-system
data:
  koord-descheduler-config: |
    # Konfigurasi sistem. Jangan ubah bagian ini.
    apiVersion: descheduler/v1alpha2
    kind: DeschedulerConfiguration
    leaderElection:
      resourceLock: leases
      resourceName: koord-descheduler
      resourceNamespace: kube-system
    deschedulingInterval: 120s  # Interval eksekusi. Tidak boleh melebihi detectorCacheTimeout.
    dryRun: false               # Atur ke true untuk mode read-only (tanpa eviction).
    # Akhir konfigurasi sistem.

    profiles:
    - name: koord-descheduler
      plugins:
        deschedule:
          disabled:
            - name: "*"  # Semua plugin dinonaktifkan secara default (ditampilkan hanya sebagai referensi).
        balance:
          enabled:
            - name: LowNodeLoad
        evict:
          disabled:
            - name: "*"  # Semua plugin dinonaktifkan secara default (ditampilkan hanya sebagai referensi).
          enabled:
            - name: MigrationController

      pluginConfig:
      - name: MigrationController
        args:
          apiVersion: descheduler/v1alpha2
          kind: MigrationControllerArgs
          defaultJobMode: EvictDirectly
          maxMigratingPerNode: 1       # Maksimum Pod yang bermigrasi secara simultan per node. 0 = tak terbatas.
          maxMigratingPerNamespace: 1  # Maksimum Pod yang bermigrasi secara simultan per namespace.
          maxMigratingPerWorkload: 1   # Maksimum Pod yang bermigrasi secara simultan per workload (misalnya, Deployment).
          maxUnavailablePerWorkload: 2 # Maksimum replika yang tidak tersedia per workload selama migrasi.
          evictLocalStoragePods: false # Apakah akan mengusir Pod yang menggunakan volume HostPath atau emptyDir.
          objectLimiters:
            workload:               # Paling banyak 1 replika dimigrasikan per workload dalam 5 menit.
              duration: 5m
              maxMigrating: 1

      - name: LowNodeLoad
        args:
          apiVersion: descheduler/v1alpha2
          kind: LowNodeLoadArgs

          lowThresholds:
            cpu: 20
            memory: 30
          highThresholds:
            cpu: 50
            memory: 60

          anomalyCondition:
            consecutiveAbnormalities: 5  # Jumlah pemeriksaan berturut-turut di atas highThresholds
                                          # sebelum sebuah node diklasifikasikan sebagai hotspot.
                                          # Penghitung direset setelah eviction.

          detectorCacheTimeout: "5m"  # Durasi cache untuk pemeriksaan hotspot.
                                      # Harus >= deschedulingInterval.

          evictableNamespaces:
            include:
              - default
            # exclude:
            #   - "kube-system"
            #   - "koordinator-system"

          nodeSelector:  # Proses hanya node yang ditentukan.
            matchLabels:
              alibabacloud.com/nodepool-id: np77f520e1108f47559e63809713ce****

          podSelectors:  # Proses hanya Pod yang ditentukan.
          - name: lsPods
            selector:
              matchLabels:
                koordinator.sh/qosClass: "LS"

Konfigurasi sistem Koordinator Descheduler

ParameterTipeNilaiDeskripsiContoh
dryRunbooleantrue / false (default)Sakelar mode read-only. Saat diaktifkan, tidak ada migrasi Pod yang dimulai.false
deschedulingIntervaltime.Duration> 0sInterval eksekusi. Tidak boleh lebih besar dari detectorCacheTimeout dalam plugin LowNodeLoad.120s

Konfigurasi kontrol eviction dan migrasi

ParameterTipeNilaiDeskripsiContoh
maxMigratingPerNodeint64≥ 0 (default: 2)Maksimum Pod dalam status migrasi per node. 0 berarti tidak ada batas.2
maxMigratingPerNamespaceint64≥ 0 (default: tak terbatas)Maksimum Pod dalam status migrasi per namespace. 0 berarti tidak ada batas.1
maxMigratingPerWorkloadintOrString≥ 0 (default: 10%)Maksimum Pod atau persentase Pod dalam status migrasi per workload (misalnya, Deployment). 0 berarti tidak ada batas. Workload dengan satu replika tidak didescheduling.1 atau 10%
maxUnavailablePerWorkloadintOrString≥ 0 (default: 10%), kurang dari total replikaMaksimum replika yang tidak tersedia atau persentasenya per workload. 0 berarti tidak ada batas.1 atau 10%
evictLocalStoragePodsbooleantrue / false (default)Apakah akan mengusir Pod yang dikonfigurasi dengan volume HostPath atau emptyDir. Dinonaktifkan secara default demi keamanan data.false
objectLimiters.workloadstructDuration > 0s (default: 5m); MaxMigrating ≥ 0 (default: 10%)Pembatasan migrasi pada tingkat workload. Duration menetapkan jendela waktu; MaxMigrating menetapkan maksimum replika yang dimigrasikan dalam jendela tersebut. Default mengikuti maxMigratingPerWorkload.duration: 5m / maxMigrating: 1 — paling banyak 1 replika dimigrasikan per workload dalam 5 menit.

Konfigurasi plugin LowNodeLoad

ParameterTipeNilaiDeskripsiContoh
highThresholdsmap[string]float64[0, 100] (CPU dan memori, dalam persentase)Ambang batas hotspot. Pod pada node yang melebihi ambang ini memenuhi syarat untuk eviction. Jika semua node berada di atas lowThresholds, Koordinator Descheduler menangguhkan descheduling meskipun beberapa node melebihi ambang ini.cpu: 55 / memory: 75
lowThresholdsmap[string]float64[0, 100] (CPU dan memori, dalam persentase)Ambang batas idle. Jika semua node melebihi ambang ini, beban keseluruhan kluster dianggap tinggi dan descheduling ditangguhkan.cpu: 25 / memory: 25
anomalyCondition.consecutiveAbnormalitiesint64> 0 (default: 5)Jumlah siklus eksekusi berturut-turut yang harus dilewati sebuah node melebihi highThresholds sebelum diklasifikasikan sebagai hotspot. Penghitung direset setelah eviction.5
detectorCacheTimeout\*metav1.DurationLihat format Duration (default: 5m)Durasi cache untuk pemeriksaan hotspot. Harus ≥ deschedulingInterval.1h, 300s, 2m30s
evictableNamespacesinclude: string / exclude: stringNamespace dalam klusterMembatasi cakupan descheduling ke namespace tertentu. Biarkan kosong untuk memproses semua Pod. include dan exclude saling eksklusif.exclude: ["kube-system", "koordinator-system"]
nodeSelectormetav1.LabelSelectorLihat Label dan pemilihMembatasi cakupan descheduling ke node tertentu menggunakan pemilih label. Mendukung kelompok node tunggal (matchLabels) dan beberapa kelompok node (matchExpressions).matchLabels: {alibabacloud.com/nodepool-id: np****}
podSelectorsdaftar PodSelectorLihat Label dan pemilihMembatasi cakupan descheduling ke Pod tertentu menggunakan pemilih label. Mendukung beberapa kelompok pemilih.matchLabels: {koordinator.sh/qosClass: "LS"}

FAQ

Utilisasi node melebihi ambang batas tetapi Pod tidak diusir

Penyebab paling umum adalah konfigurasi descheduler tidak berlaku. Periksa item-item berikut secara berurutan:

  1. Cakupan tidak dikonfigurasi: Descheduler hanya memproses namespace dan node yang secara eksplisit disertakan (atau tidak dikecualikan). Periksa evictableNamespaces dan nodeSelector untuk memastikan namespace dan node target berada dalam cakupan.

  2. Descheduler tidak direstart setelah perubahan konfigurasi: Perubahan konfigurasi hanya berlaku setelah restart. Lihat Langkah 2: Aktifkan plugin LowNodeLoad untuk instruksi restart.

  3. Interval lebih panjang dari timeout cache: deschedulingInterval (default: 2 menit) tidak boleh melebihi detectorCacheTimeout (default: 5 menit). Jika melebihi, deteksi hotspot menjadi tidak valid. Sesuaikan nilainya dan restart descheduler.

  4. Node tidak konsisten di atas ambang batas: Descheduler menghitung rata-rata terhalus (smoothed average) selama beberapa siklus. Sebuah node diklasifikasikan sebagai hotspot hanya setelah melebihi highThresholds selama consecutiveAbnormalities siklus berturut-turut (default: 5 siklus, sekitar 10 menit). Nilai yang dikembalikan oleh kubectl top node hanya mencerminkan menit terakhir. Pantau node tersebut dalam periode yang lebih lama untuk memastikan utilisasi tinggi yang berkelanjutan.

  5. Kapasitas kluster tidak mencukupi: Sebelum mengusir Pod, descheduler memeriksa apakah setidaknya satu node lain memiliki kapasitas bebas yang cukup untuk menampung Pod tersebut. Jika tidak ada node yang memenuhi, eviction dilewati. Tambahkan node untuk meningkatkan kapasitas keseluruhan kluster.

  6. Workload replika tunggal: Pod replika tunggal tidak diusir secara default untuk melindungi ketersediaan. Untuk mengganti perilaku ini, tambahkan anotasi descheduler.alpha.kubernetes.io/evict: "true" ke Pod atau spec.template.metadata workload. Anotasi ini tidak didukung di ack-koordinator v1.3.0-ack1.6, v1.3.0-ack1.7, atau v1.3.0-ack1.8. Tingkatkan ke versi terbaru untuk menggunakan fitur ini.

  7. Pod menggunakan HostPath atau emptyDir: Pod jenis ini dikecualikan dari descheduling secara default. Atur evictLocalStoragePods: true dalam konfigurasi MigrationController untuk mengizinkan eviction-nya. Lihat Konfigurasi kontrol eviction dan migrasi.

  8. Terlalu banyak replika yang tidak tersedia atau sedang bermigrasi: Jika jumlah replika yang tidak tersedia atau sedang bermigrasi dalam suatu workload telah mencapai maxUnavailablePerWorkload atau maxMigratingPerWorkload, tidak ada eviction lebih lanjut yang dimulai untuk workload tersebut. Tunggu hingga eviction yang sedang berlangsung selesai, atau tingkatkan batas ini.

  9. Jumlah replika ≤ batas migrasi: Jika jumlah total replika kurang dari atau sama dengan maxMigratingPerWorkload atau maxUnavailablePerWorkload, descheduler melewatkan workload tersebut. Kurangi nilai-nilai ini atau ubah ke persentase.

Descheduler sering restart

ConfigMap yang tidak valid atau hilang menyebabkan descheduler restart secara berulang. Periksa konten dan format ConfigMap. Lihat Konfigurasi lanjutan untuk struktur yang benar. Setelah memperbaiki ConfigMap, restart descheduler seperti yang dijelaskan dalam Langkah 2: Aktifkan plugin LowNodeLoad.

Cara kerja bersama antara penjadwalan yang peka terhadap beban dan descheduling hotspot

Aktifkan kedua fitur ini untuk mencapai penyeimbangan beban optimal. Descheduling hotspot mengusir Pod dari node yang kelebihan beban; penjadwalan yang peka terhadap beban mengarahkan ACK Scheduler untuk menempatkan kembali Pod tersebut pada node dengan utilisasi lebih rendah, bukan kembali ke node hotspot.

Atur parameter loadAwareThreshold dalam kebijakan penjadwalan yang peka terhadap beban ke nilai yang sama dengan highThresholds. Lihat Gunakan penjadwalan yang peka terhadap beban dan Kebijakan penjadwalan untuk detailnya.

Data utilisasi apa yang digunakan descheduler?

Descheduler memantau penggunaan sumber daya selama beberapa siklus dan menghitung rata-rata terhalus. Sebuah node memicu eviction hanya ketika rata-rata penggunaannya tetap berada di atas highThresholds selama jumlah siklus berturut-turut yang dikonfigurasi (default: sekitar 10 menit).

Untuk memori, descheduler mengecualikan page cache dari perhitungannya karena OS dapat mereklamasinya sesuai permintaan. Nilai yang ditampilkan oleh kubectl top node mencakup page cache. Gunakan Managed Service for Prometheus untuk melihat metrik utilisasi memori aktual yang digunakan oleh descheduler.

Langkah selanjutnya