Cara Membersihkan Pekerjaan Kubernetes Lama

  • Post author:
  • Post category:Tutorial

 

Kubernetes membuat Pod berulang kali hingga sejumlah container tertentu berhasil dihentikan. Pekerjaan sering digunakan dengan mekanisme CronJob tingkat yang lebih tinggi yang secara otomatis memulai Pekerjaan baru pada jadwal yang berulang.

Penggunaan Pekerjaan dan CronJob secara teratur biasanya menyebabkan sejumlah besar objek tertinggal di klaster Anda. Pekerjaan dan Pod mereka sengaja disimpan tanpa batas waktu setelah selesai. Ini agar Anda dapat memeriksa status Pekerjaan dan mengambil lognya di masa mendatang. Namun, terlalu banyak Pekerjaan yang diselesaikan akan mencemari keluaran Kubectl ketika Anda menjalankan perintah seperti kubectl get pods atau kubectl get jobs. Hal ini dapat mempersulit untuk fokus pada aktivitas yang relevan.

Dalam artikel ini kami akan membagikan beberapa metode untuk membersihkan Pekerjaan lama. Anda akan dapat menghapus objek yang berlebihan dari cluster Anda, baik secara otomatis atau sesuai permintaan.

CronJob History Retention Limits

Pembersihan otomatis telah didukung untuk Pekerjaan yang dibuat oleh CronJob sejak Kubernetes v1.6. Metode ini memungkinkan Anda mengonfigurasi ambang penghapusan terpisah untuk Jobs.

yang telah selesai dan yang gagalAktifkan strategi pembersihan dengan menyetel bidang spec.successfulJobsHistoryLimit dan spec.failedJobsHistoryLimit pada objek CronJob Anda:

apiVersion: batch/v1 kind: CronJob metadata: name: demo- cron spec: schedule: “* * * * *” successJobsHistoryLimit: 5 failedJobsHistoryLimit: 10 jobTemplate: spec: template: spec: containers: – name: demo-cron image: busybox:perintah terbaru: [“/bin/sh”, ” -c”, “Pekerjaan selesai!”]

CronJob yang ditunjukkan di atas akan mempertahankan objek Pekerjaan dari 10 pekerjaan terakhir yang gagal, serta lima pekerjaan terakhir yang berhasil.

Anda akan memiliki maksimum 15 Pekerjaan lama di cluster Anda pada waktu tertentu. 15 itu akan dipertahankan tanpa batas waktu. Mereka hanya akan dihapus ketika digantikan oleh Pekerjaan baru yang selesai dengan status yang sama.

Batas riwayat CronJob default diterapkan saat Anda menghilangkan nilai khusus dalam manifes Anda. Kubernetes biasanya mempertahankan tiga pekerjaan yang berhasil dan satu pekerjaan yang gagal. Nilai 0 didukung untuk menghapus Pekerjaan segera setelah selesai, tanpa mempertahankan apapun.

Tugas Selesai TTLs

Job TTL adalah tambahan Kubernetes baru yang menjadi stabil di v1.23. TTL disetel langsung pada objek Job Anda sehingga Anda tidak perlu menggunakan CronJobs. TTL mengarahkan Kubernetes untuk menghapus Job dan Pod-nya setelah waktu yang ditentukan berlalu, terlepas dari status penyelesaian Job.

Anda dapat mengaktifkan mekanisme ini dengan menyetel field spec.ttlSecondsAfterFinished pada objek Job Anda:

apiVersion: batch/v1 kind: Job metadata: nama: demo-job spec: ttlSecondsAfterFinished: 300 template: spec: container: – nama: demo-cron image: busybox:perintah terbaru: [“/bin/sh”, “-c”, “Pekerjaan selesai!”]

Jika Pekerjaan Anda ditetapkan sebagai bagian dari CronJob, pastikan Anda membuat sarang di dalam jobTemplate:

apiVersion: batch/v1 kind: CronJob metadata: name: demo-cron spec: schedule: “* * * * *” jobTemplate: spec: ttlSecondsAfterFinished: 300 templat: spesifikasi: wadah: – nama: demo-cron image: busybox:perintah terbaru: [“/bin/sh”, “-c”, “Pekerjaan selesai!”]

Contoh di atas akan menandai Pekerjaan sebagai memenuhi syarat untuk penghapusan lima menit (300 detik) setelah mereka selesai. Hal ini terjadi terlepas dari apakah Pekerjaan berakhir dalam status Selesai atau Gagal.

Penghapusan berdasarkan mekanisme ini dikelola oleh pengontrol khusus di dalam kluster Anda. Pengontrol memantau objek Pekerjaan, mendeteksi ketika TTL telah kedaluwarsa, dan kemudian mengambil tindakan untuk membersihkan Pekerjaan yang terpengaruh dan sumber daya yang bergantung padanya. Mungkin ada penundaan singkat antara TTL kedaluwarsa dan pengontrol masuk untuk memberlakukan penghapusan.

