안녕하세요, K8s 클러스터를 운영하다 보면 CrashLoopBackOff에 걸린 팟, ImagePullBackOff 상태인 팟, 혹은 배치가 끝나고 SucceededFailed로 방치된 팟들 때문에 지저분해지는 경우가 많습니다.

이런 팟들이 리소스를 낭비하고 모니터링을 방해하는 문제를 해결하기 위해, **Rust 기반의 K8s 오퍼레이터 'kube-depod'**를 개발했습니다.

kube-depod는 단순한 TTL 클리너가 아닙니다. 유연함안전성에 초점을 맞췄습니다.


🚀 핵심 기능

1. 강력한 CEL 정책 엔진
단순히 "10분 지난" 팟이 아니라, CEL(Common Expression Language)을 통해 훨씬 정교한 정책을 만들 수 있습니다.

# 예: 재시작 횟수가 5번 이상인 CrashLoopBackOff 팟만 삭제  
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는 클러스터의 모든 팟을 감시하지 않습니다. 오직 사용자가 kube-depod/policy: "my-policy"와 같은 어노테이션을 명시적으로 추가한 팟(Opt-In)만 정리 대상으로 간주합니다. 실수로 중요한 팟을 삭제하는 사고를 원천 차단합니다.

3. 프로덕션(운영)을 위한 안전장치

  • PDB 지원: Delete 대신 Evict 액션을 지원하여, Pod Disruption Budget(PDB)을 존중하며 팟을 안전하게 제거합니다.
  • DryRun: 정책이 어떻게 동작할지 dryRun: true로 안전하게 테스트할 수 있습니다.
  • 속도 제한 (Rate Limiting): 분당 삭제 횟수를 제한하여 API 서버 과부하나 클러스터 불안정을 방지합니다.
  • 시스템 네임스페이스 보호: kube-system 등 핵심 네임스페이스는 기본적으로 보호합니다.

4. 고성능 및 뛰어난 관측성

  • Rust로 작성되고 Distroless 이미지를 사용하여 가볍고 빠릅니다.
  • ArcSwap (락 없는 정책 캐시), DashMap (CEL 컴파일 캐시) 등을 활용해 고성능을 추구했습니다.
  • Prometheus 메트릭과 CRD Status 피드백(예: InvalidCEL)을 통해 운영 상태를 쉽게 디버깅할 수 있습니다.

비슷한 도구는 많지만, CEL의 유연함과 PDB 지원, Opt-In 설계 등 운영 안전성에 집중한 도구는 드물었습니다.

Helm 차트도 준비되어 있어 쉽게 설치할 수 있습니다.
K8s 클러스터를 더 깨끗하고 효율적으로 관리하고 싶은 분들께 도움이 되길 바랍니다.

GitHub 리포지토리: https://github.com/mrchypark/kube-depod

관심과 피드백은 언제나 환영합니다! 감사합니다.