ื“ื•ื’ืžื” ืžืขืฉื™ืช ืœื—ื™ื‘ื•ืจ ืื—ืกื•ืŸ ืžื‘ื•ืกืก Ceph ืœืืฉื›ื•ืœ Kubernetes

Container Storage Interface (CSI) ื”ื•ื ืžืžืฉืง ืžืื•ื—ื“ ื‘ื™ืŸ Kubernetes ื•ืžืขืจื›ื•ืช ืื—ืกื•ืŸ. ื›ื‘ืจ ื“ื™ื‘ืจื ื• ืขืœ ื–ื” ื‘ืงืฆืจื” ืกื™ืคืจ, ื•ื”ื™ื•ื ื ืกืงื•ืจ ืžืงืจื•ื‘ ืืช ื”ืฉื™ืœื•ื‘ ืฉืœ CSI ื•-Ceph: ื ืจืื” ื›ื™ืฆื“ ืœื—ื‘ืจ ืื—ืกื•ืŸ Ceph ืœืืฉื›ื•ืœ Kubernetes.
ื”ืžืืžืจ ืžืกืคืง ื“ื•ื’ืžืื•ืช ืืžื™ืชื™ื•ืช, ืื ื›ื™ ืžืขื˜ ืžืคื•ืฉื˜ื•ืช ื›ื“ื™ ืœื”ืงืœ ืขืœ ื”ืชืคื™ืกื”. ืื™ื ื ื• ืฉื•ืงืœื™ื ื”ืชืงื ื” ื•ื”ื’ื“ืจื” ืฉืœ ืืฉื›ื•ืœื•ืช Ceph ื•-Kubernetes.

ืืชื” ืชื•ื”ื” ืื™ืš ื–ื” ืขื•ื‘ื“?

ื“ื•ื’ืžื” ืžืขืฉื™ืช ืœื—ื™ื‘ื•ืจ ืื—ืกื•ืŸ ืžื‘ื•ืกืก Ceph ืœืืฉื›ื•ืœ Kubernetes

ืื–, ื™ืฉ ืœืš ืืฉื›ื•ืœ Kubernetes ื‘ื”ื™ืฉื’ ื™ื“ืš, ืคืจื•ืก, ืœืžืฉืœ, ืงื•ื‘ืกืคืจื™ื™. ื™ืฉ ืืฉื›ื•ืœ Ceph ืฉืขื•ื‘ื“ ื‘ืงืจื‘ืช ืžืงื•ื - ืืชื” ื™ื›ื•ืœ ื’ื ืœื”ืชืงื™ืŸ ืื•ืชื•, ืœืžืฉืœ, ืขื ื–ื” ืกื˜ ืฉืœ ืกืคืจื™ ืžืฉื—ืง. ืื ื™ ืžืงื•ื•ื” ืฉืื™ืŸ ืฆื•ืจืš ืœื”ื–ื›ื™ืจ ืฉืœืฆื•ืจืš ื™ื™ืฆื•ืจ ื‘ื™ื ื™ื”ื ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืจืฉืช ื‘ืจื•ื—ื‘ ืคืก ืฉืœ ืœืคื—ื•ืช 10 Gbit/s.

ืื ื™ืฉ ืœืš ืืช ื›ืœ ื–ื”, ื‘ื•ื ื ืœืš!

ืจืืฉื™ืช, ื ืœืš ืœืื—ื“ ืžืฆืžืชื™ ืืฉื›ื•ืœ Ceph ื•ื ื‘ื“ื•ืง ืฉื”ื›ืœ ืชืงื™ืŸ:

ceph health
ceph -s

ืœืื—ืจ ืžื›ืŸ, ืžื™ื“ ื ื™ืฆื•ืจ ืžืื’ืจ ืขื‘ื•ืจ ื“ื™ืกืงื™ RBD:

ceph osd pool create kube 32
ceph osd pool application enable kube rbd

ื‘ื•ืื• ื ืขื‘ื•ืจ ืœืืฉื›ื•ืœ Kubernetes. ืฉื, ืงื•ื“ื ื›ืœ, ื ืชืงื™ืŸ ืืช ืžื ื”ืœ ื”ื”ืชืงืŸ ืฉืœ Ceph CSI ืขื‘ื•ืจ RBD. ื ืชืงื™ืŸ, ื›ืฆืคื•ื™, ื“ืจืš Helm.
ืื ื• ืžื•ืกื™ืคื™ื ืžืื’ืจ ืขื ืชืจืฉื™ื, ื ืงื‘ืœ ืงื‘ื•ืฆื” ืฉืœ ืžืฉืชื ื™ื ืœืชืจืฉื™ื ceph-csi-rbd:

helm repo add ceph-csi https://ceph.github.io/csi-charts
helm inspect values ceph-csi/ceph-csi-rbd > cephrbd.yml

ื›ืขืช ืขืœื™ืš ืœืžืœื ืืช ื”ืงื•ื‘ืฅ cephrbd.yml. ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ื’ืœื” ืืช ืžื–ื”ื” ื”ืืฉื›ื•ืœ ื•ื›ืชื•ื‘ื•ืช ื”-IP ืฉืœ ืฆื’ื™ื ื‘-Ceph:

ceph fsid  # ั‚ะฐะบ ะผั‹ ัƒะทะฝะฐะตะผ clusterID
ceph mon dump  # ะฐ ั‚ะฐะบ ัƒะฒะธะดะธะผ IP-ะฐะดั€ะตัะฐ ะผะพะฝะธั‚ะพั€ะพะฒ

ืื ื• ืžื›ื ื™ืกื™ื ืืช ื”ืขืจื›ื™ื ืฉื”ื•ืฉื’ื• ืœืงื•ื‘ืฅ cephrbd.yml. ื‘ืžืงื‘ื™ืœ, ืื ื• ืžืืคืฉืจื™ื ื™ืฆื™ืจืช ืžื“ื™ื ื™ื•ืช PSP (Pod Security Policies). ืืคืฉืจื•ื™ื•ืช ื‘ืกืขื™ืคื™ื nodeplugin ะธ ืžืกืคืง ื›ื‘ืจ ื‘ืงื•ื‘ืฅ, ื ื™ืชืŸ ืœืชืงืŸ ืื•ืชื ื›ืคื™ ืฉืžื•ืฆื’ ืœื”ืœืŸ:

csiConfig:
  - clusterID: "bcd0d202-fba8-4352-b25d-75c89258d5ab"
    monitors:
      - "v2:172.18.8.5:3300/0,v1:172.18.8.5:6789/0"
      - "v2:172.18.8.6:3300/0,v1:172.18.8.6:6789/0"
      - "v2:172.18.8.7:3300/0,v1:172.18.8.7:6789/0"

nodeplugin:
  podSecurityPolicy:
    enabled: true

provisioner:
  podSecurityPolicy:
    enabled: true

ืœืื—ืจ ืžื›ืŸ, ื›ืœ ืžื” ืฉื ื•ืชืจ ืœื ื• ื”ื•ื ืœื”ืชืงื™ืŸ ืืช ื”ืชืจืฉื™ื ื‘ืืฉื›ื•ืœ Kubernetes.

helm upgrade -i ceph-csi-rbd ceph-csi/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespace

ื ื”ื“ืจ, ืžื ื”ืœ ื”ืชืงืŸ RBD ืขื•ื‘ื“!
ื‘ื•ืื• ื ื™ืฆื•ืจ StorageClass ื—ื“ืฉ ื‘-Kubernetes. ื–ื” ืฉื•ื‘ ื“ื•ืจืฉ ืงืฆืช ื”ืชืขืกืงื•ืช ืขื Ceph.

ืื ื—ื ื• ื™ื•ืฆืจื™ื ืžืฉืชืžืฉ ื—ื“ืฉ ื‘-Ceph ื•ื ื•ืชื ื™ื ืœื• ื–ื›ื•ื™ื•ืช ื›ืชื™ื‘ื” ืœื‘ืจื™ื›ื” ืงื•ื‘:

ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'

ืขื›ืฉื™ื• ื‘ื•ืื• ื ืจืื” ืฉืžืคืชื— ื”ื’ื™ืฉื” ืขื“ื™ื™ืŸ ืฉื:

ceph auth get-key client.rbdkube

ื”ืคืงื•ื“ื” ืชื•ืฆื™ื ืžืฉื”ื• ื›ื–ื”:

AQCO9NJbhYipKRAAMqZsnqqS/T8OYQX20xIa9A==

ื‘ื•ืื• ื ื•ืกื™ืฃ ืืช ื”ืขืจืš ื”ื–ื” ืœ-Secret ื‘ืืฉื›ื•ืœ Kubernetes - ืื™ืคื” ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืื•ืชื• UserKey:

---
apiVersion: v1
kind: Secret
metadata:
  name: csi-rbd-secret
  namespace: ceph-csi-rbd
