Ini adalah pembersih otomatis Pod K8s yang saya buat, 'kube-depod'. (berbasis CEL, mendukung PDB)
(github.com/mrchypark)Halo, saat mengoperasikan klaster K8s, sering kali lingkungan menjadi berantakan karena pod yang terjebak di CrashLoopBackOff, pod dengan status ImagePullBackOff, atau pod yang dibiarkan setelah batch selesai dengan status Succeeded atau Failed.
Untuk mengatasi masalah pod-pod seperti ini yang membuang resource dan mengganggu monitoring, saya mengembangkan operator K8s berbasis Rust, 'kube-depod'.
kube-depod bukan sekadar pembersih TTL sederhana. Fokusnya adalah pada fleksibilitas dan keamanan.
馃殌 Fitur utama
1. Mesin kebijakan CEL yang kuat
Bukan hanya pod yang "sudah lewat 10 menit", Anda bisa membuat kebijakan yang jauh lebih rinci melalui CEL (Common Expression Language).
# Contoh: hapus hanya pod CrashLoopBackOff dengan jumlah restart 5 kali atau lebih
when:
type: "CEL"
expression: |
status.containerStatuses.exists(c,
has(c.state.waiting) &&
c.state.waiting.reason == 'CrashLoopBackOff' &&
c.restartCount >= 5
)
(Mendukung berbagai variabel seperti age, status.phase, dan lainnya.)
2. Pendekatan 'Opt-In' untuk mencegah insiden
kube-depod tidak memantau semua pod di klaster. Hanya pod yang secara eksplisit ditambahkan anotasi seperti kube-depod/policy: "my-policy" oleh pengguna (Opt-In) yang dianggap sebagai target pembersihan. Ini mencegah insiden penghapusan pod penting secara tidak sengaja sejak awal.
3. Pengaman untuk production
- Dukungan PDB: Mendukung aksi
Evictalih-alihDelete, sehingga pod dapat dihapus dengan aman sambil tetap menghormati Pod Disruption Budget (PDB). - DryRun: Anda dapat menguji dengan aman bagaimana kebijakan akan bekerja menggunakan
dryRun: true. - Pembatasan laju (Rate Limiting): Membatasi jumlah penghapusan per menit untuk mencegah beban berlebih pada API server atau ketidakstabilan klaster.
- Perlindungan namespace sistem: Namespace inti seperti
kube-systemdilindungi secara default.
4. Performa tinggi dan observabilitas yang sangat baik
- Ditulis dengan Rust dan menggunakan image Distroless sehingga ringan dan cepat.
- Mengejar performa tinggi dengan memanfaatkan
ArcSwap(cache kebijakan tanpa lock),DashMap(cache kompilasi CEL), dan lainnya. - Dengan metrik Prometheus dan umpan balik Status CRD (misalnya
InvalidCEL), status operasional dapat dengan mudah di-debug.
Ada banyak alat serupa, tetapi jarang ada yang berfokus pada keamanan operasional seperti fleksibilitas CEL, dukungan PDB, dan desain Opt-In.
Helm chart juga sudah disiapkan sehingga bisa dipasang dengan mudah.
Saya berharap ini bermanfaat bagi siapa pun yang ingin mengelola klaster K8s dengan lebih bersih dan efisien.
Repositori GitHub: https://github.com/mrchypark/kube-depod
Minat dan masukan selalu saya sambut! Terima kasih.
Belum ada komentar.