全部产品
Search
文档中心

Container Service for Kubernetes:Aktifkan fitur penjadwalan ulang

更新时间:Nov 11, 2025

Penjadwalan ulang (descheduling) adalah proses menjadwalkan ulang Pod yang sesuai dengan aturan pengusiran pada suatu node ke node lain. Fitur ini cocok untuk skenario seperti pemanfaatan sumber daya kluster yang tidak merata, node yang sangat padat, dan permintaan terhadap kebijakan penjadwalan baru. Fitur penjadwalan ulang membantu mengoptimalkan penggunaan sumber daya dan meningkatkan kualitas layanan aplikasi. Topik ini menggunakan plugin verifikasi taint node bernama RemovePodsViolatingNodeTaints sebagai contoh untuk menjelaskan cara mengaktifkan fitur penjadwalan ulang berdasarkan komponen ack-koordinator.

Sebelum memulai

  • Sebelum menerapkan, kami menyarankan Anda memahami fitur, skenario penggunaan, alur kerja, dan konsep dasar penjadwalan ulang.

  • Topik ini menggunakan plugin verifikasi taint node bernama RemovePodsViolatingNodeTaints sebagai contoh. Untuk informasi selengkapnya tentang cara penggunaan taint dan toleransi dalam menjadwalkan serta mengusir Pod, seperti NoSchedule, lihat Taints and Tolerations.

  • Jika Anda menggunakan Kubernetes Descheduler dari komunitas, kami menyarankan Anda melihat Koordinator Descheduler dan Kubernetes Descheduler untuk memahami perbedaan antara Koordinator Descheduler dan Kubernetes Descheduler serta menyelesaikan migrasi komponen.

  • Untuk mempelajari konfigurasi lanjutan untuk penjadwalan ulang detail halus, seperti konfigurasi sistem, konfigurasi templat, konfigurasi plugin kebijakan, dan konfigurasi plugin pengusir, lihat Konfigurasi parameter lanjutan.

Prasyarat

Catatan penggunaan

  • Koordinator Descheduler hanya mengusir Pod yang sedang berjalan dan tidak membuat ulang atau menjadwalkan kembali Pod yang diusir tersebut. Setelah Pod diusir, Pod tersebut akan dibuat ulang oleh pengontrol beban kerja, seperti Deployment dan StatefulSet. Pod yang dibuat ulang tetap dijadwalkan oleh penjadwal.

  • Selama proses penjadwalan ulang, Pod lama akan dieviksi dan Pod baru akan dibuat. Pastikan aplikasi Anda memiliki replicas yang cukup untuk menjaga ketersediaan aplikasi selama eviksi.

Contoh

Topik ini menjelaskan cara mengaktifkan fitur penjadwalan ulang dan menerapkan kebijakan penjadwalan ulang berdasarkan komponen ack-koordinator. Plugin verifikasi taint node RemovePodsViolatingNodeTaints digunakan sebagai contoh.

Secara default, kebijakan RemovePodsViolatingNodeTaints memeriksa Pod pada node yang memiliki taint dengan effect NoSchedule dan mengusir Pod yang tidak dapat mentolerir taint tersebut. Misalnya, sebuah node menjalankan Pod dan administrator menambahkan taint deschedule=not-allow:NoSchedule ke node tersebut. Jika Pod pada node tersebut tidak dikonfigurasi dengan toleransi untuk mentolerir taint tersebut, Pod akan diusir oleh kebijakan penjadwalan ulang. Untuk informasi selengkapnya, lihat RemovePodsViolatingNodeTaints.

Kebijakan RemovePodsViolatingNodeTaints memungkinkan Anda mengatur bidang excludedTaints untuk mengabaikan taint node. Jika key taint atau pasangan kunci-nilai (key=value) cocok dengan taint dalam daftar excludedTaints, taint tersebut akan diabaikan.

Dalam contoh ini, plugin dikonfigurasi untuk memverifikasi taint dengan cara berikut:

  • effect diatur ke NoSchedule pada node.

  • Pada atribut taint NoSchedule, key taint bukan deschedule, dan value taint bukan not-allow.

