콘텐츠로 이동

RBLN NPU Operator

RBLN NPU Operator는 Kubernetes 및 OpenShift 클러스터에서 RBLN NPU 제품군의 프로비저닝에 필요한 Rebellions 소프트웨어 구성 요소를 자동으로 배포하고 관리합니다. 단일 RBLNClusterPolicy 커스텀 리소스가 전체 워크플로를 주도하고 해당 정책이 생성되면, 오퍼레이터는 자동으로 다음 작업을 수행합니다.

  • Node Feature Discovery(NFD)를 활용한 하드웨어 탐지와 노드 라벨링
  • 컨테이너/VM 패스스루 2가지 워크로드 유형에 맞춘 디바이스 노출
  • VFIO 바인딩, 장치 플러그인, 메트릭 수집기 등 NPU 주변 구성요소 배포 및 상태 관리
  • OpenShift와 Vanilla Kubernetes 모두에서 동작하도록 RBAC/SCC 자동 구성

핵심 구성 요소

다음 표는 오퍼레이터가 배포·관리하는 주요 구성 요소와 역할을 요약합니다.

구성 요소 설명
Device Plugin rebellions/k8s-device-plugin 이미지를 사용해 rebellions.ai/ATOM 같은 리소스를 파드에 노출합니다. resourceList에 제품 카드별 리소스를 매핑합니다.
Sandbox Device Plugin VM 패스스루용 리소스로 rebellions.ai/ATOM_PT 등을 제공합니다. VFIO 체크 컨테이너와 동작하며 KubeVirt 환경을 대상으로 합니다.
VFIO Manager rebellions/rbln-vfio-manager 이미지와 vfio-manage.sh 스크립트를 ConfigMap으로 전달해 VFIO 바인딩/언바인딩을 담당합니다.
NPU Feature Discovery rebellions/rbln-npu-feature-discovery가 노드의 PCI-1eff 벤더 라벨을 식별해 rebellions.ai/npu.present 등을 설정합니다.
Metrics Exporter rebellions/rbln-metrics-exporter가 NPU 메트릭을 Prometheus 형식으로 노출합니다.
Operator Manager cmd/main.go에서 로드되는 컨트롤러가 단일 RBLNClusterPolicy만 허용하며, K8S Node와 구성요소의 DaemonSet 변화를 감시합니다.

NPU Operator 설치

RBLN NPU Operator Helm Chart는 Kubernetes 클러스터에서 RBLN NPU를 자동으로 탐지하고 필요한 디바이스 플러그인을 배포하며 관련 컴포넌트의 상태를 모니터링합니다. 빠르게 시작하려면 다음 단계를 따르세요.

  1. 사전 준비

    • Kubernetes 1.19+ 클러스터와 kubectl, helm 명령어 사용 가능
    • rbln-system처럼 오퍼레이터를 배치할 전용 네임스페이스 권장
    • NPU가 장착된 워커 노드와 Node Feature Discovery(NFD) 설치(차트에서 nfd.enabled=true로 함께 설치 가능)
  2. Helm 설치(필요 시)

    1
    2
    3
    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 \
      && chmod 700 get_helm.sh \
      && ./get_helm.sh
    

  3. Rebellions Helm 리포지토리 등록

    helm repo add rebellions https://rebellions-sw.github.io/rbln-npu-operator
    helm repo update
    

  4. NPU Operator 설치

    1
    2
    3
    helm install --wait --generate-name \
         -n rbln-system --create-namespace \
         rebellions/rbln-npu-operator
    

설치 확인

Helm 설치가 성공적으로 끝나면 RBLNClusterPolicy 커스텀 리소스가 생성되고 정상 동작하는지 먼저 확인합니다.

1
2
3
kubectl get rblnclusterpolicies.rebellions.ai -n rbln-system
NAME                  AGE
rbln-cluster-policy   8m

다음으로 rbln-system 네임스페이스에서 컨트롤러와 파드가 모두 실행 중인지 점검합니다.

1
2
3
4
5
6
kubectl get pods -n rbln-system
NAME                                             READY   STATUS    AGE
controller-manager-797798d7b8-rjzht              1/1     Running   8m
rbln-device-plugin-4qgxc                         1/1     Running   8m
rbln-metrics-exporter-jghbg                      1/1     Running   8m
rbln-npu-feature-discovery-zg47r                 1/1     Running   8m
  • 컨트롤러 컴포넌트: controller-manager-* 파드가 RBLNClusterPolicy를 상시 조율합니다.
  • 오퍼랜드: rbln-device-plugin, rbln-npu-feature-discovery, rbln-metrics-exporter가 디바이스 노출·라벨링·모니터링 관리를 담당합니다.

