노드별 워크로드 라벨링¶
RBLNClusterPolicy는 클러스터 범위에서 하나만 사용하는 CR이며, NPU가 장착된 모든 노드에 대한 오퍼레이터의 배포 방식을 결정합니다. 정책을 직접 수정하지 않고도 두 노드 라벨을 사용해 특정 노드의 설정을 재정의하거나 해당 노드를 배포 대상에서 제외할 수 있습니다.
rebellions.ai/npu.deploy.skip: 특정 노드를 오퍼레이터 컴포넌트 배포 대상에서 제외합니다.rebellions.ai/npu.workload.config: 특정 노드에container또는vm-passthrough모드를 설정합니다(클러스터 기본값 재정의).
오퍼레이터는 다음 조정 루프에서 두 라벨을 모두 적용합니다.
노드를 컴포넌트 배포에서 제외하기¶
rebellions.ai/npu.deploy.skip=true를 설정하면 노드는 클러스터에 그대로 남아 NFD에서도 감지되지만, 오퍼레이터는 해당 노드에 어떤 컴포넌트도 스케줄링하지 않습니다.
다음과 같은 경우에 사용합니다.
- 디버그용 또는 점검용 노드에서 오퍼레이터가 관리하는 데몬을 실행하지 않으려는 경우
- 별도의 도구로 관리하는 노드라 오퍼레이터가 관리하지 않도록 하려는 경우
- 하드웨어나 드라이버 문제를 조사하는 동안 일시적으로 격리하려는 경우
라벨 값은 정확히 true여야 하며, 그 외의 값은 무시됩니다.
라벨이 적용되면 다음과 같이 동작합니다.
- 노드의 모든
rebellions.ai/npu.deploy.<component>라벨이 제거되어 오퍼레이터의 DaemonSet들이 해당 노드에서 Pod를 제거합니다. rebellions.ai/npu-driver-upgrade-enabled어노테이션도 강제로 비워지므로 오퍼레이터가 관리하는 드라이버 업그레이드 대상에서도 제외됩니다. 즉,npu.deploy.skip은 드라이버 업그레이드 건너뛰기의 동작을 모두 포함하며, 컴포넌트 배포 제외까지 함께 적용합니다.- NFD 라벨(
rebellions.ai/npu.present,rebellions.ai/npu.product,rebellions.ai/npu.family등)은 그대로 유지됩니다. 따라서 디바이스 자체는 계속 탐지할 수 있습니다.
노드의 워크로드 모드 선택¶
rebellions.ai/npu.workload.config는 단일 노드에 대해 RBLNClusterPolicy.spec.workloadType을 재정의합니다. 허용되는 값은 container와 vm-passthrough이며, 알 수 없는 값은 spec 기본값으로 되돌아갑니다.
이 라벨은 하이브리드 배포에 사용합니다. 대부분의 노드는 컨테이너 워크로드를 처리하고, 일부 노드는 NPU 패스스루를 사용하는 KubeVirt VM을 호스팅하는 구성입니다.
필요한 차트 설정¶
노드별 재정의가 동작하려면 클러스터 차원에서 vfioManager와 sandboxDevicePlugin이 모두 활성화되어 있어야 합니다. CRD는 아래처럼 container를 기본값으로 두면서 두 VM 패스스루 컴포넌트도 함께 활성화하는 하이브리드 패턴을 의도적으로 허용합니다.
라벨 설정¶
라벨이 설정된 각 노드에는 해당 모드에 맞는 컴포넌트만 배포됩니다.
- 컨테이너 노드: 드라이버, Device Plugin, Container Toolkit, Metrics
Exporter, NPU Feature Discovery, Validator(선택적으로
rbln-daemon및 DRA kubelet 플러그인). vm-passthrough노드:vfio-manager와sandbox-device-plugin만 배포됩니다. 디바이스가 게스트 VM을 위해vfio-pci에 바인딩되어 있으므로 호스트 드라이버는 의도적으로 제외됩니다.
사용 중인 노드의 모드 전환¶
워크로드 모드를 바꾸기 전에는 항상 노드를 drain하세요. 모드 전환 과정에서는 디바이스가 커널 드라이버와 vfio-pci 사이에서 재바인딩되므로, 아직 NPU를 사용 중인 컨테이너가 있으면 연결이 갑자기 끊길 수 있습니다.
라벨 우선순위¶
같은 노드에 두 라벨이 모두 설정되어 있다면 rebellions.ai/npu.deploy.skip=true가 우선합니다. workload.config 값과 무관하게 모든 npu.deploy.<component> 라벨이 제거됩니다.