stringData:
  # ะ—ะฝะฐั‡ะตะฝะธั ะบะปัŽั‡ะตะน ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒัŽั‚ ะธะผะตะฝะธ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั ะธ ะตะณะพ ะบะปัŽั‡ัƒ, ะบะฐะบ ัƒะบะฐะทะฐะฝะพ ะฒ
  # ะบะปะฐัั‚ะตั€ะต Ceph. ID ัŽะทะตั€ะฐ ะดะพะปะถะตะฝ ะธะผะตั‚ัŒ ะดะพัั‚ัƒะฟ ะบ ะฟัƒะปัƒ,
  # ัƒะบะฐะทะฐะฝะฝะพะผัƒ ะฒ storage class
  userID: rbdkube
  userKey: <user-key>

ื•ืื ื—ื ื• ื™ื•ืฆืจื™ื ืืช ื”ืกื•ื“ ืฉืœื ื•:

kubectl apply -f secret.yaml

ืœืื—ืจ ืžื›ืŸ, ืื ื—ื ื• ืฆืจื™ื›ื™ื ืžื ื™ืคืกื˜ StorageClass ืžืฉื”ื• ื›ื–ื”:

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: csi-rbd-sc
provisioner: rbd.csi.ceph.com
parameters:
   clusterID: <cluster-id>
   pool: kube

   imageFeatures: layering

   # ะญั‚ะธ ัะตะบั€ะตั‚ั‹ ะดะพะปะถะฝั‹ ัะพะดะตั€ะถะฐั‚ัŒ ะดะฐะฝะฝั‹ะต ะดะปั ะฐะฒั‚ะพั€ะธะทะฐั†ะธะธ
   # ะฒ ะฒะฐัˆ ะฟัƒะป.
   csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
   csi.storage.k8s.io/provisioner-secret-namespace: ceph-csi-rbd
   csi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secret
   csi.storage.k8s.io/controller-expand-secret-namespace: ceph-csi-rbd
   csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
   csi.storage.k8s.io/node-stage-secret-namespace: ceph-csi-rbd

   csi.storage.k8s.io/fstype: ext4

reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
  - discard

ืฆืจื™ืš ืœืžืœื ืžื–ื”ื” ืืฉื›ื•ืœ, ืฉื›ื‘ืจ ืœืžื“ื ื• ืขืœ ื™ื“ื™ ื”ืฆื•ื•ืช ceph fsid, ื•ื”ื—ืœ ืืช ื”ืžื ื™ืคืกื˜ ื”ื–ื” ืขืœ ืืฉื›ื•ืœ Kubernetes:

kubectl apply -f storageclass.yaml

ื›ื“ื™ ืœื‘ื“ื•ืง ืื™ืš ื”ืืฉื›ื•ืœื•ืช ืขื•ื‘ื“ื™ื ื™ื—ื“, ื‘ื•ืื• ื ื™ืฆื•ืจ ืืช ื”-PVC ื”ื‘ื (ืชื‘ื™ืขืช ื ืคื— ืžืชืžืฉืš):

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rbd-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: csi-rbd-sc

ื‘ื•ืื• ื ืจืื” ืžื™ื“ ืื™ืš Kubernetes ื™ืฆืจ ืืช ื”ื›ืจืš ื”ืžื‘ื•ืงืฉ ื‘-Ceph:

kubectl get pvc
kubectl get pv

ื”ื›ืœ ื ืจืื” ื ื”ื“ืจ! ืื™ืš ื–ื” ื ืจืื” ื‘ืฆื“ ื”-Cep?
ืื ื• ืžืงื‘ืœื™ื ืจืฉื™ืžื” ืฉืœ ื›ืจื›ื™ื ื‘ื‘ืจื™ื›ื” ื•ืฆื•ืคื™ื ื‘ืžื™ื“ืข ืขืœ ื”ื ืคื— ืฉืœื ื•:

rbd ls -p kube
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653  # ั‚ัƒั‚, ะบะพะฝะตั‡ะฝะพ ะถะต, ะฑัƒะดะตั‚ ะดั€ัƒะณะพะน ID ั‚ะพะผะฐ, ะบะพั‚ะพั€ั‹ะน ะฒั‹ะดะฐะปะฐ ะฟั€ะตะดั‹ะดัƒั‰ะฐั ะบะพะผะฐะฝะดะฐ

ืขื›ืฉื™ื• ื‘ื•ืื• ื ืจืื” ืื™ืš ืฉื™ื ื•ื™ ื’ื•ื“ืœ ืฉืœ ื ืคื— RBD ืขื•ื‘ื“.
ืฉื ื” ืืช ื’ื•ื“ืœ ื”ื ืคื— ื‘ืžื ื™ืคืกื˜ pvc.yaml ืœ-2Gi ื•ื”ื—ืœ ืื•ืชื•:

kubectl apply -f pvc.yaml

