K8s 파드 축출(Eviction) 정책
Referenced by
정의 (Definition)
파드 축출(Eviction) 정책은 노드가 리소스 압박 상태에 진입하기 전에, kubelet이 파드를 선제적으로 제거(evict) 하도록 하는 임계값(threshold)과 동작 규칙이며, 커널 OOM Killer의 “사후 처치”를 대체하지는 않습니다.
문제가 되는 배경 (Problem Context)
노드 메모리가 고갈되면 커널 OOM Killer가 프로세스를 종료합니다. 이 방식은 “누가 죽는지”가 워크로드 관점에서 예측 가능하지 않을 수 있고, 노드 자체가 불안정해질 수 있습니다. kubelet의 eviction은 노드를 보호하기 위해 노드 레벨에서 파드를 정리하는 통제면 입니다.
핵심 메커니즘 (How it Works)
일반적으로 --eviction-hard, --eviction-soft로 임계값을 지정합니다.
설정 예시
--eviction-hard=memory.available<500Mi,nodefs.available<10%
--eviction-soft=memory.available<1GiHard Eviction vs Soft Eviction
| 종류 | 설명 | 동작 시점 |
|---|---|---|
| Hard Eviction | 임계값에 도달하면 즉시 파드를 축출합니다. | 즉시 Evict |
| Soft Eviction | 설정된 유예 시간(--eviction-soft-grace-period) 동안 임계값 이하로 유지될 경우 파드를 축출합니다. | 완화된 보호 |
축출 대상은 일반적으로 QoS/우선순위 등에 따라 결정되며(관련: K8s QoS 클래스), eviction은 Allocatable 산정 및 리소스 예약과 함께 설계됩니다(관련: K8s Node Allocatable).
공식 문서 설명
Node-pressure Eviction protects the node from running out of resources by preemptively evicting Pods. (출처: Kubernetes Docs – Node-pressure Eviction)
불변 조건과 보장 범위 (Invariants & Guarantees)
- 보장: 임계값에 도달하면 kubelet은 축출을 시도합니다.
- 비보장: eviction이 항상 OOM을 “완전히 방지”하지는 못합니다(압박이 너무 급격하거나, 회수/축출로 회복되지 않는 경우 커널 OOM으로 이어질 수 있음).
비유 (Analogy)
eviction은 “건물 전체 정전(커널 OOM)”을 막기 위해, 먼저 일부 구역의 차단기를 내리는 부하 차단(load shedding) 에 가깝습니다.
실무적 함의 (Operational Implications)
- 임계값은 노드 타입/워크로드 특성(버스트, 캐시, 디스크 사용)과 함께 산정해야 합니다.
- eviction이 잦다면, request/limit·노드 예약·노드 사이징·QoS 설계가 함께 점검 대상입니다.
주의사항 / 오해 (Pitfalls & Misconceptions)
- eviction은 파드의 “정상 종료”가 아니라 강제 축출 이며, 워크로드는 이를 견딜 수 있어야 합니다(재시작, 데이터 내구성 등).
- “eviction을 강하게 걸면 안전하다”는 단순화는 위험합니다. 서비스 가용성과 비용/밀도 사이의 트레이드오프입니다.
References
- Kubernetes Docs: Node-pressure Eviction
- Related Note: K8s 노드 리소스 예약
- Related Note: K8s Node Allocatable
- Related Note: K8s QoS 클래스