Pada node yang memenuhi kondisi di atas, jika Pod yang berjalan tidak memiliki toleransi yang sesuai, Pod tersebut akan diusir oleh descheduler.

Langkah 1: Instal atau modifikasi komponen ack-koordinator dan aktifkan penjadwalan ulang

Anda dapat mengikuti langkah-langkah dalam bagian ini untuk menginstal komponen ack-koordinator dan menggunakan fitur penjadwalan ulang yang disediakan oleh Koordinator Descheduler. Koordinator Descheduler diterapkan pada node sebagai Deployment.

Catatan

Jika Anda telah menginstal komponen ack-koordinator, pastikan versi komponen tersebut adalah 1.2.0-ack.2 atau lebih baru.

  1. Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.

  2. Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi sebelah kiri, klik Add-ons.

  3. Temukan komponen ack-koordinator dan klik Install di pojok kanan bawah. Pada kotak dialog Install, pilih Enable Descheduler for ACK-Koordinator untuk mengaktifkan modul penjadwalan ulang. Lalu, konfigurasikan dan instal komponen sesuai petunjuk.

Langkah 2: Aktifkan plugin penjadwalan ulang RemovePodsViolatingNodeTaints

  1. Gunakan konten YAML berikut untuk membuat file bernama koord-descheduler-config.yaml:

    Buat resource ConfigMap koord-descheduler-config.yaml untuk mengaktifkan dan mengonfigurasi plugin penjadwalan ulang RemovePodsViolatingNodeTaints.

    # koord-descheduler-config.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: koord-descheduler-config
      namespace: kube-system
    data:
      koord-descheduler-config: |
        # Jangan ubah konfigurasi sistem koord-desheduler berikut.
        apiVersion: descheduler/v1alpha2
        kind: DeschedulerConfiguration
        leaderElection:
          resourceLock: leases
          resourceName: koord-descheduler
          resourceNamespace: kube-system
        deschedulingInterval: 120s # Interval LowNodeLoad berjalan. Interval diatur menjadi 120 detik dalam contoh ini.
        dryRun: false # Mode read-only global. Setelah mode ini diaktifkan, koord-descheduler tidak melakukan operasi apa pun.
        # Konfigurasi di atas adalah konfigurasi sistem.
    
        profiles:
        - name: koord-descheduler
          plugins:
            deschedule:
              enabled:
                - name: RemovePodsViolatingNodeTaints  # Aktifkan plugin verifikasi taint node.        
    
          pluginConfig:             
          - name: RemovePodsViolatingNodeTaints # Konfigurasi plugin verifikasi taint node.
            args:        
              excludedTaints: 
              - deschedule=not-allow # Abaikan node yang key taint-nya deschedule dan value taint-nya not-allow.
          
          # Konfigurasi berikut diperlukan agar plugin verifikasi taint node berfungsi. Jangan hapus.     
          - name: MigrationController # Konfigurasi parameter migration controller.
            args:
              apiVersion: descheduler/v1alpha2
              kind: MigrationControllerArgs
              defaultJobMode: EvictDirectly            
  2. Jalankan perintah berikut untuk menerapkan file koord-descheduler-config.yaml di kluster:

    kubectl apply -f koord-descheduler-config.yaml
  3. Jalankan perintah berikut untuk me-restart modul descheduler Koordinator Descheduler:

    kubectl -n kube-system scale deploy ack-koord-descheduler --replicas 0
    # Output yang diharapkan
    # deployment.apps/ack-koord-descheduler scaled
    kubectl -n kube-system scale deploy ack-koord-descheduler --replicas 1
    # Output yang diharapkan
    # deployment.apps/ack-koord-descheduler scaled

    Atur jumlah replika Deployment ack-koord-descheduler menjadi 0 lalu atur kembali menjadi 1. Operasi ini me-restart modul Koordinator Descheduler. Konfigurasi terbaru akan digunakan setelah restart.