ื‘ื•ื ื ื—ื›ื” ืฉื”ืฉื™ื ื•ื™ื™ื ื™ื™ื›ื ืกื• ืœืชื•ืงืฃ ื•ื ืกืชื›ืœ ืฉื•ื‘ ืขืœ ื’ื•ื“ืœ ืขื•ืฆืžืช ื”ืงื•ืœ.

rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653

kubectl get pv
kubectl get pvc

ืื ื• ืจื•ืื™ื ืฉื’ื•ื“ืœ ื”-PVC ืœื ื”ืฉืชื ื”. ื›ื“ื™ ืœื‘ืจืจ ืžื“ื•ืข, ืืชื” ื™ื›ื•ืœ ืœืฉืื•ืœ Kubernetes ืขื‘ื•ืจ ืชื™ืื•ืจ YAML ืฉืœ PVC:

kubectl get pvc rbd-pvc -o yaml

ื”ื ื” ื”ื‘ืขื™ื”:

ื”ื•ื“ืขื”: ืžื—ื›ื” ืฉื”ืžืฉืชืžืฉ ื™ืชื—ื™ืœ (ืžื—ื“ืฉ) ืคื•ื“ ื›ื“ื™ ืœืกื™ื™ื ืืช ืฉื™ื ื•ื™ ื’ื•ื“ืœ ืžืขืจื›ืช ื”ืงื‘ืฆื™ื ืฉืœ ืืžืฆืขื™ ื”ืื—ืกื•ืŸ ื‘ืฆื•ืžืช. ืกื•ื’: FileSystemResizePending

ื›ืœื•ืžืจ, ื”ื“ื™ืกืง ื’ื“ืœ, ืื‘ืœ ืžืขืจื›ืช ื”ืงื‘ืฆื™ื ื‘ื• ืœื.
ื›ื“ื™ ืœื”ื’ื“ื™ืœ ืืช ืžืขืจื›ืช ื”ืงื‘ืฆื™ื, ืขืœื™ืš ืœื”ืขืœื•ืช ืืช ืขื•ืฆืžืช ื”ืงื•ืœ. ื‘ืืจืฆื ื•, ื”-PVC/PV ืฉื ื•ืฆืจ ืื™ื ื• ืžืฉืžืฉ ื›ื™ื•ื ื‘ืฉื•ื ืฆื•ืจื”.

ืื ื• ื™ื›ื•ืœื™ื ืœื™ืฆื•ืจ Pod ื‘ื“ื™ืงื”, ืœืžืฉืœ ื›ืš:

---
apiVersion: v1
kind: Pod
metadata:
  name: csi-rbd-demo-pod
spec:
  containers:
    - name: web-server
      image: nginx:1.17.6
      volumeMounts:
        - name: mypvc
          mountPath: /data
  volumes:
    - name: mypvc
      persistentVolumeClaim:
        claimName: rbd-pvc
        readOnly: false

ื•ืขื›ืฉื™ื• ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ PVC:

kubectl get pvc

ื”ื’ื•ื“ืœ ื”ืฉืชื ื”, ื”ื›ืœ ื‘ืกื“ืจ.

ื‘ื—ืœืง ื”ืจืืฉื•ืŸ, ืขื‘ื“ื ื• ืขื ื”ืชืงืŸ RBD block (ื–ื” ืžื™ื™ืฆื’ Rados Block Device), ืืš ืœื ื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช ืื ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ืฉื•ื ื™ื ืฆืจื™ื›ื™ื ืœืขื‘ื•ื“ ืขื ื”ื“ื™ืกืง ื”ื–ื” ื‘ื• ื–ืžื ื™ืช. CephFS ืžืชืื™ื ื”ืจื‘ื” ื™ื•ืชืจ ืœืขื‘ื•ื“ื” ืขื ืงื‘ืฆื™ื ื•ืœื ืขื ืชืžื•ื ื•ืช ื“ื™ืกืง.
ื‘ืืžืฆืขื•ืช ื”ื“ื•ื’ืžื” ืฉืœ ืืฉื›ื•ืœื•ืช Ceph ื•-Kubernetes, ื ื’ื“ื™ืจ ืืช ื”ืชืฆื•ืจื” ืฉืœ CSI ื•ื™ืฉื•ื™ื•ืช ื ื—ื•ืฆื•ืช ืื—ืจื•ืช ืœืขื‘ื•ื“ื” ืขื CephFS.

ื‘ื•ืื• ื ืงื‘ืœ ืืช ื”ืขืจื›ื™ื ืžืชืจืฉื™ื Helm ื”ื—ื“ืฉ ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื:

helm inspect values ceph-csi/ceph-csi-cephfs > cephfs.yml

