컨테이너에 확장 리소스 할당하기
컨테이너에 확장 리소스 할당하기 (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에 의한 확장 리소스 할당을 참고해요.