Langkah 3: Verifikasi fitur penjadwalan ulang

Sebuah kluster yang terdiri dari tiga node digunakan sebagai contoh.

  1. Gunakan konten YAML berikut untuk membuat file bernama stress-demo.yaml:

    Aplikasi contoh didefinisikan dalam file stress-demo.yaml.

    Tampilkan konten YAML

    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. Jalankan perintah berikut untuk menerapkan file stress-demo.yaml dan membuat Pod uji:

    kubectl create -f stress-demo.yaml
  3. Jalankan perintah berikut untuk melihat status Pod hingga masuk ke 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. Jalankan perintah berikut untuk menambahkan taint key=value:NoSchedule ke node:

    • Tambahkan taint deschedule=not-allow:NoSchedule ke node bernama cn-beijing.192.XX.XX.247:

      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 taint deschedule=allow:NoSchedule ke node bernama cn-beijing.192.XX.XX.248:

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

      Output yang diharapkan:

      node/cn-beijing.192.XX.XX.248 tainted
  5. Jalankan perintah berikut untuk melihat perubahan Pod:

    kubectl get pod -o wide -w

    Tunggu modul descheduler memeriksa taint node dan melakukan operasi pengusiran.

    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 menunjukkan informasi berikut:

    • Pod stress-demo-5f6cddf9-v**** pada node cn-beijing.192.XX.XX.248 dengan taint deschedule=allow:NoSchedule diusir.

    • Pod stress-demo-5f6cddf9-9**** pada node cn-beijing.192.XX.XX.247 dengan taint deschedule=not-allow:NoSchedule tidak diusir.

    • Pod yang diusir stress-demo-5f6cddf9-v**** dijadwalkan ulang ke node cn-beijing.192.XX.XX.249, yang tidak memiliki taint NoSchedule.

  6. Jalankan perintah berikut untuk melihat event Pod yang diusir:

    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

    Output yang diharapkan menunjukkan catatan migrasi Pod. Pod tersebut tidak dikonfigurasi dengan toleransi yang sesuai untuk mentolerir taint deschedule=not-allow pada node cn-beijing.192.XX.XX.248. Akibatnya, Pod tersebut dijadwalkan ulang ke node lain. Hasilnya sesuai harapan.

Konfigurasi parameter lanjutan

Selain operasi di atas, Anda juga dapat menggunakan ConfigMap untuk mengonfigurasi parameter lanjutan untuk Koordinator Descheduler.

Contoh konfigurasi lanjutan

File YAML berikut menunjukkan contoh konfigurasi lanjutan Koordinator Descheduler. Konfigurasi tersebut memodifikasi perilaku Koordinator Descheduler dengan memanggil API DeschedulerConfiguration, mengaktifkan kebijakan verifikasi taint node RemovePodsViolatingNodeTaint, dan menggunakan MigrationController sebagai pengusir Pod.

Untuk informasi selengkapnya tentang parameter dalam konfigurasi contoh, lihat bagian berikut.

Tampilkan konten YAML

# koord-descheduler-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: koord-descheduler-config
  namespace: kube-system