ืฉื•ื‘ ืืชื” ืฆืจื™ืš ืœืžืœื ืืช ื”ืงื•ื‘ืฅ cephfs.yml. ื›ืžื• ืงื•ื“ื, ืคืงื•ื“ื•ืช Ceph ื™ืขื–ืจื•:

ceph fsid
ceph mon dump

ืžืœื ืืช ื”ืงื•ื‘ืฅ ื‘ืขืจื›ื™ื ื›ืžื• ื–ื”:

csiConfig:
  - clusterID: "bcd0d202-fba8-4352-b25d-75c89258d5ab"
    monitors:
      - "172.18.8.5:6789"
      - "172.18.8.6:6789"
      - "172.18.8.7:6789"

nodeplugin:
  httpMetrics:
    enabled: true
    containerPort: 8091
  podSecurityPolicy:
    enabled: true

provisioner:
  replicaCount: 1
  podSecurityPolicy:
    enabled: true

ืฉื™ื ืœื‘ ืฉื›ืชื•ื‘ื•ืช ื”ืฆื’ ืžืฆื•ื™ื ื•ืช ื‘ื˜ื•ืคืก ื”ืคืฉื•ื˜ ื›ืชื•ื‘ืช:ืคื•ืจื˜. ื›ื“ื™ ืœื”ืขืœื•ืช cephfs ืขืœ ืฆื•ืžืช, ื”ื›ืชื•ื‘ื•ืช ื”ืœืœื• ืžื•ืขื‘ืจื•ืช ืœืžื•ื“ื•ืœ ื”ืงืจื ืœ, ืฉืขื“ื™ื™ืŸ ืœื ื™ื•ื“ืข ืื™ืš ืœืขื‘ื•ื“ ืขื ืคืจื•ื˜ื•ืงื•ืœ ื”ืžื•ื ื™ื˜ื•ืจ v2.
ืื ื• ืžืฉื ื™ื ืืช ื”ื™ืฆื™ืื” ืขื‘ื•ืจ httpMetrics (Prometheus ื™ื’ื™ืข ืœืฉื ืœื ื™ื˜ื•ืจ ืžื“ื“ื™ื) ื›ืš ืฉื”ื™ื ืœื ืชืชื ื’ืฉ ืขื nginx-proxy, ืฉืžื•ืชืงืŸ ืขืœ ื™ื“ื™ Kubespray. ื™ื™ืชื›ืŸ ืฉืœื ืชื–ื“ืงืง ืœื–ื”.

ื”ืชืงืŸ ืืช ืชืจืฉื™ื ื”ื”ื’ื” ื‘ืืฉื›ื•ืœ Kubernetes:

helm upgrade -i ceph-csi-cephfs ceph-csi/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespace

ื‘ื•ื ื ืœืš ืœื—ื ื•ืช ื”ื ืชื•ื ื™ื ืฉืœ Ceph ื›ื“ื™ ืœื™ืฆื•ืจ ืฉื ืžืฉืชืžืฉ ื ืคืจื“. ื”ืชื™ืขื•ื“ ืžืฆื™ื™ืŸ ืฉื”ืกืคืง CephFS ื“ื•ืจืฉ ื”ืจืฉืื•ืช ื’ื™ืฉื” ืœืžื ื”ืœื™ ืืฉื›ื•ืœื•ืช. ืื‘ืœ ื ื™ืฆื•ืจ ืžืฉืชืžืฉ ื ืคืจื“ fs ืขื ื–ื›ื•ื™ื•ืช ืžื•ื’ื‘ืœื•ืช:

ceph auth get-or-create client.fs mon 'allow r' mgr 'allow rw' mds 'allow rws' osd 'allow rw pool=cephfs_data, allow rw pool=cephfs_metadata'

ื•ื‘ื•ืื• ื ืกืชื›ืœ ืžื™ื“ ืขืœ ืžืคืชื— ื”ื’ื™ืฉื” ืฉืœื•, ื ื–ื“ืงืง ืœื• ืžืื•ื—ืจ ื™ื•ืชืจ:

ceph auth get-key client.fs

ื‘ื•ืื• ื ื™ืฆื•ืจ ืกื•ื“ ื•- StorageClass ื ืคืจื“ื™ื.
ืฉื•ื ื“ื‘ืจ ื—ื“ืฉ, ื›ื‘ืจ ืจืื™ื ื• ืืช ื–ื” ื‘ื“ื•ื’ืžื” ืฉืœ RBD:

---
apiVersion: v1
kind: Secret
metadata:
  name: csi-cephfs-secret
  namespace: ceph-csi-cephfs
