DRA로 워크로드에 장치 할당하기
DRA로 워크로드에 장치 할당하기 (Allocate devices to workloads with DRA)
이 페이지에서는 동적 리소스 할당(DRA, dynamic resource allocation) 을 사용해 파드에 장치를 할당하는 방법을 보여줘요. 이 지침은 워크로드 운영자를 위한 것입니다. 이 페이지를 읽기 전에 DRA가 어떻게 동작하는지와 DRA 용어(예: 장치 클래스, 리소스 슬라이스)에 익숙해지세요. 자세한 내용은 동적 리소스 할당 (DRA)을 참조하세요.
출처: 문서
본문
DRA로 장치 할당하기에 대해 {#about-device-allocation-dra}
워크로드 운영자로서 ResourceClaim 또는 ResourceClaimTemplate을 만들어 워크로드용 장치를 요청(claim) 할 수 있어요. 워크로드를 배포하면 쿠버네티스와 장치 드라이버가 사용 가능한 장치를 찾아 파드에 할당하고, 그 장치에 접근할 수 있는 노드에 파드를 배치합니다.
시작하기 전에
- 클러스터 관리자가 DRA를 설정하고 장치를 연결했으며 드라이버를 설치했는지 확인한다. 자세한 내용은 클러스터에서 DRA 설정을 참조하세요.
요청할 장치 식별하기 {#identify-devices}
클러스터 관리자나 장치 드라이버가 장치 범주를 정의하는 DeviceClass를 만듭니다. CEL 표현식을 사용해 특정 장치 속성으로 필터링해 장치를 요청할 수 있습니다.
클러스터의 DeviceClass 목록을 가져온다:
kubectl get deviceclasses
출력은 다음과 비슷합니다:
NAME AGE
driver.example.com 16m
권한 오류가 나면 DeviceClass를 가져올 접근 권한이 없을 수 있습니다. 사용 가능한 장치 속성은 클러스터 관리자나 드라이버 제공자에게 확인하세요.
리소스 요청하기 {#claim-resources}
ResourceClaim을 사용해 DeviceClass에서 리소스를 요청할 수 있어요. ResourceClaim을 만들려면 다음 중 하나를 수행한다:
- 여러 파드가 같은 장치에 대한 접근을 공유하거나, 파드의 수명을 넘어 claim이 존재하길 원한다면 ResourceClaim을 수동으로 만든다.
- ResourceClaimTemplate을 사용해 쿠버네티스가 파드별 ResourceClaim을 생성·관리하게 한다. 병렬 실행을 사용하는 Job의 파드처럼 비슷한 구성의 별도 장치에 각 파드가 접근하길 원한다면 ResourceClaimTemplate을 만든다.
파드에서 특정 ResourceClaim을 직접 참조하면 그 ResourceClaim이 클러스터에 이미 존재해야 합니다. 참조된 ResourceClaim이 존재하지 않으면 그 ResourceClaim이 생성될 때까지 파드는 pending 상태로 유지됩니다. 자동 생성된 ResourceClaim을 파드에서 참조할 수 있지만, 자동 생성된 ResourceClaim은 생성을 트리거한 파드의 수명에 묶이므로 이것은 권장되지 않습니다.
리소스를 요청하는 워크로드를 만들려면 다음 옵션 중 하나를 선택한다:
다음 예시 매니페스트를 검토한다:
이 매니페스트는 다음 두 파라미터를 모두 충족하는 example-device-class DeviceClass의 장치를 요청하는 ResourceClaimTemplate을 만듭니다:
- 값이
gpu인driver.example.com/type속성을 가진 장치. 64Gi용량의 장치.
ResourceClaimTemplate을 만들려면 다음 명령을 실행한다:
kubectl apply -f https://k8s.io/examples/dra/resourceclaimtemplate.yaml
다음 예시 매니페스트를 검토한다:
이 매니페스트는 다음 두 파라미터를 모두 충족하는 example-device-class DeviceClass의 장치를 요청하는 ResourceClaim을 만듭니다:
- 값이
gpu인driver.example.com/type속성을 가진 장치. 64Gi용량의 장치.
ResourceClaim을 만들려면 다음 명령을 실행한다:
kubectl apply -f https://k8s.io/examples/dra/resourceclaim.yaml
DRA를 사용하는 워크로드에서 장치 요청하기 {#request-devices-workloads}
장치 할당을 요청하려면 파드 명세의 resourceClaims 필드에 ResourceClaim 또는 ResourceClaimTemplate을 지정한다. 그런 다음 그 파드의 컨테이너의 resources.claims 필드에서 이름으로 특정 claim을 요청한다. resourceClaims 필드에 여러 항목을 지정하고 다른 컨테이너에서 특정 claim을 사용할 수 있습니다.
-
다음 예시 Job을 검토한다:
각 파드는 다음 속성을 가집니다:
separate-gpu-claim이라는 ResourceClaimTemplate과shared-gpu-claim이라는 ResourceClaim을 컨테이너가 사용할 수 있게 한다.- 다음 컨테이너를 실행한다:
container0는separate-gpu-claimResourceClaimTemplate에서 장치를 요청한다.container1과container2는shared-gpu-claimResourceClaim의 장치에 대한 접근을 공유한다.
-
Job을 만든다:
kubectl apply -f https://k8s.io/examples/dra/dra-example-job.yaml
다음 문제 해결 단계를 시도해 보세요:
- 워크로드가 예상대로 시작되지 않으면 Job에서 Pod, ResourceClaim으로 드릴다운하고 각 수준의 객체를
kubectl describe로 확인해 워크로드가 시작되지 않는 이유를 설명할 상태 필드나 이벤트가 있는지 살펴본다. - 파드 생성 시
must specify one of: resourceClaimName, resourceClaimTemplateName으로 실패하면pod.spec.resourceClaims의 모든 항목이 그 중 정확히 하나의 필드를 설정했는지 확인한다. 설정했다면, 쿠버네티스 < 1.32의 API에 대해 빌드된 변경(mutating) 파드 웹훅이 설치되었을 가능성이 있습니다. 클러스터 관리자와 함께 이를 확인하세요.
정리하기 {#clean-up}
이 작업에서 만든 쿠버네티스 객체를 삭제하려면 다음 단계를 수행한다:
-
예시 Job을 삭제한다:
kubectl delete -f https://k8s.io/examples/dra/dra-example-job.yaml -
리소스 claim을 삭제하려면 다음 명령 중 하나를 실행한다:
-
ResourceClaimTemplate을 삭제한다:
kubectl delete -f https://k8s.io/examples/dra/resourceclaimtemplate.yaml -
ResourceClaim을 삭제한다:
kubectl delete -f https://k8s.io/examples/dra/resourceclaim.yaml
-