data:
  koord-descheduler-config: |
    # Jangan ubah konfigurasi sistem koord-desheduler berikut.
    apiVersion: descheduler/v1alpha2
    kind: DeschedulerConfiguration
    leaderElection:
      resourceLock: leases
      resourceName: koord-descheduler
      resourceNamespace: kube-system
    dryRun: false # Mode read-only global. Setelah mode ini diaktifkan, koord-descheduler tidak melakukan operasi apa pun.  
    deschedulingInterval: 120s # Interval LowNodeLoad berjalan. Interval diatur menjadi 120 detik dalam contoh ini.
    nodeSelector: # Node yang terlibat dalam penjadwalan ulang. Secara default, semua node dijadwalkan ulang.
      matchLabels:
        alibabacloud.com/nodepool-id: nodepool-1 # Konfigurasikan sesuai kebutuhan Anda.
    maxNoOfPodsToEvictPerNode: 10 # Jumlah maksimum Pod yang dapat diusir dari satu node. Batasan ini berlaku secara global. Secara default, tidak ada batasan.
    maxNoOfPodsToEvictPerNamespace: 10 # Jumlah maksimum Pod yang dapat diusir dari satu namespace. Batasan ini berlaku secara global. Secara default, tidak ada batasan.
    # Konfigurasi di atas adalah konfigurasi sistem.

    # Daftar templat.
    profiles: 
    - name: koord-descheduler # Nama templat.
    
      # Konfigurasi berikut menentukan cakupan templat, yang hanya berlaku pada node tertentu
      # Metode 1: Pilih node dalam satu kelompok node.
      nodeSelector:
        matchLabels:
          alibabacloud.com/nodepool-id: nodepool-1 # Konfigurasikan sesuai kebutuhan Anda
      # Metode 2: Pilih node dalam beberapa kelompok node.
      # nodeSelector:
      #   matchExpressions:
      #   - key: alibabacloud.com/nodepool-id
      #     operator: In
      #     values:
      #     - nodepool-1
      #     - nodepool-2     
      # Konfigurasi di atas menentukan cakupan templat    
      
      # Konfigurasi templat berikut menentukan plugin yang akan diaktifkan.
      plugins: 
        deschedule: # Tentukan kebijakan Deschedule. Semua plugin dinonaktifkan secara default.
          enabled: # Tentukan plugin yang akan diaktifkan. Semua plugin lain yang tidak secara eksplisit ditentukan dalam parameter enabled dinonaktifkan.
            - name: RemovePodsViolatingNodeTaints  # Aktifkan plugin verifikasi taint node.
        balance: # Tentukan kebijakan Balance. Semua plugin dinonaktifkan secara default.
          disabled: # Tentukan plugin yang akan dinonaktifkan.
            - name: "*" # Tanda bintang (*) menunjukkan bahwa semua plugin dinonaktifkan.
        evict:          
          enabled:
            - name: MigrationController # Tentukan pengusir. Secara default, migration controller diaktifkan.
        filter: 
          enabled:
            - name: MigrationController # Tentukan kebijakan pemfilteran pengusiran. Secara default digunakan kebijakan pemfilteran pengusiran dari migration controller.
      # Konfigurasi di atas adalah konfigurasi templat.

      # Daftar plugin, yang mencakup plugin kebijakan dan plugin pengusir.
      pluginConfig: 
      # Konfigurasi plugin kebijakan RemovePodsViolatingNodeTaints.
      - name: RemovePodsViolatingNodeTaints
        args:
          excludedTaints:
          - deschedule=not-allow # Abaikan node yang key taint-nya deschedule dan value taint-nya not-allow.
          - reserved # Abaikan node yang key taint-nya reserved.
          includePreferNoSchedule: false # Tentukan apakah akan menyertakan taint dengan effect PreferNoSchedule. Secara default, hanya taint dengan effect NoSchedule yang disertakan.
          namespaces: # Tentukan namespace yang ingin Anda sertakan atau kecualikan untuk penjadwalan ulang. Daftar include dan exclude saling eksklusif.
            include the following: # Tentukan namespace yang ingin Anda sertakan untuk penjadwalan ulang.
              - "namespace1"
              - "namespace2"
            # exclude: # Tentukan namespace yang ingin Anda kecualikan untuk penjadwalan ulang.
            #   - "namespace1"
            #   - "namespace2"
          labelSelector: # Tentukan Pod yang dapat dijadwalkan ulang. Secara default, semua Pod dapat dijadwalkan ulang.
            accelerator: nvidia-tesla-p100 # Hanya Pod yang key-nya accelerator dan valuenya nvidia-tesla-p100 yang dapat dijadwalkan ulang.     
    
      # Konfigurasi plugin verifikasi taint node.     
      - name: MigrationController # Konfigurasi parameter migration controller.
        args:
          apiVersion: descheduler/v1alpha2
          kind: MigrationControllerArgs
          defaultJobMode: EvictDirectly  
          evictLocalStoragePods: false # Tentukan apakah Pod yang dikonfigurasi dengan emptyDir atau hostPath dapat dijadwalkan ulang.        
          maxMigratingPerNode: 1 # Jumlah maksimum Pod yang dapat dimigrasikan secara bersamaan pada satu node.
          maxMigratingPerNamespace: 1  # Jumlah maksimum Pod yang dapat dimigrasikan secara bersamaan dalam satu namespace.
          maxMigratingPerWorkload: 1 # Jumlah maksimum Pod yang dapat dimigrasikan secara bersamaan dalam satu beban kerja, seperti Deployment.
          maxUnavailablePerWorkload: 2 # Jumlah maksimum Pod replikasi yang tidak tersedia yang diizinkan dalam satu beban kerja, seperti Deployment.
          objectLimiters:
            workload: # Kontrol migrasi Pod spesifik beban kerja. Secara default, sistem hanya dapat memigrasikan satu Pod replikasi dalam waktu 5 menit setelah pengusiran pertama.
              duration: 5m
              maxMigrating: 1
          evictionPolicy: Eviction # Metode pengusiran Pod. Secara default, API Eviction dipanggil untuk mengusir Pod.       