Menyetel TTL Pekerjaan ke 0 akan membuatnya memenuhi syarat untuk dihapus segera setelah selesai. Anda harus mempertimbangkan apakah ini sesuai untuk setiap tugas Anda. Tidak menyimpan riwayat apa pun dapat mempersulit untuk men-debug masalah karena Anda tidak akan dapat mengambil log kontainer.

Bidang ttlSecondsAfterFinished dapat diubah. Anda dapat mengubahnya pada Pekerjaan yang ada kapan saja. Modifikasi tidak dijamin akan memengaruhi eksekusi yang telah dibuat. Memperpanjang TTL Pekerjaan masih dapat menghapus proses yang dijadwalkan saat nilai sebelumnya diterapkan.

Menghapus Pekerjaan Secara Manual

Anda selalu dapat menghapus Pekerjaan secara manual menggunakan Kubectl. Pertama ambil daftar Pekerjaan Anda:

$ kubectl get jobs NAMA PENYELESAIAN DURASI USIA demo-cron-27549499 1/1 2s 36s

Selanjutnya keluarkan perintah hapus pekerjaan dengan nama pekerjaan yang Anda pilih:

$ kubectl delete job demo-cron-27549499 job .batch “demo-cron-27549499” delete

Ini akan menghapus Job dan membersihkan Pod dan objek lain yang terkait dengannya.

Penghapusan Batch Sesuai Permintaan

Anda dapat dengan cepat membersihkan beberapa Job dengan memfilter dengan pemilih bidang. Berikut adalah contoh yang akan menghapus semua pekerjaan yang berhasil di namespace aktif Anda:

$ kubectl delete jobs –field-selector status.successful=1 job.batch “demo-cron-27549501” delete job.batch “demo-cron-27549502” pekerjaan yang dihapus.batch “demo-cron-27549503” delete

Ini jauh lebih sulit daripada menghapus Pekerjaan individu secara berurutan.

Untuk menghapus semua Pekerjaan yang terkait dengan CronJob tertentu, yang terbaik adalah menetapkan label pada Pekerjaan yang mengidentifikasi induk CronJob. Tentukan label menggunakan bidang spec.jobTemplate.metadata.labels CronJob Anda:

apiVersion: batch/v1 kind: CronJob metadata: name: demo-cron spec: schedule: “* * * * *” jobTemplate: metadata: labels: cron-job : demo-cron spec: template: spec: container: – nama: demo-cron image: busybox:perintah terbaru: [“/bin/sh”, “-c”, “Pekerjaan selesai!”]

Anda dapat menghapus Pekerjaan yang dibuat oleh versi demo-cron CronJob menggunakan perintah berikut:

$ kubectl delete jobs -l cron-job=demo-cron job.batch “demo-cron-27549501” delete job.batch “demo-cron-27549502” delete job .batch “demo-cron-27549503” delete

Menggabungkan contoh ini dengan pemilih bidang memungkinkan Anda menghapus demo-cron run yang berada dalam status tertentu:

$ kubectl delete jobs -l cron-job=demo-cron –field-selector status .successful=0 pekerjaan.batch “demo-cron-27549501” pekerjaan yang dihapus.batch “demo-cron-27549502” pekerjaan yang dihapus.batch “demo-cron-27549503” delete

Perintah ini menghapus Pekerjaan yang gagal yang dijadwalkan oleh demo-cron CronJob .nbs pSummary

Kubernetes Pekerjaan biasanya tetap ada di cluster Anda setelah selesai. Perilaku ini memungkinkan Anda mengambil log mereka di waktu mendatang yang sewenang-wenang tetapi dengan cepat menyebabkan akumulasi objek yang berlebihan.

CronJobs hadir dengan batas retensi yang diaktifkan secara default dan mendukung konfigurasi terpisah untuk proses yang berhasil dan gagal. Ini harus menjadi mekanisme pilihan Anda untuk mengelola Pekerjaan terjadwal. Jenis Pekerjaan lain paling baik dikonfigurasi dengan TTL yang akan secara otomatis membersihkan sumber daya setelah jangka waktu tertentu.

Meskipun Kubernetes secara historis menyimpan Pekerjaan lama tanpa batas waktu, sekarang disarankan agar Anda menggunakan mekanisme TTL sedapat mungkin. Memiliki terlalu banyak Job lama di cluster Anda dapat menyebabkan penurunan performa karena control plane harus memantau objek dan Pod yang telah mereka buat.

Itulah berita seputar Cara Membersihkan Pekerjaan Kubernetes Lama, semoga bermanfaat. Disadur dari HowToGeek.com.