어떤 파드라도 Pending/CrashLoopBackOff 상태라면 kubectl logs <pod> -n rbln-system으로 로그를 확인하고 Helm values 설정과 선행 조건을 다시 점검하세요.

NPU 상태 확인

Kubernetes가 각 노드에서 인식한 NPU 용량을 조회해 디바이스 플러그인이 기대한 리소스를 노출했는지 확인합니다.

1
2
3
kubectl get nodes -o custom-columns=NAME:.metadata.name,NPUs:.status.capacity.'rebellions\.ai/ATOM'
NAME                            NPUs
rbln-npu-worker-01              16

샌드박스 워크로드 전용으로 rebellions.ai/ATOM_PT 같은 대체 리소스 이름을 사용한다면, 위 명령에서 해당 문자열로 바꿔서 동일하게 용량 컬럼을 확인하면 됩니다.

NPU 지원 Pod 생성

  1. 매니페스트 저장 (예: npu-demo-pod.yaml) — 아래와 같이 rebellions.ai/ATOM 리소스 4개를 요청합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: npu-pod
    spec:
      containers:
        - name: ubuntu
          image: ubuntu:latest
          imagePullPolicy: IfNotPresent
          command: ["/bin/bash", "-c", "--"]
          args: ["while true; do sleep 300000; done;"]
          resources:
            limits:
              rebellions.ai/ATOM: 4
    

  2. Pod 생성.

    kubectl apply -f npu-demo-pod.yaml
    

  3. Pod 상태 및 리소스 할당 확인.

    kubectl get pod npu-pod
    
    kubectl describe pod npu-pod 명령으로 요청한 NPU 리소스가 바인딩되어 NPU 지원 노드에 스케줄되었는지 확인합니다.

차트 커스터마이징 옵션

아래 표들은 Helm 값(values.yaml)에서 자주 조정되는 항목과 사용 시나리오를 범주별로 정리한 것입니다.

글로벌 및 의존성

주요 키 기본값 / 설명 커스터마이징 시나리오
name rbln – 모든 자식 리소스 접두사 다중 오퍼레이터 인스턴스를 같은 클러스터에 둘 때 충돌 방지
nfd.enabled false – NFD 동시 설치 여부 NFD가 없는 클러스터에서 빠르게 설치하려면 true
npuFeatureDiscovery.enabled / image.* true, rebellions/rbln-npu-feature-discovery:latest 수동 라벨링 체계가 있으면 비활성화

오퍼레이터 배포

주요 키 기본값 / 설명 커스터마이징 시나리오
operator.image.* rebellions/rbln-npu-operator:latest 사설 레지스트리 사용, 특정 버전 고정
operator.replicas 1 고가용성이 필요하면 2 이상
operator.resources CPU/메모리 요청·제한 클러스터 용량에 맞춰 리소스 튜닝
operator.service.* ClusterIP, 8443/8443 Ingress/서비스 메시 통합 시 포트·타입 변경
operator.securityContext.runAsNonRoot true 보안 요구사항에 따라 권한 조정
operator.affinity / tolerations 기본 비어 있음 컨트롤 플레인 전용 또는 특정 워커 고정 스케줄링

컨테이너 워크로드 스택

주요 키 기본값 / 설명 커스터마이징 시나리오
devicePlugin.enabled true 컨테이너 기반 워크로드면 유지, VM 전용이면 false
devicePlugin.image.* rebellions/k8s-device-plugin:latest 사설 레지스트리 사용, 특정 버전 고정
devicePlugin.resourceList[] rebellions.ai/ATOM 카드별 리소스 이름/프리픽스 추가
metricsExporter.enabled / image.* true, rebellions/rbln-metrics-exporter:latest 별도 모니터링 스택이 있으면 비활성화

VM 패스스루 스택

주요 키 기본값 / 설명 커스터마이징 시나리오
sandboxDevicePlugin.enabled false (기본 비활성) KubeVirt 등 VM 환경에서 true
sandboxDevicePlugin.resourceList[] rebellions.ai/ATOM_PT 카드 모델별 VFIO 리소스 이름 조정
sandboxDevicePlugin.vfioChecker.image.* rebellions/rbln-vfio-manager:latest 검증 컨테이너 이미지를 교체
vfioManager.enabled false VM passthrough 구성 시 true
vfioManager.image.* rebellions/rbln-vfio-manager:latest 사설 레지스트리 사용, 특정 버전 고정