Konfigurasi sistem

Anda dapat mengonfigurasi perilaku global tingkat sistem untuk Koordinator Descheduler dalam DeschedulerConfiguration.

Parameter

Tipe

Nilai valid

Deskripsi

Contoh

dryRun

boolean

  • true

  • false (nilai default)

Mode read-only global. Setelah mode ini diaktifkan, Pod tidak dapat dimigrasikan.

false

deschedulingInterval

time.Duration

>0s

Interval penjadwalan ulang.

120s

nodeSelector

Struktur

N/A

Batasi node yang dapat dijadwalkan ulang. Kebijakan penjadwalan ulang hanya berlaku pada node yang ditentukan oleh selector node. Untuk informasi selengkapnya tentang selector node, lihat Kubernetes labelSelector.

Anda dapat menentukan satu atau beberapa kelompok node saat mengonfigurasi parameter ini.

  • Metode 1

    # Pilih node dalam satu kelompok node.
    nodeSelector:
      matchLabels:
        alibabacloud.com/nodepool-id: nodepool-1
  • Metode 2

    # Pilih node dalam beberapa kelompok node.
    nodeSelector:
      matchExpressions:
      - key: alibabacloud.com/nodepool-id
        operator: In
        values:
        - node-pool1
        - node-pool2

maxNoOfPodsToEvictPerNode

int

≥ 0 (Nilai default: 0)

Batasi jumlah maksimum Pod yang dapat diusir secara bersamaan pada satu node. Parameter ini berlaku selama penjadwalan ulang.

10

maxNoOfPodsToEvictPerNamespace

int

≥ 0 (Nilai default: 0)

Batasi jumlah maksimum Pod yang dapat diusir secara bersamaan dalam satu namespace. Parameter ini berlaku selama penjadwalan ulang.

10

Konfigurasi templat

