동적 리소스 할당

동적 리소스 할당 (Dynamic Resource Allocation)

하드웨어 가속기 같은 부착 장치(attached device) 를 Pod에 배정해야 할 때가 있어요. 전통적인 디바이스 플러그인 방식은 컨테이너별로 요청해야 하고, 장치 공유나 표현식 기반 필터링이 어려웠죠. DRA(Dynamic Resource Allocation, 동적 리소스 할당) 는 이 문제를 유연하게 풀어주는 쿠버네티스 기능입니다.

출처: 쿠버네티스 공식 문서 — Dynamic Resource Allocation

기능 상태: 쿠버네티스 v1.35 이후 stable. v1.30에서 처음 등장했어요. 이 기능은 이제 비활성화·옵트아웃할 수 없습니다(잠금됨). 관련 기능 게이트 DynamicResourceAllocation에 명시적으로 값을 설정해도 쿠버네티스는 무시하되 오류는 보고하지 않아요.

DRA란? (What is DRA?)

DRA는 Pod 간에 리소스를 요청하고 공유할 수 있게 해주는 쿠버네티스 기능입니다. 이 리소스는 주로 하드웨어 가속기 같은 부착 장치예요.

DRA를 쓰면 장치 드라이버와 클러스터 관리자가 워크로드에서 클레임할 수 있는 장치 클래스(device class) 를 정의합니다. 쿠버네티스는 특정 클레임에 맞는 장치를 할당하고, 할당된 장치에 접근할 수 있는 노드에 해당 Pod를 배치해요.

DRA로 리소스를 할당하는 경험은 동적 볼륨 프로비저닝과 비슷합니다. 거기서는 PersistentVolumeClaim으로 스토리지 클래스에서 스토리지 용량을 클레임해서 Pod에서 쓰죠.

DRA의 이점 (Benefits of DRA)

  • 유연한 장치 필터링: CEL(common expression language)로 특정 장치 속성의 세밀한 필터링을 수행합니다.
  • 장치 공유: 해당 리소스 클레임을 참조해 같은 리소스를 여러 컨테이너나 Pod와 공유할 수 있어요.
  • 장치 설정: 벤더별 장치 설정을 리소스 클레임에 붙여, 오늘날의 노드별 장치 설정 대신 워크로드별 장치 설정을 할 수 있습니다.
  • 중앙 집중식 장치 분류: 장치 드라이버·클러스터 관리자가 장치 클래스를 사용해 다양한 유스케이스에 최적화된 하드웨어 범주를 앱 운영자에게 제공할 수 있어요. 예를 들어 범용 워크로드용 비용 최적화 장치 클래스와, 중요 작업용 고성능 장치 클래스를 만들 수 있습니다.
  • 간소화된 Pod 요청: 앱 운영자는 Pod 리소스 요청에 장치 수량을 명시할 필요가 없어요. Pod가 리소스 클레임을 참조하면, 그 클레임의 장치 설정이 Pod에 적용됩니다.

이런 이점 덕분에, 컨테이너별 장치 요청이 필요하고 장치 공유나 표현식 기반 필터링을 지원하지 않는 기존 디바이스 플러그인보다 장치 할당 워크플로가 크게 개선됩니다.

DRA 사용자 유형 (Types of DRA users)

DRA로 장치를 할당하는 워크플로는 다음 유형의 사용자를 포함합니다:

  • 장치 소유자(Device owner): 장치를 책임지는 주체. 상용 벤더, 클러스터 운영자, 또는 다른 주체일 수 있어요. DRA를 쓰려면 장치에 DRA 호환 드라이버가 있어야 합니다. 이 드라이버는:
    • 쿠버네티스에 노드와 장치 정보를 제공하는 ResourceSlice를 생성합니다.
    • 선택적으로, 장치 범주와 요청 방법을 정의하는 DeviceClass를 생성합니다.
  • 클러스터 관리자(Cluster admin): 클러스터를 만들고, 장치를 노드에 부착하고, DRA 장치 드라이버를 설치합니다.
  • 워크로드 운영자(Workload operator): ResourceClaimTemplate이나 ResourceClaim을 만들어 특정 DeviceClass 안의 장치 설정을 요청하고, 매니페스트를 수정해 그 클레임을 참조시킵니다.

더 알아보기 (Learn more)