콘텐츠로 이동

Sandbox Device Plugin을 통한 VM 패스스루

샌드박스형 워크로드 설정을 마친 뒤 Sandbox Device Plugin의 제품별 Kubernetes 리소스로 VM에 NPU를 연결합니다.

플러그인은 vfio-pci에 바인딩된 NPU의 제품별 리소스를 노출합니다. 이 리소스를 KubeVirt의 permittedHostDevices에 등록한 뒤 VM의 hostDevices 설정에서 참조합니다. ResourceClaim 기반 할당은 DRA Driver(VM 패스스루)에서 확인할 수 있습니다.


Operator 설정

VM 전용 클러스터는 KubeVirt VM 패스스루 구성의 Sandbox Device Plugin 탭을 사용합니다. 컨테이너와 VM을 함께 운영한다면 컨테이너·VM 혼용을 위한 Helm 설정의 같은 탭을 사용합니다.


설치 확인

Pod 상태와 VM에서 사용할 NPU 리소스를 확인합니다.

Pod 상태

VFIO Manager와 Sandbox Device Plugin Pod를 확인합니다.

kubectl get pods -n <NAMESPACE>

VFIO Manager와 Sandbox Device Plugin Pod가 실행 중이어야 합니다.

NPU 리소스

VM 노드가 노출한 NPU 리소스를 확인합니다.

kubectl get node <NODE_NAME> -o jsonpath='{.status.allocatable}'

Rebel100™ 노드의 allocatable에는 rebellions.ai/RBLN-CR13_PF가 표시되어야 합니다. 다른 제품의 이름은 리소스 이름 규칙에서 확인할 수 있습니다.


리소스 이름 규칙

Sandbox Device Plugin은 내장 PCI ID 데이터베이스의 Rebellions 벤더 ID 1eff 항목에서 Kubernetes 리소스 이름을 도출합니다. 별도로 관리할 resourceList는 없습니다.

PCI 데이터베이스의 식별 문자열(예: RBLN-CR13 (PF))을 대문자로 바꾸고 공백, /, .을 _로 치환한 뒤, 영문자·숫자·_·- 이외의 문자를 제거하여 리소스 접미사로 사용합니다. 다음 표는 물리 함수(PF) 리소스 기준입니다.

제품명 카드 모델(SKU) PCI 디바이스 ID(PF) 노출되는 리소스
Rebel100™ RBLN-CR13 2130 rebellions.ai/RBLN-CR13_PF
ATOM™+ RBLN-CA22 1220 rebellions.ai/RBLN-CA22_PF
ATOM™-Max RBLN-CA25 1250 rebellions.ai/RBLN-CA25_PF

Note

플러그인이 자체 PCI ID 데이터베이스를 포함하므로 리소스 이름 지정을 위해 호스트를 별도로 설정할 필요가 없습니다. 내장 데이터베이스에 없는 최신 제품은 해당 제품을 포함한 플러그인 빌드로 업데이트하기 전까지 디바이스 ID 기반 이름인 rebellions.ai/RBLN-<device-id>(예: rebellions.ai/RBLN-1250)로 노출됩니다.


KubeVirt VFIO 리소스 설정

NPU 리소스 이름을 permittedHostDevices.pciHostDevices에 등록합니다. externalResourceProvider: true로 설정하면 KubeVirt가 Sandbox Device Plugin에 할당을 위임합니다.

KubeVirt 설정에서 편집한 기존 KubeVirt 리소스에 장착된 카드의 항목을 병합하고, 기능 게이트와 다른 허용 디바이스는 유지합니다. 두 제품군을 함께 사용하려면 두 탭의 항목을 모두 추가합니다.

Rebel100™ 리소스를 등록합니다.

1
2
3
4
5
6
7
spec:
  configuration:
    permittedHostDevices:
      pciHostDevices:
      - pciVendorSelector: "1eff:2130"
        resourceName: rebellions.ai/RBLN-CR13_PF
        externalResourceProvider: true

ATOM™ 리소스를 등록합니다.

spec:
  configuration:
    permittedHostDevices:
      pciHostDevices:
      - pciVendorSelector: "1eff:1220"
        resourceName: rebellions.ai/RBLN-CA22_PF
        externalResourceProvider: true
      - pciVendorSelector: "1eff:1250"
        resourceName: rebellions.ai/RBLN-CA25_PF
        externalResourceProvider: true

pciVendorSelector는 벤더와 디바이스 ID의 조합이며, resourceName은 해당 제품이 노출한 리소스 이름과 일치해야 합니다.

등록한 리소스로 VM을 생성하고 게스트에서 장치를 확인하는 예시는 KubeVirt VM에 NPU 연결하기에서 확인할 수 있습니다.