Koordinator Descheduler menggunakan templat penjadwalan ulang untuk mengelola kebijakan penjadwalan ulang dan pengusir Pod. Anda dapat mendefinisikan satu atau beberapa templat penjadwalan ulang dalam field DeschedulerConfiguration profiles. Dalam setiap templat penjadwalan ulang, kebijakan penjadwalan ulang dan pengusir Pod dikonfigurasi sebagai plugin. Templat penjadwalan ulang terdiri dari bagian-bagian berikut:

  • name

    Nilainya berupa string. Anda dapat menyesuaikan nama templat penjadwalan ulang.

  • plugins

    Konfigurasikan kebijakan penjadwalan ulang (deschedule, balance) yang ingin Anda aktifkan atau nonaktifkan, plugin pengusiran Pod (evict), dan kebijakan filter yang akan digunakan sebelum pengusiran Pod (filter). Tabel berikut menjelaskan parameter yang dapat Anda konfigurasi.

    Parameter

    Tipe

    Nilai valid

    Deskripsi

    Contoh

    deschedule

    Struktur dalam format berikut:

    type PluginList struct {
        Enabled  []Plugin
        Disabled []Plugin
    }
    
    type Plugin struct {
        Name string
    }

    Enabled dan Disabled adalah daftar struktur Plugin, yang menunjukkan plugin yang akan diaktifkan dan dinonaktifkan.

    Semua plugin dinonaktifkan secara default. Anda dapat menentukan kebijakan penjadwalan ulang Deschedule yang akan diaktifkan.

    plugins:
      deschedule: 
        enabled:
          - name: PodLifeTime 
          - name: RemovePodsViolatingNodeTaints  

    RemovePodsViolatingInterPodAntiAffinity

    Kebijakan ini mengusir Pod yang tidak sesuai dengan aturan anti-afinitas antar-Pod.

    RemovePodsViolatingNodeAffinity

    Kebijakan ini mengusir Pod yang tidak sesuai dengan aturan afinitas node.

    RemovePodsViolatingNodeTaints

    Kebijakan ini mengusir Pod yang tidak dapat mentolerir taint node.

    RemovePodsHavingTooManyRestarts

    Kebijakan ini mengusir Pod yang sering restart.

    PodLifeTime

    Kebijakan ini mengusir Pod yang TTL-nya telah kedaluwarsa.

    RemoveFailedPod

    Kebijakan ini mengusir Pod yang berada dalam status Failed.

    balance

    Struktur dalam format berikut:

    type PluginList struct {
        Enabled  []Plugin
        Disabled []Plugin
    }
    
    type Plugin struct {
        Name string
    }

    Enabled dan Disabled adalah daftar struktur Plugin, yang menunjukkan plugin yang akan diaktifkan dan dinonaktifkan.

    Semua plugin dinonaktifkan secara default. Tentukan kebijakan penjadwalan ulang Balance yang akan diaktifkan.

    plugins:
      balance: 
        enabled:
          - name: RemoveDuplicates 
          - name: LowNodeLoad

    RemoveDuplicates

    Menyebarkan Pod replikasi.

    LowNodeUtilization

    Menyebar hotspot berdasarkan alokasi sumber daya node.

    HighNodeUtilization

    Mengagregasi beban berdasarkan alokasi sumber daya node. Pod dimigrasikan dari node dengan pemanfaatan sumber daya rendah ke node dengan pemanfaatan sumber daya tinggi jika kebijakan mengizinkannya.

    RemovePodsViolatingTopologySpreadConstraint

    Mengusir Pod yang tidak sesuai dengan batasan distribusi topologi.

    LowNodeLoad

    Menyebar hotspot berdasarkan pemanfaatan sumber daya node.

    evict

    Struktur dalam format berikut:

    type PluginList struct {
        Enabled  []Plugin
        Disabled []Plugin
    }
    
    type Plugin struct {
        Name string
    }

    Enabled dan Disabled adalah daftar struktur Plugin. Anda dapat mengaktifkan plugin dalam daftar Enabled dan menonaktifkan plugin dalam daftar Disabled.

    • MigrationController

    • DefaultEvictor

    Pengusir Pod yang Anda pilih untuk diaktifkan. MigrationController diaktifkan secara default.

    Jangan mengaktifkan beberapa plugin evict secara bersamaan.

    plugins:
      evict: 
        enabled: 
          - name: MigrationController

    filter

    Struktur dalam format berikut:

    type PluginList struct {
        Enabled  []Plugin
        Disabled []Plugin
    }
    
    type Plugin struct {
        Name string
    }

    Enabled dan Disabled adalah daftar struktur Plugin. Anda dapat mengaktifkan plugin dalam daftar Enabled dan menonaktifkan plugin dalam daftar Disabled.

    • MigrationController

    • DefaultEvictor

    Pilih kebijakan pemfilteran pengusiran yang akan digunakan sebelum pengusiran Pod. MigrationController diaktifkan secara default.

    Jangan mengaktifkan beberapa plugin filter secara bersamaan.

    plugins:
      filter: 
        enabled: 
          - name: MigrationController
  • pluginConfig

    Konfigurasikan parameter lanjutan untuk setiap plugin. Tentukan nama plugin yang ingin Anda konfigurasi dengan mengatur field name. Untuk informasi selengkapnya tentang cara mengonfigurasi plugin dalam field args, lihat Konfigurasi plugin kebijakan dan Konfigurasi plugin pengusir.

  • nodeSelector

    Batasi cakupan templat penjadwalan ulang. Kebijakan penjadwalan ulang yang dikonfigurasi dalam templat hanya berlaku pada node yang ditentukan oleh selector node. Untuk informasi selengkapnya, lihat Kubernetes labelSelector. Jika field ini tidak ditentukan, templat berlaku pada semua node secara default.

    Catatan

    Field nodeSelector dalam konfigurasi templat hanya didukung pada komponen ack-koordinator versi v1.6.1-ack.1.16 dan yang lebih baru.

