5 puntos por mrchypark 2025-11-18 | Aún no hay comentarios. | Compartir por WhatsApp

Hola, al operar un clúster de K8s, es común que termine desordenado por Pods atascados en CrashLoopBackOff, Pods en estado ImagePullBackOff, o Pods de batch que quedaron abandonados en Succeeded o Failed después de terminar.

Para resolver el problema de estos Pods que desperdician recursos y dificultan el monitoreo, desarrollé kube-depod, un operador de K8s basado en Rust.

kube-depod no es un simple limpiador por TTL. Está enfocado en la flexibilidad y la seguridad.


🚀 Funciones principales

1. Potente motor de políticas con CEL
No se limita a Pods de "más de 10 minutos"; con CEL (Common Expression Language) puedes crear políticas mucho más precisas.

# Ejemplo: eliminar solo Pods en CrashLoopBackOff con 5 o más reinicios  
when:  
  type: "CEL"  
  expression: |  
    status.containerStatuses.exists(c,  
      has(c.state.waiting) &&  
      c.state.waiting.reason == 'CrashLoopBackOff' &&  
      c.restartCount >= 5  
    )  

(Admite varias variables como age, status.phase, etc.)

2. Enfoque "Opt-In" para prevenir incidentes
kube-depod no observa todos los Pods del clúster. Solo considera como objetivos de limpieza a los Pods a los que el usuario les haya agregado explícitamente una anotación como kube-depod/policy: "my-policy" (Opt-In). Esto evita de raíz que se eliminen por error Pods importantes.

3. Mecanismos de seguridad para producción

  • Soporte para PDB: admite la acción Evict en lugar de Delete, para respetar el Pod Disruption Budget (PDB) y retirar Pods de forma segura.
  • DryRun: puedes probar con seguridad cómo se comportará una política usando dryRun: true.
  • Limitación de velocidad (Rate Limiting): limita la cantidad de eliminaciones por minuto para evitar sobrecargar el servidor API o desestabilizar el clúster.
  • Protección de namespaces del sistema: namespaces críticos como kube-system están protegidos por defecto.

4. Alto rendimiento y excelente observabilidad

  • Está escrito en Rust y usa imágenes Distroless, por lo que es ligero y rápido.
  • Busca alto rendimiento aprovechando ArcSwap (caché de políticas sin locks), DashMap (caché de compilación CEL) y más.
  • Con métricas de Prometheus y retroalimentación del estado del CRD (por ejemplo, InvalidCEL), es fácil depurar el estado operativo.

Hay muchas herramientas similares, pero eran pocas las que se enfocaban en la seguridad operativa con la flexibilidad de CEL, soporte para PDB y un diseño Opt-In.

También incluye chart de Helm, así que se puede instalar fácilmente.
Espero que sea útil para quienes quieran administrar sus clústeres de K8s de forma más limpia y eficiente.

Repositorio de GitHub: https://github.com/mrchypark/kube-depod

¡Siempre agradezco el interés y los comentarios! Gracias.

Aún no hay comentarios.

Aún no hay comentarios.