Saat sumber daya kluster terbatas, task berprioritas tinggi mungkin gagal dijalankan karena sumber daya tidak mencukupi. Setelah preemption diaktifkan, ACK Scheduler mensimulasikan ketersediaan sumber daya dan menghentikan tugas Pod berprioritas rendah untuk membebaskan sumber daya komputasi sehingga task berprioritas tinggi dapat segera dimulai.
Sebelum Anda mulai
Baca Pod priority and preemption untuk memahami PriorityClass, priorityClassName, dan cara prioritas Pod memengaruhi urutan penjadwalan serta penghentian tugas.
Cara kerja preemption
Saat preemption diaktifkan, ACK Scheduler mengikuti prosedur berikut:
Tentukan prioritas task: Tambahkan
priorityClassNameke konfigurasi Pod.Komponen sistem seperti kube-proxy dan etcd biasanya menggunakan PriorityClass
system-node-critical. Sebagian besar dijalankan sebagai DaemonSet dan secara default tidak dihentikan tugasnya.Simulasikan preemption: Saat ACK Scheduler mendeteksi Pod yang tertunda dan tidak dapat dijadwalkan, ia mensimulasikan apakah menghentikan tugas Pod berprioritas rendah akan membebaskan sumber daya yang cukup.
Hentikan tugas Pod berprioritas rendah secara aman: Setelah ACK Scheduler memicu preemption, kubelet menghentikan tugas Pod yang telah diidentifikasi, sehingga melepaskan sumber daya untuk Pod berprioritas tinggi.
Jadwalkan ulang Pod yang dihentikan tugasnya: Controller seperti Deployment membuat ulang Pod yang dihentikan tugasnya dan menjadwalkannya ke node lain. Jika sumber daya tetap tidak mencukupi, Pod tersebut tetap dalam status tertunda.
Kebijakan preemption
ACK Scheduler mendukung kebijakan preemption berikut, yang dapat dikonfigurasi menggunakan parameter PreemptionAlgorithm.
Kebijakan | Deskripsi |
Default | Kebijakan preemption Kubernetes default. Mencoba penjadwalan langsung terlebih dahulu, lalu mensimulasikan penghentian tugas Pod berprioritas rendah saat sumber daya tidak mencukupi. Lihat Pod priority and preemption. |
ElasticQuota | Menjalankan preemption berdasarkan ElasticQuotaTree. Lihat Detail kebijakan ElasticQuota. |
Auto | Memprioritaskan ElasticQuota dan menggunakan kembali kebijakan Default jika ElasticQuota tidak berlaku. |
None | Menonaktifkan preemption. |
Gambar berikut menunjukkan cara kebijakan tersebut diterapkan.
Detail kebijakan ElasticQuota
Saat kebijakan ElasticQuota aktif, ACK Scheduler menjalankan preemption dalam tiga langkah:
Identifikasi daftar preemption: Berbeda dengan task biasa, ACK Scheduler menggabungkan semua Pod yang tertunda dalam satu gang menjadi satu daftar preemption. Gang hanya diproses jika semua Pod-nya dapat dijadwalkan melalui preemption. Jika salah satu Pod memiliki prioritas tinggi, seluruh gang dianggap berprioritas tinggi.
Identifikasi node yang layak: ACK Scheduler menentukan node kandidat:
Jika beberapa Pod dalam gang memerlukan preemption, setiap node yang cocok dengan satu Pod ditambahkan ke kumpulan kandidat. ACK Scheduler kemudian membebaskan sumber daya untuk Pod sisanya.
Jika hanya satu Pod yang memerlukan preemption, ACK Scheduler menyaring node Unschedulable untuk mengidentifikasi node dengan sumber daya yang tidak mencukupi atau tidak sesuai.
Simulasikan preemption: ACK Scheduler menyaring Pod yang memenuhi syarat preemption dari node yang layak. Sebuah Pod memenuhi syarat jika kedua kondisi berikut terpenuhi:
Pod tersebut tidak sedang di-preempt oleh Pod atau task lain.
Pod tersebut dapat dihentikan tugasnya sesuai dengan PodDisruptionBudgets (PDBs) yang relevan.
ACK Scheduler kemudian menerapkan aturan ElasticQuotaTree:
Jika Pod yang melakukan preemption termasuk dalam suatu Quota:
Jika penggunaan Quota saat ini berada pada atau di bawah jaminan
Min-nya: Pod tersebut dapat melakukan preemption terhadap Pod dari Quota lain yang menggunakan sumber daya di atas jaminanMin-nya.Jika penggunaan Quota saat ini melebihi jaminan
Min-nya: Pod tersebut hanya dapat melakukan preemption terhadap Pod berprioritas lebih rendah dalam Quota-nya sendiri (preemption intra-quota).
Jika Pod yang melakukan preemption tidak termasuk dalam Quota mana pun: Preemption tidak diizinkan.
Setelah mengidentifikasi Pod yang akan di-preempt, ACK Scheduler mensimulasikan penghapusannya dan menjadwalkan ulang Pod yang melakukan preemption. Jika simulasi berhasil, Pod tersebut dihentikan tugasnya dan dijadwalkan ulang. Jika gagal, preemption dihentikan.
Aktifkan preemption
Sesuaikan parameter scheduler dan atur preemptionAlgorithm ke Default, ElasticQuota, Auto, atau None. Nilai default-nya adalah Auto.
Langkah selanjutnya
Work with gang scheduling — Cara gang scheduling berinteraksi dengan preemption ElasticQuota.
Improve resource utilization with ElasticQuotaTree and task queues — Menentukan batas kuota untuk preemption ElasticQuota.
Pod priority and preemption — Referensi Kubernetes untuk PriorityClass dan preemption.
PodDisruptionBudgets — Melindungi beban kerja kritis dari penghentian tugas selama preemption.