Konfigurasi plugin kebijakan

Koordinator Descheduler mendukung enam plugin kebijakan Deschedule dan lima plugin kebijakan Balance. Plugin LowNodeLoad disediakan oleh Koordinator. Untuk informasi selengkapnya, lihat Bekerja dengan penjadwalan ulang hotspot berbasis kesadaran beban. Plugin penjadwalan ulang berikut disediakan oleh Kubernetes Descheduler:

Tipe kebijakan

Fitur kebijakan

Pengaturan kebijakan

Deschedule

Kebijakan ini mengusir Pod yang tidak sesuai dengan aturan anti-afinitas antar-Pod.

RemovePodsViolatingInterPodAntiAffinity

Kebijakan ini mengusir Pod yang tidak sesuai dengan aturan afinitas node.

RemovePodsViolatingNodeAffinity

Kebijakan ini mengusir Pod yang tidak dapat mentolerir taint node.

RemovePodsViolatingNodeTaints

Kebijakan ini mengusir Pod yang sering restart.

RemovePodsHavingTooManyRestarts

Kebijakan ini mengusir Pod yang TTL-nya telah kedaluwarsa.

PodLifeTime

Kebijakan ini mengusir Pod yang berada dalam status Failed.

RemoveFailedPod

Balance

Menyebarkan Pod replikasi.

RemoveDuplicates

Menyebar hotspot berdasarkan alokasi sumber daya node.

LowNodeUtilization

Mengagregasi beban berdasarkan alokasi sumber daya node.

HighNodeUtilization

Mengusir Pod yang tidak sesuai dengan batasan distribusi topologi.

RemovePodsViolatingTopologySpreadConstraint

Konfigurasi plugin pengusir

Koordinator Descheduler mendukung kedua plugin pengusir DefaultEvictor dan MigrationController.

MigrationController

Tabel berikut menjelaskan konfigurasi lanjutan plugin pengusir MigrationController.

Parameter

Tipe

Nilai valid

Deskripsi

Contoh

evictLocalStoragePods

boolean

  • true

  • false (nilai default)

Tentukan apakah Pod yang dikonfigurasi dengan emptyDir atau hostPath dapat dijadwalkan ulang. Untuk alasan keamanan, parameter ini dinonaktifkan secara default.

false

maxMigratingPerNode

int64

≥ 0 (nilai default: 2)

Jumlah maksimum Pod yang dapat dimigrasikan secara bersamaan pada satu node. Nilai 0 menunjukkan tidak ada batasan.

2

maxMigratingPerNamespace

int64

≥ 0 (Nilai default: 0)

Jumlah maksimum Pod yang dapat dimigrasikan secara bersamaan dalam satu namespace. Nilai 0 menunjukkan tidak ada batasan.

1

maxMigratingPerWorkload

intOrString

≥ 0 (Nilai default: 10%)

Jumlah atau persentase maksimum Pod yang dapat dimigrasikan secara bersamaan dalam satu beban kerja, seperti Deployment. Nilai 0 menunjukkan tidak ada batasan.

