αž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αž“αŸƒαž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž§αž”αž€αžšαžŽαŸαž•αŸ’αž‘αž»αž€αžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αžΎ Ceph αž‘αŸ…αž…αž„αŸ’αž€αŸ„αž˜ Kubernetes

Container Storage Interface (CSI) αž‚αžΊαž‡αžΆαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž”αž„αŸ’αžšαž½αž”αž”αž„αŸ’αžšαž½αž˜αžšαžœαžΆαž„ Kubernetes αž“αž·αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž™αžΎαž„αž”αžΆαž“αž“αž·αž™αžΆαž™αž™αŸ‰αžΆαž„αžαŸ’αž›αžΈαž’αŸ†αž–αžΈαžœαžΆαžšαž½αž…αž αžΎαž™ αž”αžΆαž“αž”αŸ’αžšαžΆαž”αŸ‹αž αžΎαž™αžαŸ’αž„αŸƒαž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž±αŸ’αž™αž”αžΆαž“αžŠαž·αžαžŠαž›αŸ‹αž“αžΌαžœαž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αŸƒ CSI αž“αž·αž„ CephαŸ– αž™αžΎαž„αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž” αž—αŸ’αž‡αžΆαž”αŸ‹αž§αž”αž€αžšαžŽαŸαž•αŸ’αž‘αž»αž€ Ceph αž‘αŸ…αž€αŸ’αžšαž»αž˜ Kubernetes αŸ”
αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžŸαžΆαž˜αž‰αŸ’αž‰αž”αž“αŸ’αžαž·αž…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸƒαž€αžΆαžšαž™αž›αŸ‹αžƒαžΎαž‰αž€αŸαžŠαŸ„αž™αŸ” αž™αžΎαž„αž˜αž·αž“αž–αž·αž…αžΆαžšαžŽαžΆαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Ceph αž“αž·αž„ Kubernetes clusters αž‘αŸαŸ”

αžαžΎαž’αŸ’αž“αž€αž†αŸ’αž„αž›αŸ‹αžαžΆαžαžΎαžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αŸ‰αžΆαž„αžŠαžΌαž…αž˜αŸ’αžαŸαž…?

αž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αž“αŸƒαž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž§αž”αž€αžšαžŽαŸαž•αŸ’αž‘αž»αž€αžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αžΎ Ceph αž‘αŸ…αž…αž„αŸ’αž€αŸ„αž˜ Kubernetes

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž’αŸ’αž“αž€αž˜αžΆαž“αž…αž„αŸ’αž€αŸ„αž˜ Kubernetes αž“αŸ…αž…αž»αž„αž˜αŸ’αžšαžΆαž˜αžŠαŸƒαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž”αžΆαž“αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ αž§αž‘αžΆαž αžšαžŽαŸ kubespray. αž˜αžΆαž“αž…αž„αŸ’αž€αŸ„αž˜ Ceph αž’αŸ’αžœαžΎαž€αžΆαžšαž“αŸ…αž€αŸ’αž”αŸ‚αžš - αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αžŠαŸ†αž‘αžΎαž„αžœαžΆαž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž˜αž½αž™αž“αŸαŸ‡αŸ” αžŸαŸ†αžŽαž»αŸ†αž“αŸƒαžŸαŸ€αžœαž—αŸ…αž›αŸαž„. αžαŸ’αž‰αž»αŸ†αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž“αž·αž™αžΆαž™αžαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž•αž›αž·αžαž€αž˜αŸ’αž˜αžšαžœαžΆαž„αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αž”αžŽαŸ’αžαžΆαž‰αžŠαŸ‚αž›αž˜αžΆαž“αž€αž˜αŸ’αžšαž·αžαž”αž‰αŸ’αž‡αžΌαž“αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹ 10 Gbit / s αŸ”

αž”αžΎαž˜αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡ αžαŸ„αŸ‡αž‘αŸ…!

αž‡αžΆαžŠαŸ†αž”αžΌαž„ αžŸαžΌαž˜αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αžαŸ’αž“αžΆαŸ†αž„ Ceph cluster αž˜αž½αž™ αž αžΎαž™αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαž’αŸ’αžœαžΈαŸ—αž‚αžΊαžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž›αŸ†αžŠαžΆαž”αŸ‹αŸ–

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 Policy)αŸ” αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€ 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

αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž”αŸ†αž–αŸαž‰ clusterIDαžŠαŸ‚αž›αž–αž½αž€αž™αžΎαž„αž”αžΆαž“αžŸαž·αž€αŸ’αžŸαžΆαžšαž½αž…αž αžΎαž™αžŠαŸ„αž™αž€αŸ’αžšαž»αž˜ ceph fsidαž αžΎαž™αž’αž“αž»αžœαžαŸ’αž manifest αž“αŸαŸ‡αž‘αŸ…αž€αŸ’αžšαž»αž˜ 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

αž’αŸ’αžœαžΈαŸ—αž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αžŽαžΆαžŸαŸ‹! αžαžΎαž“αŸαŸ‡αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž’αŸ’αžœαžΈαž“αŸ…αžαžΆαž„ Ceph?
αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΈαž”αžšαž·αž˜αžΆαžŽαž“αŸ…αž€αŸ’αž“αž»αž„αž’αžΆαž„ αž αžΎαž™αž˜αžΎαž›αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž”αžšαž·αž˜αžΆαžŽαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

rbd ls -p kube
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653  # Ρ‚ΡƒΡ‚, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π±ΡƒΠ΄Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ID Ρ‚ΠΎΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π΄Π°Π»Π° прСдыдущая ΠΊΠΎΠΌΠ°Π½Π΄Π°

αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŸαžΌαž˜αž˜αžΎαž›αž–αžΈαžšαž”αŸ€αž”αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ†αž αŸ†αž”αžšαž·αž˜αžΆαžŽ RBD αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”
αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ†αž αŸ†αžŸαŸ†αž‘αŸαž„αž“αŸ…αž€αŸ’αž“αž»αž„ manifest 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 (αžœαžΆαžαŸ†αžŽαžΆαž„αž±αŸ’αž™αž§αž”αž€αžšαžŽαŸαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹ Rados) αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž˜αž·αž“αž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“αž‘αŸαž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŸαŸαžœαžΆαž˜αžΈαž€αŸ’αžšαžΌαž•αŸ’αžŸαŸαž„αŸ—αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžαžΆαžŸαž“αŸαŸ‡αž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαŸ” CephFS αž‚αžΊαž›αŸ’αž’αž‡αžΆαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž―αž€αžŸαžΆαžšαž‡αžΆαž‡αžΆαž„αžšαžΌαž”αž—αžΆαž–αžαžΆαžŸαŸ”
αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒ Ceph αž“αž·αž„ Kubernetes clusters αž™αžΎαž„αž“αžΉαž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ 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 αŸ” αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžšαžœαžΆαž‘αŸαŸ”

αžŠαŸ†αž‘αžΎαž„αžαžΆαžšαžΆαž„ Helm αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜ 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

αžαŸ„αŸ‡αž”αž„αŸ’αž€αžΎαž Secret αž“αž·αž„ 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

αž…αžΌαžšαž™αžΎαž„αž”αŸ†αž–αŸαž‰αžœαžΆαž“αŸ…αž‘αžΈαž“αŸαŸ‡ clusterID αž“αž·αž„αž’αžΆαž…αž’αž“αž»αžœαžαŸ’αžαž”αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ 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 cluster αž˜αž½αž™ αž αžΎαž™αž’αž“αž»αžœαžαŸ’αžαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

# Π’ΠΎΡ‡ΠΊΠ° монтирования
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 αž αžΎαž™αž€αŸ‚αžŸαž˜αŸ’αžšαž½αž› manifest αžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ 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. αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž”αŸαžαžΆαž€αŸ†αž–αž»αž„αž”αž“αŸ’αž αžœαž‚αŸ’αž‚αžŸαž·αž€αŸ’αžŸαžΆαž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αžŠαŸ„αž™αž€αžΆαžšαž”αž‰αŸ’αž…αž»αŸ‡αžαž˜αŸ’αž›αŸƒ αž αžΎαž™αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΆαž“αž₯αž‘αŸ’αž’αž·αž–αž›αž›αžΎαžαŸ’αž›αžΉαž˜αžŸαžΆαžšαžšαž”αžŸαŸ‹αžœαžΆαŸ”

αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž’αžαŸ’αžαž”αž‘αŸ– Alexander Shvalov αžœαž·αžŸαŸ’αžœαž€αžšαž’αž“αž»αžœαžαŸ’αž αžŸαŸ…αž”αŸ’αžšαŸŠαžΈαžαž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ Kubernetes αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹ αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’ αž“αž·αž„αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαžœαž‚αŸ’αž‚αžŸαž·αž€αŸ’αžŸαžΆ Slurm αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com