สวัสดีครับ เวลาต้องดูแล 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

ยินดีรับความสนใจและฟีดแบ็กเสมอครับ ขอบคุณครับ!

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น