K8s 메모리 매니저
Referenced by
정의 (Definition)
Kubelet의 Memory Manager 는 (Topology Manager와 연계하여) 주로 NUMA 환경에서 Guaranteed QoS 파드에 대해 더 예측 가능한 메모리/hugepage 할당 힌트와 배치를 제공 하는 컴포넌트이며, 모든 파드에 동일하게 적용되는 일반 메모리 보호 기능은 아닙니다.
문제가 되는 배경 (Problem Context)
NUMA 노드가 있는 서버에서는 “어디에 메모리가 붙는지”에 따라 지연과 성능 편차가 커집니다. 또한 hugepage 같은 특수 메모리는 단편화/가용성 이슈로 런타임 실패가 발생할 수 있습니다. Memory Manager는 이런 불확실성을 줄이기 위한 노드-로컬 컴포넌트입니다.
핵심 메커니즘 (How it Works)
- Memory Manager는 Topology Manager 정책과 결합해, 컨테이너 생성 시점에 “선호 NUMA 노드/메모리 자원” 힌트를 계산합니다.
- 적용 대상은 기본적으로 Guaranteed QoS 로 제한되는 경우가 많습니다. (관련: K8s QoS 클래스)
불변 조건과 보장 범위 (Invariants & Guarantees)
- 보장: Memory Manager는 “메모리 배치의 예측 가능성/지역성”을 개선하는 방향으로 동작합니다.
- 비보장: Burstable/BestEffort까지 동일한 품질을 보장하지 않습니다.
비유 (Analogy)
Memory Manager는 “좌석 배치(메모리 위치)”를 VIP(Guaranteed)에게 우선 배정해, 이동(메모리 접근)이 덜 불편하도록 하는 운영자에 가깝습니다.
실무적 함의 (Operational Implications)
- NUMA가 있는 노드에서 지연/성능 편차를 줄여야 하는 워크로드는 Guaranteed 설계(요청=제한)까지 포함해 검토해야 합니다.
- 단순히 메모리 limit 문제(OOM) 해결용으로 Memory Manager를 기대하면 목적이 어긋납니다.
주의사항 / 오해 (Pitfalls & Misconceptions)
- Memory Manager는 “메모리 request 보호”와 동일하지 않습니다(그 역할은 MemoryQoS 방향). (관련: K8s MemoryQoS)
- 대상 QoS가 Guaranteed가 아니면 기대한 효과가 제한될 수 있습니다.
References
- Kubernetes Docs: Memory Manager
- Related Note: K8s QoS 클래스