Show GN: 제가 만든 K8s Pod 자동 정리기 'kube-depod' 입니다. (CEL 기반, PDB 지원)
(github.com/mrchypark)안녕하세요, K8s 클러스터를 운영하다 보면 CrashLoopBackOff에 걸린 팟, ImagePullBackOff 상태인 팟, 혹은 배치가 끝나고 Succeeded나 Failed로 방치된 팟들 때문에 지저분해지는 경우가 많습니다.
이런 팟들이 리소스를 낭비하고 모니터링을 방해하는 문제를 해결하기 위해, **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
관심과 피드백은 언제나 환영합니다! 감사합니다.