DRA를 위한 클러스터 구성하기
DRA를 위한 클러스터 구성하기 (Set up a DRA cluster)
이 페이지에서는 API 그룹을 활성화하고 장치 클래스를 구성해 쿠버네티스 클러스터에서 동적 리소스 할당(DRA, dynamic resource allocation) 을 구성하는 방법을 보여줘요. 이 지침은 클러스터 관리자를 위한 것입니다.
출처: 문서
본문
DRA에 대해
DRA가 어떻게 동작하는지와 DRA 용어(예: 리소스 클레임, 장치 클래스, 드라이버)에 익숙한지 확인하세요. 자세한 내용은 동적 리소스 할당 (DRA)을 참조하세요.
시작하기 전에
- 장치를 클러스터에 직접 또는 간접적으로 연결한다. 드라이버의 잠재적 문제를 피하려면, 드라이버를 설치하기 전에 클러스터에 DRA 기능을 설정할 때까지 기다리세요.
선택 사항: 추가 DRA API 그룹 활성화 {#enable-dra}
DRA는 전반적으로 쿠버네티스의 안정(stable) 기능입니다. 그러나 그 측면 중 일부는 여전히 alpha 또는 beta일 수 있습니다. 아직 안정적이지 않은 DRA의 어떤 측면을 사용하려고 하고, 관련 기능이 전용 API 종류에 의존한다면, 관련 alpha 또는 beta API 그룹을 활성화해야 합니다.
일부 오래된 DRA 드라이버나 워크로드는 여전히 쿠버네티스 1.30의 v1beta1 API 또는 1.32의 v1beta2가 필요할 수 있습니다. 그 지원이 필요할 때에만 다음 API 그룹을 활성화하세요:
* `resource.k8s.io/v1beta1`
* `resource.k8s.io/v1beta2`
별도의 API 유형이 있는 Alpha 기능은 다음이 필요합니다:
resource.k8s.io/v1alpha3
자세한 내용은 API 그룹 활성화 또는 비활성화를 참조하세요.
DRA가 활성화되었는지 확인 {#verify}
클러스터가 올바르게 구성되었는지 확인하려면 DeviceClass를 나열해 보세요:
kubectl get deviceclasses
구성 요소 구성이 올바르면 출력은 다음과 비슷합니다:
No resources found
DRA가 올바르게 구성되지 않았다면 앞선 명령의 출력은 다음과 비슷합니다:
error: the server doesn't have a resource type "deviceclasses"
예를 들어 이는 resource.k8s.io API 그룹이 비활성화되었을 때 발생할 수 있습니다. 비슷한 확인이 alpha 또는 beta 품질의 최상위 유형에도 적용됩니다.
다음 문제 해결 단계를 시도해 보세요:
-
kube-apiserver구성 요소를 다시 구성하고 재시작한다. -
파드에서
.spec.resourceClaims필드 전체가 제거되거나, ResourceClaim을 고려하지 않고 파드가 스케줄링된다면,DynamicResourceAllocation기능 게이트가 kube-apiserver, kube-controller-manager, kube-scheduler 또는 kubelet에서 꺼져 있지 않은지 확인한다.
장치 드라이버 설치 {#install-drivers}
클러스터에 DRA를 활성화한 후 연결된 장치용 드라이버를 설치할 수 있어요. 지침은 장치 소유자 또는 장치 드라이버를 유지보수하는 프로젝트의 문서를 확인하세요. 설치하는 드라이버는 DRA와 호환되어야 합니다.
설치한 드라이버가 예상대로 동작하는지 확인하려면 클러스터의 ResourceSlice를 나열하세요:
kubectl get resourceslices
출력은 다음과 비슷합니다:
NAME NODE DRIVER POOL AGE
00000-driver.example.com-cluster-1-node-1-abcde cluster-1-node-1 driver.example.com cluster-1-device-pool-1-r1gc 7s
00000-driver.example.com-cluster-1-node-2-fghij cluster-1-node-2 driver.example.com cluster-1-device-pool-2-446z 8s
다음 문제 해결 단계를 시도해 보세요:
- DRA 드라이버의 상태를 확인하고 로그 출력에서 ResourceSlice 게시에 대한 오류 메시지를 찾아보세요. 드라이버 공급업체가 설치와 문제 해결에 대한 추가 지침을 가질 수 있습니다.
DeviceClass 만들기 {#create-deviceclasses}
DeviceClass를 만들어 애플리케이션 운영자가 워크로드에서 요청할 수 있는 장치 범주를 정의할 수 있어요. 일부 장치 드라이버 제공자는 드라이버 설치 중에 DeviceClass를 만들라고 지시할 수도 있습니다.
드라이버가 게시하는 ResourceSlice는 드라이버가 관리하는 장치에 대한 용량, 메타데이터, 속성 같은 정보를 포함합니다. DeviceClass에서 [CEL 표현식]을 사용해 속성을 필터링할 수 있으며, 이는 워크로드 운영자가 장치를 더 쉽게 찾게 해줍니다.
-
CEL 표현식으로 DeviceClass에서 선택할 수 있는 장치 속성을 찾으려면 ResourceSlice의 명세를 가져온다:
kubectl get resourceslice <resourceslice-name> -o yaml출력은 다음과 비슷합니다:
apiVersion: resource.k8s.io/v1 kind: ResourceSlice # lines omitted for clarity spec: devices: - attributes: type: string: gpu capacity: memory: value: 64Gi name: gpu-0 - attributes: type: string: gpu capacity: memory: value: 64Gi name: gpu-1 driver: driver.example.com nodeName: cluster-1-node-1 # lines omitted for clarity드라이버 제공자의 문서에서 사용 가능한 속성과 값도 확인할 수 있습니다.
-
driver.example.com장치 드라이버가 관리하는 모든 장치를 선택하는 다음 예시 DeviceClass 매니페스트를 검토한다. -
클러스터에 DeviceClass를 만든다:
kubectl apply -f https://k8s.io/examples/dra/deviceclass.yaml
정리하기 {#clean-up}
이 작업에서 만든 DeviceClass를 삭제하려면 다음 명령을 실행한다:
kubectl delete -f https://k8s.io/examples/dra/deviceclass.yaml