stringData:
  # ะะตะพะฑั…ะพะดะธะผะพ ะดะปั ะดะธะฝะฐะผะธั‡ะตัะบะธ ัะพะทะดะฐะฒะฐะตะผั‹ั… ั‚ะพะผะพะฒ
  adminID: fs
  adminKey: <ะฒั‹ะฒะพะด ะฟั€ะตะดั‹ะดัƒั‰ะตะน ะบะพะผะฐะฝะดั‹>

ื™ื™ืฉื•ื ื”ืžื ื™ืคืกื˜:

kubectl apply -f secret.yaml

ื•ืขื›ืฉื™ื• - StorageClass ื ืคืจื“:

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: csi-cephfs-sc
provisioner: cephfs.csi.ceph.com
parameters:
  clusterID: <cluster-id>

  # ะ˜ะผั ั„ะฐะนะปะพะฒะพะน ัะธัั‚ะตะผั‹ CephFS, ะฒ ะบะพั‚ะพั€ะพะน ะฑัƒะดะตั‚ ัะพะทะดะฐะฝ ั‚ะพะผ
  fsName: cephfs

  # (ะฝะตะพะฑัะทะฐั‚ะตะปัŒะฝะพ) ะŸัƒะป Ceph, ะฒ ะบะพั‚ะพั€ะพะผ ะฑัƒะดัƒั‚ ั…ั€ะฐะฝะธั‚ัŒัั ะดะฐะฝะฝั‹ะต ั‚ะพะผะฐ
  # pool: cephfs_data

  # (ะฝะตะพะฑัะทะฐั‚ะตะปัŒะฝะพ) ะ ะฐะทะดะตะปะตะฝะฝั‹ะต ะทะฐะฟัั‚ั‹ะผะธ ะพะฟั†ะธะธ ะผะพะฝั‚ะธั€ะพะฒะฐะฝะธั ะดะปั Ceph-fuse
  # ะฝะฐะฟั€ะธะผะตั€:
  # fuseMountOptions: debug

  # (ะฝะตะพะฑัะทะฐั‚ะตะปัŒะฝะพ) ะ ะฐะทะดะตะปะตะฝะฝั‹ะต ะทะฐะฟัั‚ั‹ะผะธ ะพะฟั†ะธะธ ะผะพะฝั‚ะธั€ะพะฒะฐะฝะธั CephFS ะดะปั ัะดั€ะฐ
  # ะกะผ. man mount.ceph ั‡ั‚ะพะฑั‹ ัƒะทะฝะฐั‚ัŒ ัะฟะธัะพะบ ัั‚ะธั… ะพะฟั†ะธะน. ะะฐะฟั€ะธะผะตั€:
  # kernelMountOptions: readdir_max_bytes=1048576,norbytes

  # ะกะตะบั€ะตั‚ั‹ ะดะพะปะถะฝั‹ ัะพะดะตั€ะถะฐั‚ัŒ ะดะพัั‚ัƒะฟั‹ ะดะปั ะฐะดะผะธะฝะฐ ะธ/ะธะปะธ ัŽะทะตั€ะฐ Ceph.
  csi.storage.k8s.io/provisioner-secret-name: csi-cephfs-secret
  csi.storage.k8s.io/provisioner-secret-namespace: ceph-csi-cephfs
  csi.storage.k8s.io/controller-expand-secret-name: csi-cephfs-secret
  csi.storage.k8s.io/controller-expand-secret-namespace: ceph-csi-cephfs
  csi.storage.k8s.io/node-stage-secret-name: csi-cephfs-secret
  csi.storage.k8s.io/node-stage-secret-namespace: ceph-csi-cephfs

  # (ะฝะตะพะฑัะทะฐั‚ะตะปัŒะฝะพ) ะ”ั€ะฐะนะฒะตั€ ะผะพะถะตั‚ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะปะธะฑะพ ceph-fuse (fuse), 
  # ะปะธะฑะพ ceph kernelclient (kernel).
  # ะ•ัะปะธ ะฝะต ัƒะบะฐะทะฐะฝะพ, ะฑัƒะดะตั‚ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒัั ะผะพะฝั‚ะธั€ะพะฒะฐะฝะธะต ั‚ะพะผะพะฒ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ,
  # ัั‚ะพ ะพะฟั€ะตะดะตะปัะตั‚ัั ะฟะพะธัะบะพะผ ceph-fuse ะธ mount.ceph
  # mounter: kernel
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
  - debug

ื‘ื•ื ื ืžืœื ืืช ื–ื” ื›ืืŸ ืžื–ื”ื” ืืฉื›ื•ืœ ื•ื™ืฉื™ื ื‘-Kubernetes:

kubectl apply -f storageclass.yaml

ะŸั€ะพะฒะตั€ะบะฐ

