본문 바로가기
문서 목차
ORKESTRIX설치

CephRBD CSI (블록 스토리지)

쿠버네티스 클러스터 노드에 Ceph RBD 블록 볼륨을 동적으로 프로비저닝하고 마운트하는 기능입니다.

QUANTUM C&S

쿠버네티스 클러스터 노드에 Ceph RBD 블록 볼륨을 동적으로 프로비저닝하고 마운트하는 기능입니다.

개인 USB 하드디스크처럼, 한 번에 파드 하나만 마운트해서 쓰는 블록 볼륨입니다(ReadWriteOnce). 데이터베이스처럼 파드 하나가 데이터를 독점하는 워크로드에 적합합니다.
이 항목은 iaas.yaml에 포함되어 있습니다. Ceph 단계만 따로 검증하거나 재실행하고 싶을 때 아래 플레이북을 직접 실행합니다. CephFS CSI와는 완전히 독립적인 별개의 드라이버라 순서 상관없이 따로 설치해도 됩니다.

사전 준비

스토리지 설치(Ceph 클러스터)가 먼저 끝나 있어야 합니다.

Ceph 20.2.4 이상을 쓰는 경우, 볼륨을 마운트할 모든 노드의 커널이 7.0 이상이어야 합니다(새 인증키 방식 AES256K 때문). 이 조건을 만족하지 못하면 이 CSI 설치 단계가 아니라 실제로 파드가 뜨면서 볼륨을 마운트하는 시점에 adding ceph secret key to kernel failed 에러로 실패합니다. 자세한 원인과 커널 업그레이드 방법은 스토리지 설치 문서의 "커널 버전 확인" 절을 참고하세요.

사전 준비 — 설정 변수 확인

플레이북 실행 전에 inventory/qks/group_vars/all/all-ceph.yaml의 CSI 블록 값을 확인합니다. 기본값 그대로도 동작하지만, 바꿔야 하는 상황이면 미리 여기서 조정합니다.

변수 기본값 설명
qks_csi_cephrbd_namespace qks-ceph 드라이버 Pod가 뜨는 네임스페이스
qks_csi_cephrbd_sc_name qks-ceph-block 생성되는 StorageClass 이름
qks_csi_cephrbd_version (빈 값) 비워두면 compatible-matrix.yaml이 kube_version을 보고 자동으로 ceph-csi 차트 버전을 계산합니다. 직접 고정하고 싶을 때만 값을 채웁니다.
qks_csi_cephrbd_pool_name {{ qks_cephadm_block_pool_name }} Ceph 쪽에 이미 만들어진 RBD 풀 이름을 자동 참조 — 직접 안 건드림
같은 블록에 있는 qks_csi_ceph_enabled는 실제로는 어떤 코드에서도 참조되지 않는 변수입니다. true/false 어느 쪽이어도 설치 결과에 영향이 없습니다.

StorageClass 이름을 바꾸는 경우 all-k8s.yaml의 kube_default_storage_class_name도 같이 맞춰야 기본 StorageClass로 지정됩니다. kube_version을 올렸는데 compatible-matrix.yaml에 해당 키가 없으면 플레이북이 그 자리에서 에러로 종료되니, 새 버전을 미리 매트릭스에 추가해야 합니다.

플레이북 실행

./install.sh ubuntu plays/qks-csi-cephrbd.yaml

설치 흐름

1. OS 준비           rbd 커널모듈 로드(전 노드), ceph-common 설치(클라이언트 노드)
2. 클러스터 정보 조회  admin 노드에서 fsid/모니터 주소/관리자 키를 실시간 조회
3. Helm 차트 배포     ceph-csi-rbd 차트 설치
4. K8s 리소스 생성    Secret, StorageClass(qks-ceph-block) 생성
5. 기본 StorageClass 지정

설치 내용

  • StorageClass qks-ceph-block (이 환경에서 기본값으로 지정됨)
  • qks-ceph 네임스페이스에 qks-cephrbd-ceph-csi-rbd-nodeplugin(DaemonSet, 노드마다 1개), qks-cephrbd-ceph-csi-rbd-provisioner(Deployment, 여러 개 복제) 파드

설치 확인

드라이버 파드 상태와 StorageClass 등록 여부를 먼저 확인합니다.

kubectl get pods -n qks-ceph | grep cephrbd
kubectl get storageclass qks-ceph-block
드라이버 파드가 Running인 것만으로는 실제로 볼륨을 마운트해서 쓸 수 있는지 확인되지 않습니다. 아래처럼 실제 PVC를 만들어 파드에 마운트해보는 것까지 해야 최종 확인입니다.

실제 PVC 생성 + 파드 마운트 테스트

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-rbd-pvc
spec:
  accessModes: ["ReadWriteOnce"]
  storageClassName: qks-ceph-block
  resources:
    requests:
      storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:
  name: test-rbd-pod
spec:
  containers:
  - name: busybox
    image: busybox
    command: ["sh", "-c", "echo hello-rbd > /mnt/test.txt && sleep 3600"]
    volumeMounts:
    - {name: data, mountPath: /mnt}
  volumes:
  - name: data
    persistentVolumeClaim: {claimName: test-rbd-pvc}
kubectl get pvc test-rbd-pvc      # STATUS: Bound 이어야 함
kubectl get pod test-rbd-pod      # READY: 1/1, STATUS: Running 이어야 함
kubectl exec test-rbd-pod -- cat /mnt/test.txt   # hello-rbd 출력되어야 함

확인 후 정리:

kubectl delete pod test-rbd-pod
kubectl delete pvc test-rbd-pvc

PVC가 Bound되면 Provisioner가 Ceph에 실제 RBD 이미지를 만든 것이고, Pod가 Running 상태로 파일을 정상 읽고 쓰면 Node Plugin이 그 볼륨을 컨테이너에 실제로 마운트한 것입니다. 커널 버전 요구사항을 충족하지 못한 노드에 파드가 스케줄되면 이 단계(마운트 시점)에서 실패합니다.

다음 단계