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을 만듭니다:

  • 값이 gpudriver.example.com/type 속성을 가진 장치.
  • 64Gi 용량의 장치.

ResourceClaimTemplate을 만들려면 다음 명령을 실행한다:

kubectl apply -f https://k8s.io/examples/dra/resourceclaimtemplate.yaml

다음 예시 매니페스트를 검토한다:

이 매니페스트는 다음 두 파라미터를 모두 충족하는 example-device-class DeviceClass의 장치를 요청하는 ResourceClaim을 만듭니다:

  • 값이 gpudriver.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을 사용할 수 있습니다.

  1. 다음 예시 Job을 검토한다:

    각 파드는 다음 속성을 가집니다:

    • separate-gpu-claim이라는 ResourceClaimTemplate과 shared-gpu-claim이라는 ResourceClaim을 컨테이너가 사용할 수 있게 한다.
    • 다음 컨테이너를 실행한다:
      • container0separate-gpu-claim ResourceClaimTemplate에서 장치를 요청한다.
      • container1container2shared-gpu-claim ResourceClaim의 장치에 대한 접근을 공유한다.
  2. Job을 만든다:

    kubectl apply -f https://k8s.io/examples/dra/dra-example-job.yaml
    

다음 문제 해결 단계를 시도해 보세요:

  1. 워크로드가 예상대로 시작되지 않으면 Job에서 Pod, ResourceClaim으로 드릴다운하고 각 수준의 객체를 kubectl describe로 확인해 워크로드가 시작되지 않는 이유를 설명할 상태 필드나 이벤트가 있는지 살펴본다.
  2. 파드 생성 시 must specify one of: resourceClaimName, resourceClaimTemplateName으로 실패하면 pod.spec.resourceClaims의 모든 항목이 그 중 정확히 하나의 필드를 설정했는지 확인한다. 설정했다면, 쿠버네티스 < 1.32의 API에 대해 빌드된 변경(mutating) 파드 웹훅이 설치되었을 가능성이 있습니다. 클러스터 관리자와 함께 이를 확인하세요.

정리하기 {#clean-up}

이 작업에서 만든 쿠버네티스 객체를 삭제하려면 다음 단계를 수행한다:

  1. 예시 Job을 삭제한다:

    kubectl delete -f https://k8s.io/examples/dra/dra-example-job.yaml
    
  2. 리소스 claim을 삭제하려면 다음 명령 중 하나를 실행한다:

    • ResourceClaimTemplate을 삭제한다:

      kubectl delete -f https://k8s.io/examples/dra/resourceclaimtemplate.yaml
      
    • ResourceClaim을 삭제한다:

      kubectl delete -f https://k8s.io/examples/dra/resourceclaim.yaml
      

더 알아보기 (Learn more)