ื›ื“ื™ ืœื‘ื“ื•ืง, ื›ืžื• ื‘ื“ื•ื’ืžื” ื”ืงื•ื“ืžืช, ื‘ื•ืื• ื ื™ืฆื•ืจ PVC:

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: csi-cephfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  storageClassName: csi-cephfs-sc

ื•ื‘ื“ื•ืง ืืช ื”ื ื•ื›ื—ื•ืช ืฉืœ PVC/PV:

kubectl get pvc
kubectl get pv

ืื ืืชื” ืจื•ืฆื” ืœื”ืกืชื›ืœ ืขืœ ืงื‘ืฆื™ื ื•ืกืคืจื™ื•ืช ื‘-CephFS, ืืชื” ื™ื›ื•ืœ ืœื˜ืขื•ืŸ ืืช ืžืขืจื›ืช ื”ืงื‘ืฆื™ื ื”ื–ื• ืื™ืคืฉื”ื•. ืœืžืฉืœ ื›ืคื™ ืฉืžื•ืฆื’ ืœื”ืœืŸ.

ื‘ื•ืื• ื ืขื‘ื•ืจ ืœืื—ื“ ืžืฆืžืชื™ ืืฉื›ื•ืœ Ceph ื•ื ื‘ืฆืข ืืช ื”ืคืขื•ืœื•ืช ื”ื‘ืื•ืช:

# ะขะพั‡ะบะฐ ะผะพะฝั‚ะธั€ะพะฒะฐะฝะธั
mkdir -p /mnt/cephfs

# ะกะพะทะดะฐั‘ะผ ั„ะฐะนะป ั ะบะปัŽั‡ะพะผ ะฐะดะผะธะฝะธัั‚ั€ะฐั‚ะพั€ะฐ
ceph auth get-key client.admin >/etc/ceph/secret.key

# ะ”ะพะฑะฐะฒะปัะตะผ ะทะฐะฟะธััŒ ะฒ /etc/fstab
# !! ะ˜ะทะผะตะฝัะตะผ ip ะฐะดั€ะตั ะฝะฐ ะฐะดั€ะตั ะฝะฐัˆะตะณะพ ัƒะทะปะฐ
echo "172.18.8.6:6789:/ /mnt/cephfs ceph name=admin,secretfile=/etc/ceph/secret.key,noatime,_netdev    0       2" >> /etc/fstab

mount /mnt/cephfs

ื›ืžื•ื‘ืŸ, ื”ืจื›ื‘ื” ืฉืœ FS ืขืœ ืฆื•ืžืช Ceph ื›ื–ื” ืžืชืื™ืžื” ืจืง ืœืžื˜ืจื•ืช ืื™ืžื•ืŸ, ื•ื–ื” ืžื” ืฉืื ื—ื ื• ืขื•ืฉื™ื ื‘- ืงื•ืจืกื™ ืขื™ืœืคื•ืŸ. ืื ื™ ืœื ื—ื•ืฉื‘ ืฉืžื™ืฉื”ื• ื™ืขืฉื” ืืช ื–ื” ื‘ื”ืคืงื”; ื™ืฉ ืกื™ื›ื•ืŸ ื’ื‘ื•ื” ืœืžื—ื™ืงืช ืงื‘ืฆื™ื ื—ืฉื•ื‘ื™ื ื‘ื˜ืขื•ืช.

ื•ืœื‘ืกื•ืฃ, ื‘ื•ืื• ื ื‘ื“ื•ืง ืื™ืš ื“ื‘ืจื™ื ืขื•ื‘ื“ื™ื ืขื ืฉื™ื ื•ื™ ื’ื•ื“ืœ ื ืคื—ื™ื ื‘ืžืงืจื” ืฉืœ CephFS. ื ื—ื–ื•ืจ ืœ-Kubernetes ื•ื ืขืจื•ืš ืืช ื”ืžื ื™ืคืกื˜ ืฉืœื ื• ืœ-PVC - ื”ื’ื“ืœ ืืช ื”ื’ื•ื“ืœ ืฉื, ืœืžืฉืœ, ืœ-7Gi.

ื”ื‘ื” ื ื—ื™ืœ ืืช ื”ืงื•ื‘ืฅ ื”ืขืจื•ืš:

kubectl apply -f pvc.yaml

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืกืคืจื™ื™ื” ื”ืžื•ืชืงื ืช ื›ื“ื™ ืœืจืื•ืช ื›ื™ืฆื“ ื”ืฉืชื ืชื” ื”ืžื›ืกื”:

getfattr -n ceph.quota.max_bytes <ะบะฐั‚ะฐะปะพะณ-ั-ะดะฐะฝะฝั‹ะผะธ>

