นี่คือ 'kube-depod' เครื่องมือล้าง K8s Pod อัตโนมัติที่ผมสร้างขึ้น (รองรับ CEL และ PDB)
(github.com/mrchypark)สวัสดีครับ เวลาต้องดูแล K8s คลัสเตอร์ มักจะเจอกับพ็อดที่ติด CrashLoopBackOff, พ็อดที่อยู่ในสถานะ ImagePullBackOff หรือพ็อดที่ปล่อยทิ้งไว้หลังงานแบตช์จบแล้วในสถานะ Succeeded หรือ Failed จนทำให้ระบบรกอยู่บ่อยครั้ง
เพื่อแก้ปัญหาที่พ็อดเหล่านี้เปลืองทรัพยากรและรบกวนการมอนิเตอร์ ผมจึงพัฒนา K8s Operator แบบ Rust ชื่อ 'kube-depod' ขึ้นมา
kube-depod ไม่ใช่แค่ตัวล้าง TTL ธรรมดา แต่ถูกออกแบบโดยเน้น ความยืดหยุ่น และ ความปลอดภัย
🚀 ฟีเจอร์หลัก
1. เอนจินนโยบาย CEL ที่ทรงพลัง
ไม่ใช่แค่ลบพ็อดที่ "ผ่านไป 10 นาที" เท่านั้น แต่สามารถสร้างนโยบายที่ละเอียดกว่านั้นมากด้วย CEL (Common Expression Language)
# ตัวอย่าง: ลบเฉพาะพ็อด CrashLoopBackOff ที่มีจำนวนรีสตาร์ตตั้งแต่ 5 ครั้งขึ้นไป
when:
type: "CEL"
expression: |
status.containerStatuses.exists(c,
has(c.state.waiting) &&
c.state.waiting.reason == 'CrashLoopBackOff' &&
c.restartCount >= 5
)
(รองรับตัวแปรหลากหลาย เช่น age, status.phase เป็นต้น)
2. แนวทางแบบ 'Opt-In' เพื่อป้องกันอุบัติเหตุ
kube-depod ไม่ได้เฝ้าดูทุกพ็อดในคลัสเตอร์ แต่จะพิจารณาจัดการเฉพาะพ็อดที่ผู้ใช้ใส่ annotation อย่างชัดเจน เช่น kube-depod/policy: "my-policy" (Opt-In) เท่านั้น ซึ่งช่วยป้องกันการลบพ็อดสำคัญโดยไม่ตั้งใจได้ตั้งแต่ต้น
3. กลไกความปลอดภัยสำหรับโปรดักชัน
- รองรับ PDB: รองรับแอ็กชัน
EvictแทนDeleteเพื่อให้ลบพ็อดได้อย่างปลอดภัยโดยเคารพ Pod Disruption Budget (PDB) - DryRun: สามารถทดสอบได้อย่างปลอดภัยด้วย
dryRun: trueเพื่อดูว่านโยบายจะทำงานอย่างไร - การจำกัดอัตรา (Rate Limiting): จำกัดจำนวนการลบต่อนาทีเพื่อป้องกัน API server ทำงานหนักเกินไปหรือคลัสเตอร์ไม่เสถียร
- ปกป้อง system namespace: โดยค่าเริ่มต้นจะปกป้องเนมสเปซสำคัญอย่าง
kube-system
4. ประสิทธิภาพสูงและการสังเกตการณ์ที่ยอดเยี่ยม
- เขียนด้วย Rust และใช้ Distroless image จึงมีขนาดเบาและทำงานได้รวดเร็ว
- ใช้
ArcSwap(policy cache แบบไม่ใช้ล็อก),DashMap(CEL compile cache) ฯลฯ เพื่อมุ่งสู่ประสิทธิภาพสูง - สามารถดีบักสถานะการทำงานได้ง่ายผ่าน Prometheus metrics และฟีดแบ็กจาก CRD Status (เช่น
InvalidCEL)
แม้จะมีเครื่องมือแนวนี้อยู่หลายตัว แต่เครื่องมือที่เน้นความยืดหยุ่นของ CEL การรองรับ PDB และการออกแบบแบบ Opt-In เพื่อความปลอดภัยในการใช้งานจริงนั้นยังพบได้ไม่มาก
มี Helm chart เตรียมไว้ให้แล้ว จึงติดตั้งได้ง่าย
หวังว่าจะเป็นประโยชน์กับผู้ที่อยากจัดการ K8s คลัสเตอร์ให้สะอาดและมีประสิทธิภาพมากขึ้น
GitHub repository: https://github.com/mrchypark/kube-depod
ยินดีรับความสนใจและฟีดแบ็กเสมอครับ ขอบคุณครับ!
ยังไม่มีความคิดเห็น