컨테이너에 확장 리소스 할당하기

컨테이너에 확장 리소스 할당하기 (Assign Extended Resources to a Container)

이 페이지는 컨테이너(Container)에 확장 리소스를 할당하는 방법을 보여줘요.

출처: 문서

본문

시작하기 전에 (Before you begin)

이 실습을 하기 전에 노드의 확장 리소스 광고하기 실습을 먼저 해요. 그러면 노드 중 하나가 dongle 리소스를 광고하도록 구성돼요.

파드에 확장 리소스 할당하기

확장 리소스를 요청하려면 컨테이너 매니페스트에 resources.requests.<resource_name> 필드를 포함해요.

확장 리소스 이름은 example.com/foo 형태예요. 여기서 example.com 은 조직의 도메인으로 바꾸고 foo 는 설명적인 리소스 이름이에요. 쿠버네티스는 접두사가 *.kubernetes.io/ 인 확장 리소스에는 예약된 특별한 의미가 이미 있으므로 그 접두사를 피해야 해요.

한 개의 컨테이너가 있는 파드의 구성 파일은 다음과 같아요:

apiVersion: v1
kind: Pod
metadata:
  name: extended-resource-demo
spec:
  containers:
  - name: extended-resource-demo-ctr
    image: nginx
    resources:
      requests:
        example.com/dongle: 3
      limits:
        example.com/dongle: 3

구성 파일에서 컨테이너가 dongle 3개를 요청하는 것을 볼 수 있어요.

파드를 만듭니다:

kubectl apply -f https://k8s.io/examples/pods/resource/extended-resource-pod.yaml

파드가 실행 중인지 확인합니다:

kubectl get pod extended-resource-demo

파드를 설명합니다:

kubectl describe pod extended-resource-demo

출력은 dongle 요청을 보여줘요:

Limits:
  example.com/dongle: 3
Requests:
  example.com/dongle: 3

두 번째 파드 만들기 시도

한 개의 컨테이너가 있는 파드의 구성 파일이에요. 컨테이너는 dongle 2개를 요청해요.

apiVersion: v1
kind: Pod
metadata:
  name: extended-resource-demo-2
spec:
  containers:
  - name: extended-resource-demo-2-ctr
    image: nginx
    resources:
      requests:
        example.com/dongle: 2
      limits:
        example.com/dongle: 2

쿠버네티스는 dongle 2개 요청을 충족할 수 없어요. 첫 번째 파드가 사용 가능한 dongle 4개 중 3개를 사용했기 때문이에요.

파드를 만들어 봅니다:

kubectl apply -f https://k8s.io/examples/pods/resource/extended-resource-pod-2.yaml

파드를 설명합니다:

kubectl describe pod extended-resource-demo-2

출력은 dongle 2개를 사용할 수 있는 노드가 없어서 파드를 스케줄할 수 없다는 것을 보여줘요:

Conditions:
  Type    Status
  PodScheduled  False
...
Events:
  ...
  ... Warning   FailedScheduling  pod (extended-resource-demo-2) failed to fit in any node
fit failure summary on nodes : Insufficient example.com/dongle (1)

파드 상태를 봅니다:

kubectl get pod extended-resource-demo-2

출력은 파드가 생성됐지만 노드에서 실행되도록 스케줄되지 않았음을 보여줘요. 상태가 Pending 이에요:

NAME                       READY     STATUS    RESTARTS   AGE
extended-resource-demo-2   0/1       Pending   0          6m

정리 (Clean up)

이 실습에서 만든 파드를 삭제합니다:

kubectl delete pod extended-resource-demo
kubectl delete pod extended-resource-demo-2

DRA가 지원하는 확장 리소스

이는 쿠버네티스의 stable 기능이며 버전 1.37부터 stable입니다. 처음에는 v1.34 릴리스에서 사용할 수 있었어요.

위 실습은 노드가 광고하는 확장 리소스를 사용해요. 확장 리소스는 동적 리소스 할당(Dynamic Resource Allocation) (DRA)으로도 지원될 수 있어요: DeviceClass가 extendedResourceName 을 설정하면, 스케줄러는 노드가 광고한 용량 대신 DRA 장치로 일치하는 확장 리소스 요청을 충족해요.

파드는 두 경우 모두 resources.requests.<resource_name> 으로 같은 방식으로 리소스를 요청하므로, 워크로드는 장치 플러그인(device plugin)이 제공하는지 DRA가 제공하는지 알 필요가 없어요. 심지어 같은 리소스 이름이 일부 노드에서는 장치 플러그인이, 다른 노드에서는 DRA가 제공할 수도 있어요.

DeviceClass 설정과 예시는 DRA에 의한 확장 리소스 할당을 참고해요.

더 알아보기 (Learn more)

애플리케이션 개발자용

클러스터 관리자용