리소스 관리

리소스 관리 (Resource Management)

이 섹션은 Kubernetes가 워크로드가 소비하는 리소스를 어떻게 표현하고, 요청하고, 할당하고, 제약하는지 다뤄요. 특수 하드웨어 장치를 포함합니다.

개요

Kubernetes에서 워크로드가 소비하는 리소스는 크게 두 갈래로 나눌 수 있어요.

  1. 계산 리소스 (Compute resources): CPU와 메모리처럼 컨테이너가 소비하는 표준 리소스. Pod 스펙의 resources.requestsresources.limits를 통해 요청·제한하고, 스케줄러와 kubelet이 이를 기준으로 스케줄링과 제한을 수행해요.

  2. 확장 리소스 (Extended resources): nvidia.com/gpu 같은 클러스터 차원에서 광고되는 특수 하드웨어 리소스.

  3. 동적 리소스 할당 (Dynamic Resource Allocation, DRA): 리소스가 node-agnostic 하고 파티셔너블하거나 공유 가능할 때 요청을 처리하는 더 유연한 메커니즘. ResourceClaim과 ResourceSlice 같은 API를 사용해요.

컴퓨트 리소스

각 컨테이너는 spec.containers[].resources에서 CPU와 메모리 요청(request)과 제한(limit)을 지정할 수 있어요.

  • requests: 스케줄러가 노드에 얼마나 필요한지 판단하는 최소 보장치. 노드의 할당 가능 용량과 비교해 스케줄링해요.
  • limits: 컨테이너가 사용할 수 있는 최대치. 초과하면 CPU는 조절(throttle)되고 메모리는 초과 시 OOM 킬러가 개입해요.

메모리 요청/제한과 CPU 요청/제한은 서로 다른 QoS 클래스를 만들며, 이는 스케줄링과 축출(eviction) 우선순위에 영향을 줘요.

확장 리소스

확장 리소스는 vendor-domain/resource 형식의 이름(예: nvidia.com/gpu, example.com/foo)을 가져요. 노드당 용량이 있고, node.status.capacitynode.status.allocatable로 광고돼요. 스케줄러는 확장 리소스도 requests와 limits처럼 처리해요.

동적 리소스 할당 (Dynamic Resource Allocation)

DRA는 리소스 요청과 노드 할당을 더 유연하게 처리하는 기능이에요. 각 Pod나 컨테이너가 리소스 요청을 직접 할 수 있고, 장치가 특정 스케줄링 제약을 가질 수 있어요. DRA에 대한 자세한 내용은 별도 문서에서 다뤄요.

워크로드가 쓰는 리소스 관리

클러스터 관리 관점에서 리소스를 잘 관리하려면 다음 메커니즘을 함께 고려해야 해요.

  • Resource Quotas: 네임스페이스 단위로 리소스 사용량을 제한해요.
  • LimitRange: 네임스페이스 안에서 Pod/컨테이너의 기본 요청·제한을 정하고, 개별 리소스의 최소·최대를 강제해요.
  • 노드 예약 (Node reservation): --system-reserved--kube-reserved 같은 kubelet 플래그로 시스템 컴포넌트용 리소스를 예약할 수 있어요.

더 알아보기 (Learn more)