콘텐츠로 이동

RDS 지원

RDS(Rebellions Direct Storage)는 Rebel100™ NPU가 노드의 NVMe에 직접 접근하는 기능입니다. Pod에서의 장치 확인은 RDS 튜토리얼에서 확인할 수 있습니다.

요구사항

항목 요구사항
하드웨어 Rebel100™ 노드와 RDS 전용 NVMe
드라이버 RDS 지원 이미지와 Operator가 관리하는 RBLNDriver
Container Toolkit v0.2.3 이상, CDI가 활성화된 런타임
할당 플러그인 Device Plugin v0.5.0 또는 DRA Kubelet Plugin v0.2.1
DRA 사용 시 Kubernetes 1.34 이상

클러스터의 CRD에서 RDS 설정 필드를 확인합니다.

kubectl explain rblnclusterpolicy.spec.rds

대상 NVMe 선택

NVMe 데이터 삭제

RDS가 선택한 NVMe 장치를 직접 제어합니다. 운영체제나 보존할 데이터가 없는 RDS 전용 장치만 지정해야 합니다.

RDS 풀은 rds.enabled: true와 노드 레이블 rebellions.ai/rds.present=true를 모두 만족하는 노드에 배포됩니다. 이 레이블은 관리자가 지정하며, 장치 준비 상태를 뜻하지 않습니다.

Helm 값 설명 기본값
rds.enabled 레이블로 선택한 노드에서 RDS 바인딩 활성화 false
rds.deviceSelection 노드별 NVMe 허용 목록 unset
rds.deviceSelection[].nodeName 필수. 대상 노드의 metadata.name unset
rds.deviceSelection[].targetBDFs 필수. NVMe PCI 주소 1개 이상. 예: 0000:08:00.0 unset

RDS가 활성화된 노드 중 deviceSelection에 없는 노드는 OS 디스크 등 보호 대상을 제외한 NVMe 장치를 자동으로 RDS에 바인딩합니다. 특정 장치만 사용하려면 대상 노드별 targetBDFs를 지정해야 합니다.

설정 적용

다음은 RDS를 활성화하는 Helm 설정입니다. 환경에 맞게 값을 수정한 뒤 npu-values.yaml에 추가하고 적용합니다.

rds:
  enabled: true
  deviceSelection:
    - nodeName: node-rebel100
      targetBDFs:
        - "0000:08:00.0"
driver:
  enabled: true
  image:
    tag: "<RDS_DRIVER_VERSION>"
containerToolkit:
  enabled: true

RDS 설정을 반영해 NPU Operator를 배포한 뒤 대상 노드에 레이블을 지정합니다.

kubectl label node node-rebel100 rebellions.ai/rds.present=true --overwrite
$ kubectl get node node-rebel100 \
  -o 'custom-columns=NAME:.metadata.name,RDS:.metadata.labels.rebellions\.ai/rds\.present'
NAME            RDS
node-rebel100   true

RBLNClusterPolicy 인스턴스와 해당 RBLNDriver 인스턴스가 ready가 되면 RDS 튜토리얼을 진행합니다.

노드에서 RDS를 활성화하면 드라이버 컨테이너가 시작 과정에서 rblnfs를 로드하고 선택한 NVMe를 바인딩합니다.

컨테이너 연결 방식

RDS 드라이버는 바인딩한 NVMe를 /dev/rblnfs* 장치 파일로 제공합니다. RBLN Container Toolkit은 이 장치의 CDI 설정을 만들고, NPU 할당 플러그인은 NPU를 요청한 Pod의 컨테이너에 RDS 장치를 연결합니다.

할당 플러그인 RDS 연결 방식
Device Plugin NPU를 할당할 때 /dev/rblnfs*가 있으면 rebellions.ai/rds=all CDI 장치 추가
DRA Kubelet Plugin RDS CDI 설정의 장치 노드를 NPU Claim의 CDI 설정에 추가

설정 변경과 비활성화

변경 전에 해당 노드의 NPU·RDS 워크로드를 종료해야 합니다.

범위 설정
전체 비활성화 values에서 rds.enabled를 false로 변경 후 적용
특정 노드 제외 아래 명령으로 노드 레이블 제거
kubectl label node node-rebel100 rebellions.ai/rds.present-

RDS를 비활성화해도 RDS 워크로드가 덮어쓴 데이터는 복구되지 않습니다. NVMe를 일반 스토리지로 다시 사용하기 전에 Linux NVMe 드라이버에 바인딩되어 있는지 확인해야 합니다.