동적 리소스 할당(Dynamic Resource Allocation, 이하 DRA)은 플랫폼 관리자가 Kubernetes에서 하드웨어 가속기와 특수 리소스를 처리하는 방식을 근본적으로 변화시켰습니다. v1.36 릴리스에서 DRA는 핵심 기능들의 단계 격상(graduation), 중요한 사용성 개선, 그리고 메모리 및 CPU와 같은 네이티브 리소스로의 확장 및 PodGroups에서의 ResourceClaims 지원을 통해 더욱 성숙해졌습니다.
드라이버의 가용성 또한 계속해서 확장되고 있습니다. 특화된 컴퓨팅 가속기를 넘어, 이제 생태계에는 네트워킹 및 기타 하드웨어 유형에 대한 지원이 포함되어 있으며, 이는 더욱 견고하고 하드웨어에 구애받지 않는 인프라로의 이동을 반영합니다.
대규모 GPU 팜을 관리하든, 더 나은 장애 처리가 필요하든, 혹은 리소스 폴백(fallback) 옵션을 정의하는 더 나은 방법을 찾고 있든, 1.36의 DRA 업그레이드는 여러분을 위한 무언가를 담고 있습니다. 이제 새로운 기능과 단계 격상된 기능들을 자세히 살펴보겠습니다!
기능 단계 격상 (Feature graduations)
커뮤니티는 핵심 DRA 개념을 안정화하기 위해 열심히 노력해 왔습니다. Kubernetes 1.36에서는 많은 기대를 모았던 여러 기능이 베타(Beta) 및 스테이블(Stable) 단계로 격상되었습니다.
우선순위 목록 (Prioritized list - Stable)
대부분의 클러스터에서 하드웨어 이질성(heterogeneity)은 현실입니다. 우선순위 목록(Prioritized list) 기능을 사용하면 장치를 요청할 때 폴백 선호도를 자신 있게 정의할 수 있습니다. 특정 장치 모델을 하드코딩하는 대신, 정렬된 선호도 목록을 지정할 수 있습니다(예: "H100을 할당하되, 없으면 A100으로 대체"). 스케줄러는 이러한 요청을 순서대로 평가하여 스케줄링 유연성과 클러스터 활용도를 획기적으로 향상시킵니다.
확장 리소스 지원 (Extended resource support - Beta)
DRA가 리소스 할당의 표준이 됨에 따라, 기존 레거시 시스템과의 간극을 메우는 것이 중요합니다. DRA 확장 리소스(Extended resource) 기능을 사용하면 사용자가 포드(Pod)에서 전통적인 확장 리소스 방식을 통해 리소스를 요청할 수 있습니다. 이를 통해 DRA로의 점진적인 전환이 가능해지며, 클러스터 운영자는 클러스터를 DRA로 마이그레이션하면서도 애플리케이션 개발자는 각자의 일정에 맞춰 ResourceClaim API를 채택할 수 있게 됩니다.
분할 가능한 장치 (Partitionable devices - Beta)
하드웨어 가속기는 강력하며, 때로는 단일 워크로드가 전체 장치를 필요로 하지 않을 수도 있습니다. 분할 가능한 장치(Partitionable devices) 기능은 워크로드 요구 사항에 따라 물리적 하드웨어를 더 작은 논리적 인스턴스(예: 멀티 인스턴스 GPU, MIG)로 동적으로 분할할 수 있도록 네이티브 DRA 지원을 제공합니다. 이를 통해 관리자는 고가의 가속기를 여러 포드 간에 안전하고 효율적으로 공유할 수 있습니다.
장치 테인트 (Device taints - Beta)
Kubernetes 노드에 테인트를 적용할 수 있는 것처럼, 특정 DRA 장치에도 직접 테인트를 적용할 수 있습니다. 장치 테인트 및 톨러레이션(Device taints and tolerations)은 클러스터 관리자가 하드웨어를 더욱 효과적으로 관리할 수 있게 해줍니다. 결함이 있는 장치에 테인트를 적용하여 표준 클레임에 할당되지 않도록 방지하거나, 특정 팀, 특수 워크로드 또는 실험을 위해 특정 하드웨어를 예약할 수 있습니다. 결과적으로 일치하는 톨러레이션이 있는 포드만 해당 테인트가 적용된 장치를 점유할 수 있습니다.
장치 바인딩 조건 (Device binding conditions - Beta)
스케줄링 안정성을 높이기 위해, Kubernetes 스케줄러는 바인딩 조건(Binding conditions) 기능을 사용하여 부착 가능한 장치나 FPGA와 같은 필수 외부 리소스가 완전히 준비될 때까지 포드를 노드에 할당하는 것을 지연시킬 수 있습니다. 리소스 준비 상태를 명시적으로 모델링함으로써 포드 실패로 이어질 수 있는 성급한 할당을 방지하고, 훨씬 더 견고하고 예측 가능한 배포 프로세스를 보장합니다.
리소스 건강 상태 (Resource health status - Beta)
장치가 고장 나거나 비정상 상태가 된 시점을 아는 것은 특수 하드웨어에서 실행되는 워크로드에 매우 중요합니다. 리소스 건강 상태(Resource health status)를 통해 Kubernetes는 장치 상태 정보를 포드 상태(Pod status)에 직접 노출하여 사용자와 컨트롤러가 하드웨어 장애를 신속하게 식별하고 대응할 수 있는 가시성을 제공합니다. 이 기능에는 사람이 읽을 수 있는 건강 상태 메시지 지원이 포함되어 있어, 복잡한 드라이버 로그를 뒤지지 않고도 문제를 훨씬 쉽게 진단할 수 있습니다.
새로운 기능 (New Features)
기존 기능의 안정화 외에도 v1.36은 DRA의 범위를 확장하는 기초적인 새 기능들을 도입했습니다. 이들은 알파(Alpha) 기능이므로 기본적으로 비활성화되어 있는 기능 게이트(feature gates) 뒤에 있습니다.
워크로드용 ResourceClaim 지원 (ResourceClaim support for workloads)
엄격한 토폴로지 스케줄링에 의존하는 대규모 AI/ML 워크로드를 최적화하기 위해, 워크로드용 ResourceClaim 지원 기능은 Kubernetes가 대규모 포드 세트 전체에서 공유 리소스를 원활하게 관리할 수 있게 해줍니다. ResourceClaims 또는 ResourceClaimTemplates를 포드 그룹(PodGroups)과 연관시킴으로써, 이 기능은 클레임을 공유할 수 있는 포드 수의 제한과 같은 이전의 확장성 병목 현상을 제거하고, 전문 오케스트레이터의 수동 클레임 관리 부담을 덜어줍니다.
노드 할당 가능 리소스 (Node allocatable resources)
왜 DRA를 외부 가속기에만 사용해야 할까요? v1.36에서는 DRA API를 사용하여 노드 할당 가능(node allocatable) 인프라 리소스(CPU 및 메모리 등)를 관리하는 첫 번째 반복 단계를 도입합니다. DRA 노드 할당 가능 리소스 기능을 통해 CPU 및 메모리 할당을 DRA 체계 아래로 가져옴으로써, 사용자는 표준 컴퓨팅 리소스에 대해 DRA의 고급 배치, NUMA 인식 및 우선순위 지정 의미론을 활용하여 매우 세밀한 성능 조정을 할 수 있는 기반을 마련할 수 있습니다.
DRA 리소스 가용성 가시성 (DRA resource availability visibility)
클러스터 관리자들이 가장 많이 요청한 기능 중 하나는 하드웨어 용량에 대한 더 나은 가시성이었습니다. 새로운 리소스 풀 상태(Resource pool status) 기능을 사용하면 DRA 리소스 풀 내 장치의 가용성을 조회할 수 있습니다. ResourcePoolStatusRequest 객체를 생성함으로써, 특정 드라이버가 관리하는 각 풀에 대한 장치 수(전체, 할당됨, 사용 가능, 사용 불가능)의 시점 스냅샷을 얻을 수 있습니다. 이를 통해 대시보드 및 용량 계획 도구와의 더 나은 통합이 가능해집니다.
속성을 위한 리스트 유형 (List types for attributes)
ResourceClaim 제약 조건 평가가 스칼라(scalar) 및 리스트(list) 값과 더 잘 작동하도록 변경되었습니다:
matchAttribute는 이제 비어 있지 않은 교집합을 확인하고, distinctAttribute는 쌍 단위로 서로소(pairwise disjoint)인지 확인합니다.
CEL의 includes() 함수도 도입되었습니다. 이를 통해 속성이 스칼라와 리스트 표현 사이에서 변경되더라도 장치 선택기(device selectors)가 더 쉽게 계속 작동할 수 있습니다.
(includes() 함수는 표현식 평가를 위한 DRA 컨텍스트 내에서만 사용할 수 있습니다.)
결정론적 장치 선택 (Deterministic device selection)
Kubernetes 스케줄러가 리소스 풀 및 ResourceSlice 이름을 기반으로 사전 순(lexicographical ordering) 정렬을 사용하여 장치를 평가하도록 업데이트되었습니다. 이 변경을 통해 드라이버 작성자가 스케줄링 프로세스에 적극적으로 영향을 미칠 수 있게 되어 처리량이 향상되고 더 최적화된 스케줄링 결정이 가능해집니다. ResourceSlice 컨트롤러 툴킷은 드라이버 저자가 지정한 정확한 장치 순서를 반영하는 이름을 자동으로 생성합니다.
컨테이너에서 검색 가능한 장치 메타데이터 (Discoverable device metadata in containers)
DRA 장치가 있는 노드에서 실행되는 워크로드는 Kubernetes API를 쿼리하지 않고도 PCI 버스 주소나 네트워크 인터페이스 구성과 같이 할당된 장치에 대한 세부 정보를 검색해야 할 때가 많습니다. 장치 메타데이터(Device metadata) 기능을 통해 Kubernetes는 DRA 드라이버가 잘 알려진 경로에 버전이 지정된 JSON 파일로 장치 속성을 컨테이너에 노출하는 표준 프로토콜을 정의합니다. DRA kubelet 플러그인 라이브러리로 구축된 드라이버는 이 동작을 투명하게 얻을 수 있습니다. 드라이버는 메타데이터만 제공하면 라이브러리가 파일 레이아웃, CDI 바인드 마운트, 버전 관리 및 수명 주기를 처리합니다. 이를 통해 애플리케이션은 드라이버에 독립적이고 일관된 방식으로 장치 메타데이터를 검색하고 사용할 수 있으며, 메타데이터를 얻기 위해 사용자 정의 컨트롤러를 사용하거나 ResourceSlice 객체를 조회할 필요가 없어집니다.
다음 단계는? (What’s next?)
이번 릴리스는 수많은 새로운 동적 리소스 할당(DRA) 기능을 도입했으며, 그 기세는 더욱 높아지고 있습니다. 향후 로드맵은 기존 기능을 베타 및 스테이블 릴리스로 성숙시키는 동시에 DRA의 성능, 확장성 및 신뢰성을 강화하는 데 집중하고 있습니다. 다음 주기의 핵심 우선순위는 워크로드 인식(workload aware) 및 *토폴로지 인식 스케줄링(topology aware scheduling)*과의 긴밀한 통합이 될 것입니다.
우리의 큰 목표 중 하나는 사용자가 Device Plugin에서 DRA로 마이그레이션하도록 돕는 것이며, 여러분의 참여를 원합니다. 현재 드라이버를 유지 관리하고 있든, 이제 막 가능성을 탐색하기 시작했든, 여러분의 의견은 매우 중요합니다. 차세대 리소스 관리를 형성하기 위해 우리와 파트너가 되어주세요. 개발 협력, 피드백 공유 또는 첫 번째 DRA 드라이버 구축을 위해 지금 바로 연락해 주십시오.
참여하기 (Getting involved)
시작하기 좋은 방법은 WG Device Management Slack 채널과 회의에 참여하는 것입니다. 회의는 Americas/EMEA 및 EMEA/APAC에 친숙한 시간대에 열립니다.
모든 개선 아이디어가 아직 이슈로 트래킹되고 있는 것은 아니니, 도움을 주고 싶거나 아이디어가 있다면 언제든 저희에게 말씀해 주세요! 어려운 코어 변경부터 초보자가 맡을 수 있는 kubectl의 사용성 개선에 이르기까지, 모든 수준에서 해야 할 일이 많습니다.