K8s kube-reserved

Referenced by

정의 (Definition)

kube-reserved는 노드에서 Kubernetes 시스템 데몬(kubelet, container runtime, kube-proxy 등)이 사용할 CPU/메모리를 선예약 하여, 해당 자원이 파드 스케줄링에 소비되지 않도록 하는 설정입니다.

문제가 되는 배경 (Problem Context)

노드 자원을 파드가 과도하게 점유하면, 노드 관리/네트워킹을 담당하는 kubelet/런타임이 자원 부족으로 불안정해지고 결국 노드 전체가 NotReady로 전이될 수 있습니다. kube-reserved는 “노드 운영을 위한 최소 몫”을 강제합니다.

핵심 메커니즘 (How it Works)

kubelet 플래그로 예약량을 지정합니다.

--kube-reserved=cpu=200m,memory=512Mi

이 값은 노드의 Allocatable 계산에서 차감 되어, 스케줄러가 파드 배치에 사용할 수 있는 총량이 줄어듭니다. (관련: K8s Node Allocatable)

불변 조건과 보장 범위 (Invariants & Guarantees)

  • 보장: Allocatable 산정에서 kube-reserved만큼은 파드에 “가용”으로 잡히지 않습니다.
  • 비보장: 예약했다고 해서 kubelet/런타임이 항상 안정적이라고 보장할 수는 없습니다(메모리 누수, 디스크 압박, 커널 이슈 등 다른 원인 존재).

비유 (Analogy)

kube-reserved는 건물 관리실(노드 운영)을 위한 필수 유지비(고정비) 를 미리 떼어두는 것에 가깝습니다.

실무적 함의 (Operational Implications)

  • kube-reserved가 너무 작으면 노드 운영 프로세스가 굶고, 너무 크면 워크로드 밀도가 떨어집니다.
  • 예약/축출/시스템 예약은 함께 설계해야 합니다. (관련: K8s 노드 리소스 예약)

주의사항 / 오해 (Pitfalls & Misconceptions)

  • kube-reserved는 “리소스 제한(limit)”이 아니라,Allocatable에서의 차감 입니다.
  • 노드 압박을 막는 것은 kube-reserved 하나로 끝나지 않으며 eviction threshold 등과 조합이 필요합니다.

References