본문으로 건너뛰기

Ceph Shared File SystemCephFS

경고

Ceph Shared File System을 사용하면 클라이언트는 메타데이터 관리를 위해 MDS(Metadata Server)와 통신해야하므로 Ceph Rados Block Device(RBD)를 사용하는 것에 비해 성능이 떨어집니다.

생성​

Operator 설정​

rook-ceph-values.yaml
csi:
enableCephfsDriver: true

csiCephFSProvisionerResource: |
- name : csi-provisioner
resource: null
- name : csi-resizer
resource: null
- name : csi-attacher
resource: null
- name : csi-snapshotter
resource: null
- name : csi-cephfsplugin
resource: null
- name : liveness-prometheus
resource: null

provisionerTolerations: []

csiCephFSPluginResource: |
- name : driver-registrar
resource: null
- name : csi-cephfsplugin
resource: null
- name : liveness-prometheus
resource: null

pluginTolerations: []

kubeletDirPath: /var/lib/kubelet

CephFilesystem 생성​

apiVersion: ceph.rook.io/v1
kind: CephFilesystem
spec:
metadataPool: {}
dataPool: []
metadataServer:
activeCount: 1
activeStandby: true
  • metadataPool
    • failureDomain: <crushType|osd>
      • 기본 값은 host입니다.
    • deviceClass: <deviceClass>
    • replicated
      • size: <size>
  • dataPools: []
    • name: <name>
    • failureDomain: <crushType|osd>
      • 기본 값은 host입니다.
    • deviceClass: <deviceClass>
    • replicated
      • size: <size>
  • metadataServer
    • activeCount: <count>
      • active 상태의 MDS의 수입니다.
      • active MDS + standby MDS 두 개가 쌍으로 생성되므로 총 MDS 수는 activeCount * 2 입니다.
    • activeStandby: <bool>
      • standby MDS를 standby_replay MDS로 설정할지 여부입니다.
      • standby_replay는 warm 캐시를 유지하므로 더 빠른 failover를 제공합니다.
    • resources
      • limits.memory설정은 mds_cache_memory_limit설정에 반영됩니다.
    • placement
      • nodeAffinity
      • podAffinity
      • podAntiAffinity
      • tolerations
      • topologySpreadConstraints
apiVersion: ceph.rook.io/v1
kind: CephFilesystemSubVolumeGroup
spec:
name: csi # 설정 안하면 .metadata.name이 사용됩니다.
filesystemName: <cephFilesystemName>
pinning:
distributed: 1

StorageClass 생성​

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
annotations:
storageclass.kubernetes.io/is-default-class: "false"
# operator에 CSI_DRIVER_NAME_PREFIX를 설정하지 않았다면 operator가 속한 namespace를 사용합니다.
provisioner: <operatorNamespace>.cephfs.csi.ceph.com
volumeBindingMode: Immediate
reclaimPolicy: Delete
allowVolumeExpansion: true
parameters:
clusterID: <cephClusterNamespace>
fsName: <cephFilesystemName>
pool: <cephFilesystemName>-<cephFilesystem.spec.dataPools.name>

csi.storage.k8s.io/fstype: ext4

csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner
csi.storage.k8s.io/provisioner-secret-namespace: <cephClusterNamespace>

csi.storage.k8s.io/controller-expand-secret-name: rook-csi-cephfs-provisioner
csi.storage.k8s.io/controller-expand-secret-namespace: <cephClusterNamespace>

csi.storage.k8s.io/controller-publish-secret-name: rook-csi-cephfs-provisioner
csi.storage.k8s.io/controller-publish-secret-namespace: <cephClusterNamespace>

csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node
csi.storage.k8s.io/node-stage-secret-namespace: <cephClusterNamespace>

삭제​

kubectl annotate cephfilesystemsubvolumegroups <name> \
rook.io/force-deletion="true" \
-n rook-ceph