K8s 노드 리소스 예약

정의 (Definition)

노드 리소스 예약 은 쿠버네티스 노드가 파드(애플리케이션) 외에도 OS와 Kubernetes 시스템 프로세스를 안정적으로 구동하기 위해,일부 CPU/메모리를 스케줄링 가능 자원(Allocatable)에서 제외 하도록 설정하는 메커니즘입니다.

문제가 되는 배경 (Problem Context)

노드의 모든 자원을 파드가 소비하도록 두면(예: 메모리 누수/버스트), 노드를 운영·관측·복구해야 하는 kubelet/sshd/로깅 데몬이 먼저 자원 부족으로 불안정해질 수 있습니다. 이 경우 노드는 NotReady로 전이하고, 파드 관리 자체가 불가능해지며 장애 반경이 커집니다.

핵심 메커니즘 (How it Works)

노드 리소스 예약은 보통 다음 세 축으로 구성됩니다.

  • Kubernetes 시스템 예약: kube-reserved로 kubelet/런타임 등 K8s 데몬의 몫을 확보 (관련: K8s kube-reserved)
  • OS 시스템 예약: system-reserved로 OS 데몬의 몫을 확보 (관련: K8s system-reserved)
  • 압박 버퍼(축출 임계값): 압박 상태에서 노드를 보호하기 위한 eviction threshold (관련: K8s 파드 축출(Eviction) 정책)

이 값들은 결국 Allocatable을 감소시키며, 스케줄러는 Allocatable을 기준으로 파드 배치를 판단합니다. (관련: K8s Node Allocatable)

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

  • 보장: 예약/버퍼 설정은 Allocatable을 줄여 파드가 “가용”으로 착각하는 총량을 제한합니다.
  • 비보장: 예약을 했다고 해서 노드가 압박에서 완전히 자유로운 것은 아닙니다(워크로드 특성, 디스크/인오드 압박, 커널 이슈 등).

비유 (Analogy)

노드 리소스 예약은 “전기요금/관리비(노드 운영)”를 먼저 떼어두고, 나머지로만 생활비(파드 실행)를 쓰도록 강제하는 것에 가깝습니다.

실무적 함의 (Operational Implications)

  • 예약을 줄이면 밀도는 좋아지지만, 노드가 장애 대응 불가능 상태로 빠질 확률이 올라갑니다.
  • 예약을 늘리면 안정성은 올라가지만, 같은 노드 수에서 수용 가능한 워크로드가 줄어 비용이 증가할 수 있습니다.

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

  • “노드가 크면 예약은 필요 없다”는 가정은 성립하지 않습니다. 노드가 클수록 데몬/에이전트 구성도 복잡해질 수 있습니다.
  • 예약 값은 한 번 정하고 끝이 아니라, 노드에 올라가는 에이전트(보안/로그/모니터링) 변경에 따라 재산정 대상입니다.

References