ื›ื“ื™ ืฉื”ืคืงื•ื“ื” ื”ื–ื• ืชืขื‘ื•ื“, ื™ื™ืชื›ืŸ ืฉืชืฆื˜ืจืš ืœื”ืชืงื™ืŸ ืืช ื”ื—ื‘ื™ืœื” ื‘ืžืขืจื›ืช ืฉืœืš attr.

ื”ืขื™ื ื™ื™ื ืžืคื—ื“ื•ืช, ืื‘ืœ ื”ื™ื“ื™ื™ื ืžืกืชื“ืจื•ืช

ื›ืœ ื”ืœื—ืฉื™ื ื”ืืœื” ื•ื’ื™ืœื•ื™ื™ YAML ื”ืืจื•ื›ื™ื ื ืจืื™ื ืžืกื•ื‘ื›ื™ื ืขืœ ืคื ื™ ื”ืฉื˜ื—, ืื‘ืœ ื‘ืคื•ืขืœ, ืชืœืžื™ื“ื™ Slurm ืžื‘ื™ื ื™ื ืื•ืชื ื“ื™ ืžื”ืจ.
ื‘ืžืืžืจ ื–ื” ืœื ื ื›ื ืกื ื• ืœืขื•ืžืง ื”ื’'ื•ื ื’ืœ - ื™ืฉ ืชื™ืขื•ื“ ืจืฉืžื™ ืœื›ืš. ืื ืืชื” ืžืขื•ื ื™ื™ืŸ ื‘ืคืจื˜ื™ื ืฉืœ ื”ื’ื“ืจืช ืื—ืกื•ืŸ Ceph ืขื ืืฉื›ื•ืœ Kubernetes, ืงื™ืฉื•ืจื™ื ืืœื” ื™ืขื–ืจื•:

ืขืงืจื•ื ื•ืช ื›ืœืœื™ื™ื ืฉืœ Kubernetes ืœืขื‘ื•ื“ ืขื ื ืคื—ื™ื
ืชื™ืขื•ื“ RBD
ืฉื™ืœื•ื‘ RBD ื•-Kubernetes ืžื ืงื•ื“ืช ืžื‘ื˜ ืฉืœ Ceph
ืฉื™ืœื•ื‘ RBD ื•-Kubernetes ืžื ืงื•ื“ืช ืžื‘ื˜ ืฉืœ CSI
ืชื™ืขื•ื“ ื›ืœืœื™ ืฉืœ CephFS
ืฉื™ืœื•ื‘ CephFS ื•-Kubernetes ืžื ืงื•ื“ืช ืžื‘ื˜ ืฉืœ CSI

ื‘ืงื•ืจืก Slurm ื‘ืกื™ืก Kubernetes ืืชื” ื™ื›ื•ืœ ืœืœื›ืช ืงืฆืช ื™ื•ืชืจ ืจื—ื•ืง ื•ืœืคืจื•ืก ื™ื™ืฉื•ื ืืžื™ืชื™ ื‘-Kubernetes ืฉื™ืฉืชืžืฉ ื‘-CephFS ื›ืื—ืกื•ืŸ ืงื‘ืฆื™ื. ื‘ืืžืฆืขื•ืช ื‘ืงืฉื•ืช GET/POST ืชื•ื›ืœ ืœื”ืขื‘ื™ืจ ืงื‘ืฆื™ื ื•ืœืงื‘ืœ ืื•ืชื ืž-Ceph.

ื•ืื ืืชื” ืžืชืขื ื™ื™ืŸ ื™ื•ืชืจ ื‘ืื—ืกื•ืŸ ื ืชื•ื ื™ื, ื”ื™ืจืฉื ืงื•ืจืก ื—ื“ืฉ ืขืœ Ceph. ื‘ื–ืžืŸ ืฉืžื‘ื—ืŸ ื”ื‘ื˜ื ื ืžืฉืš, ื ื™ืชืŸ ืœืงื‘ืœ ืืช ื”ืงื•ืจืก ื‘ื”ื ื—ื” ื•ืœื”ืฉืคื™ืข ืขืœ ืชื•ื›ื ื•.

ืžื—ื‘ืจ ื”ืžืืžืจ: ืืœื›ืกื ื“ืจ ืฉื•ื•ืืœื•ื‘, ืžื”ื ื“ืก ื‘ืคื•ืขืœ ืกืื•ืช'ื‘ืจื™ื“ื’ ', ืžื ื”ืœ Kubernetes ืžื•ืกืžืš, ืžื—ื‘ืจ ื•ืžืคืชื— ืงื•ืจืกื™ Slurm.

ืžืงื•ืจ: www.habr.com