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

CephFS CSI (RWX 공유 파일)

다중 파드 간 공유 읽기/쓰기(RWX)가 가능한 CephFS 파일 시스템 볼륨을 제공하는 기능입니다.

QUANTUM C&S

다중 파드 간 공유 읽기/쓰기(RWX)가 가능한 CephFS 파일 시스템 볼륨을 제공하는 기능입니다.

여러 명이 같이 쓰는 공유 폴더처럼, 여러 파드가 동시에 읽고 쓸 수 있는 파일시스템입니다(ReadWriteMany). 여러 레플리카가 같은 설정/데이터를 공유해야 하는 워크로드에 적합합니다.
이 항목은 iaas.yaml에 포함되어 있습니다. Ceph 단계만 따로 검증하거나 재실행하고 싶을 때 아래 플레이북을 직접 실행합니다. CephRBD CSI와는 완전히 독립적인 별개의 드라이버라 순서 상관없이 따로 설치해도 됩니다.

사전 준비

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

Ceph 20.2.4 이상을 쓰는 경우, 볼륨을 마운트할 모든 노드의 커널이 7.0 이상이어야 합니다(새 인증키 방식 AES256K 때문). CephFS는 설치 과정에서 admin 노드가 직접 mount -t ceph를 실행해 서브디렉터리를 만드는 단계가 있어서, 커널이 낮으면 RBD보다 먼저 이 CSI 설치 단계 도중(파드 마운트 시점이 아니라) adding ceph secret key to kernel failed 에러로 바로 실패합니다. 자세한 원인과 커널 업그레이드 방법은 스토리지 설치 문서의 "커널 버전 확인" 절을 참고하세요.

사전 준비 — 설정 변수 확인

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

변수 기본값 설명
qks_csi_cephfs_namespace qks-ceph 드라이버 Pod가 뜨는 네임스페이스
qks_csi_cephfs_sc_name qks-ceph-cephfs 생성되는 StorageClass 이름
qks_csi_cephfs_version (빈 값) 비워두면 compatible-matrix.yaml이 kube_version을 보고 자동으로 ceph-csi 차트 버전을 계산합니다. 직접 고정하고 싶을 때만 값을 채웁니다.
qks_csi_cephfs_filesystem_name {{ qks_cephadm_filesystem_name }} Ceph 쪽에 이미 만들어진 CephFS 볼륨 이름을 자동 참조 — 직접 안 건드림
같은 블록에 있는 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-cephfs.yaml

설치 흐름

1. OS 준비              ceph-common 설치(클라이언트 노드)
2. 클러스터 정보 조회     admin 노드에서 fsid/모니터 주소/관리자 키를 실시간 조회
3. /cephfs 서브디렉터리   admin 노드에서 CephFS를 임시로 마운트해 export용 폴더를 한 번 생성
   생성 (CephFS 전용)      ← 커널 버전 요구사항에 걸리는 지점
4. Helm 차트 배포        ceph-csi-cephfs 차트 설치
5. K8s 리소스 생성       Secret, StorageClass(qks-ceph-cephfs) 생성

설치 내용

  • StorageClass qks-ceph-cephfs
  • qks-ceph 네임스페이스에 qks-cephfs-ceph-csi-cephfs-nodeplugin(DaemonSet), qks-cephfs-ceph-csi-cephfs-provisioner(Deployment) 파드

설치 확인

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

kubectl get pods -n qks-ceph | grep cephfs
kubectl get storageclass qks-ceph-cephfs
드라이버 파드가 Running인 것만으로는 CephFS의 핵심 기능인 여러 파드 동시 마운트(RWX)가 실제로 되는지 확인되지 않습니다. 아래처럼 서로 다른 파드 2개가 같은 PVC를 동시에 마운트해서 파일을 공유하는 것까지 확인해야 최종 확인입니다.

실제 PVC 생성 + 파드 2개 동시 마운트(RWX) 테스트

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-cephfs-pvc
spec:
  accessModes: ["ReadWriteMany"]
  storageClassName: qks-ceph-cephfs
  resources:
    requests:
      storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:
  name: test-cephfs-pod-a       # 쓰기 담당
spec:
  containers:
  - name: busybox
    image: busybox
    command: ["sh", "-c", "echo hello-cephfs > /mnt/test.txt && sleep 3600"]
    volumeMounts:
    - {name: data, mountPath: /mnt}
  volumes:
  - name: data
    persistentVolumeClaim: {claimName: test-cephfs-pvc}
---
apiVersion: v1
kind: Pod
metadata:
  name: test-cephfs-pod-b       # 읽기 담당 (pod-a와 같은 PVC를 동시에 마운트)
spec:
  containers:
  - name: busybox
    image: busybox
    command: ["sh", "-c", "sleep 3600"]
    volumeMounts:
    - {name: data, mountPath: /mnt}
  volumes:
  - name: data
    persistentVolumeClaim: {claimName: test-cephfs-pvc}
kubectl get pod test-cephfs-pod-a test-cephfs-pod-b   # 둘 다 READY 1/1, Running 이어야 함
kubectl exec test-cephfs-pod-b -- cat /mnt/test.txt   # pod-a가 쓴 hello-cephfs가 그대로 읽혀야 함

확인 후 정리:

kubectl delete pod test-cephfs-pod-a test-cephfs-pod-b
kubectl delete pvc test-cephfs-pvc

서로 다른 파드가 동시에 같은 볼륨을 마운트해서 한쪽이 쓴 파일을 다른 쪽이 그대로 읽으면, RBD(ReadWriteOnce)와 구분되는 CephFS만의 핵심 기능(ReadWriteMany)이 실제로 동작하는 것까지 증명된 것입니다. 커널 버전 요구사항을 충족하지 못한 노드에 파드가 스케줄되면 이 단계(마운트 시점)에서 실패합니다.

다음 단계