Jika beban kerja hanya berisi satu Pod replikasi, beban kerja tersebut dikecualikan dari penjadwalan ulang.

1 atau 10%

maxUnavailablePerWorkload

intOrString

Sama dengan atau lebih besar dari 0 (Nilai default: 10%) dan lebih kecil dari jumlah Pod replikasi beban kerja

Jumlah atau persentase maksimum Pod replikasi yang tidak tersedia yang diizinkan dalam satu beban kerja, seperti Deployment. Nilai 0 menunjukkan tidak ada batasan.

1 atau 10%

objectLimiters.workload

Struktur dalam format berikut:

type MigrationObjectLimiter struct {
    Duration time.Duration `json:"duration,omitempty"`
    MaxMigrating *intstr.IntOrString `json:"maxMigrating,omitempty"`
}
  • Nilai valid Duration: > 0 (Nilai default: 5m)

  • Nilai valid MaxMigrating: ≥ 0 (Nilai default: 10%)

Kontrol migrasi Pod spesifik beban kerja.

  • Duration: menentukan jendela waktu. Misalnya, 5m berarti 5 menit.

  • MaxMigrating: Jumlah atau persentase maksimum Pod replikasi yang dapat dimigrasikan secara bersamaan. Atur nilainya sebagai bilangan bulat atau nilai persentase. Secara default, digunakan nilai maxMigratingPerWorkload.

objectLimiters:
  workload:
    duration: 5m
    maxMigrating: 1

Contoh ini menunjukkan bahwa hanya satu Pod replikasi yang dapat dimigrasikan dalam waktu 5 menit dalam satu beban kerja.

evictionPolicy

string

Mode berikut didukung:

  • Eviction (default)

  • Delete

  • Soft

  • Eviction: Memanggil API Eviction untuk memigrasikan Pod secara graceful tanpa gangguan bisnis.

  • Delete: Memanggil API Delete untuk menghapus Pod.

  • Soft: Menambahkan anotasi scheduling.koordinator.sh/soft-eviction ke Pod. Anda dapat mengontrol operasi pengusiran selanjutnya pada Pod menggunakan anotasi ini.

Eviction

DefaultEvictor

Plugin DefaultEvictor disediakan oleh Kubernetes Descheduler. Untuk informasi selengkapnya, lihat DefaultEvictor.

Perbandingan

Tabel berikut membandingkan kemampuan pengusiran Pod antara DefaultEvictor dan MigrationController.

Item

DefaultEvictor

MigrationController

Metode pengusiran

Memanggil API Eviction untuk mengusir Pod.

Beberapa metode pengusiran didukung. Untuk informasi selengkapnya, lihat .

Batas pengusiran

  • Jumlah maksimum Pod yang dapat dimigrasikan secara bersamaan pada satu node dapat dibatasi.

  • Jumlah maksimum Pod yang dapat dimigrasikan secara bersamaan dalam satu namespace dapat dibatasi.

  • Jumlah maksimum Pod yang dapat dimigrasikan secara bersamaan pada satu node dapat dibatasi.

  • Jumlah maksimum Pod yang dapat dimigrasikan secara bersamaan dalam satu namespace dapat dibatasi.

  • Jumlah maksimum Pod yang dapat dimigrasikan secara bersamaan untuk satu beban kerja dapat dibatasi.

  • Jumlah atau persentase maksimum Pod replikasi yang tidak tersedia per beban kerja dapat dibatasi.

Throttling pengusiran

Tidak didukung

Mengadopsi mekanisme throttling berbasis jendela waktu untuk memastikan Pod yang termasuk dalam beban kerja yang sama tidak sering dimigrasikan.

Pengamatan pengusiran

Log komponen dapat digunakan untuk melihat informasi pengusiran Pod.

  • Log komponen dapat digunakan untuk melihat informasi pengusiran Pod.

  • Event dapat digunakan untuk mengamati proses migrasi selama penjadwalan ulang dan melihat alasan spesifik serta status saat ini migrasi dalam detail event.

Referensi