# Show GN: 제가 만든 K8s Pod 자동 정리기 'kube-depod' 입니다. (CEL 기반, PDB 지원)

> Clean Markdown view of GeekNews topic #24431. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=24431](https://news.hada.io/topic?id=24431)
- GeekNews Markdown: [https://news.hada.io/topic/24431.md](https://news.hada.io/topic/24431.md)
- Type: show
- Author: [mrchypark](https://news.hada.io/@mrchypark)
- Published: 2025-11-18T01:24:38+09:00
- Updated: 2025-11-18T01:24:38+09:00
- Original source: [github.com/mrchypark](https://github.com/mrchypark/kube-depod)
- Points: 5
- Comments: 0

## Summary

K8s 운영 중 쌓여가는 **CrashLoopBackOff**나 **ImagePullBackOff** 팟을 자동으로 정리해주는 **Rust 기반 오퍼레이터 ‘kube-depod’**가 공개되었습니다. 단순 TTL 삭제기가 아니라 **CEL 정책 엔진**을 통해 조건 기반 제어가 가능하고, **Opt-In 설계**로 중요한 팟을 실수로 지우는 사고를 방지합니다. 또한 **PDB(Evict 지원)**, **DryRun**, **속도 제한**, **Prometheus 메트릭** 등 운영 환경을 고려한 세심한 기능이 돋보입니다. 클러스터를 깔끔하게 유지하면서도 제어권을 놓치고 싶지 않은 DevOps 엔지니어에게 특히 매력적인 도구입니다.

## Topic Body

안녕하세요, K8s 클러스터를 운영하다 보면 `CrashLoopBackOff`에 걸린 팟, `ImagePullBackOff` 상태인 팟, 혹은 배치가 끝나고 `Succeeded`나 `Failed`로 방치된 팟들 때문에 지저분해지는 경우가 많습니다.  
  
이런 팟들이 리소스를 낭비하고 모니터링을 방해하는 문제를 해결하기 위해, \*\*Rust 기반의 K8s 오퍼레이터 'kube-depod'\*\*를 개발했습니다.  
  
`kube-depod`는 단순한 TTL 클리너가 아닙니다. **유연함**과 **안전성**에 초점을 맞췄습니다.  
  
-----  
  
##### 🚀 핵심 기능  
  
**1. 강력한 CEL 정책 엔진**  
단순히 "10분 지난" 팟이 아니라, CEL(Common Expression Language)을 통해 훨씬 정교한 정책을 만들 수 있습니다.  
  
```yaml  
# 예: 재시작 횟수가 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`  
  
관심과 피드백은 언제나 환영합니다! 감사합니다.

## Comments



_No public comments on this page._
