ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π±Π°Π·ΠΈΡ€Π°Π½ΠΎ Π½Π° Ceph со кластСрот Kubernetes

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠΎΡ‚ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ (CSI) Π΅ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Kubernetes ΠΈ систСмитС Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅. Π’Π΅ΡœΠ΅ Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€Π°Π²ΠΌΠ΅ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΆΠ°, Π° дСнСс ќС ја Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎΠ΄Π΅Ρ‚Π°Π»Π½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° CSI ΠΈ Ceph: ќС ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΠΏΠΎΠ²Ρ€Π·Π΅Ρ‚Π΅ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Ceph Π΄ΠΎ кластСрот ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ.
Написот Π΄Π°Π²Π° вистински, ΠΈΠ°ΠΊΠΎ ΠΌΠ°Π»ΠΊΡƒ поСдноставСни ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° полСсно ΠΏΠ΅Ρ€Ρ†Π΅ΠΏΡ†ΠΈΡ˜Π°. НС размислувамС Π΄Π° инсталирамС ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ кластСри 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

АјдС Π΄Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌΠ΅ ΠΊΠΎΠ½ кластСрот ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ. Π’Π°ΠΌΡƒ, ΠΏΡ€Π΅Π΄ сè, ќС Π³ΠΎ инсталирамС Π΄Ρ€Π°Ρ˜Π²Π΅Ρ€ΠΎΡ‚ 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. Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, Π΄ΠΎΠ·Π½Π°Ρ˜Ρ‚Π΅ Π³ΠΈ ID Π½Π° кластСрот ΠΈ IP адрСситС Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π²ΠΎ Ceph:

ceph fsid  # Ρ‚Π°ΠΊ ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ clusterID
ceph mon dump  # Π° Ρ‚Π°ΠΊ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ IP-адрСса ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΎΠ²

Π”ΠΎΠ±ΠΈΠ΅Π½ΠΈΡ‚Π΅ врСдности Π³ΠΈ внСсувамС Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° cephrbd.yml. Π’ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅, ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°ΠΌΠ΅ ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π·Π° PSP (Pod Security Policies). ΠžΠΏΡ†ΠΈΠΈ Π²ΠΎ Π΄Π΅Π»ΠΎΠ²ΠΈ јазол ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°Ρ‡ вСќС Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°, Ρ‚ΠΈΠ΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° сС ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π°Ρ‚ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ°Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ:

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 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

Π’Ρ€Π΅Π±Π° Π΄Π° сС ΠΏΠΎΠΏΠΎΠ»Π½ΠΈ ΠΊΠ»Π°ΡΡ‚Π΅Ρ€Π˜Π”, ΡˆΡ‚ΠΎ вСќС Π³ΠΎ Π½Π°ΡƒΡ‡ΠΈΠ²ΠΌΠ΅ ΠΎΠ΄ Ρ‚ΠΈΠΌΠΎΡ‚ Ρ†Π΅Ρ„ фсид, ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Ρ‚Π΅ Π³ΠΎ овој манифСст Π½Π° кластСрот Kubernetes:

kubectl apply -f storageclass.yaml

Π—Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌΠ΅ ΠΊΠ°ΠΊΠΎ кластСритС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ Π·Π°Π΅Π΄Π½ΠΎ, ајдС Π΄Π° Π³ΠΎ создадСмС слСдниов ΠŸΠ’Π¦ (ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Π½ΠΎ Π±Π°Ρ€Π°ΡšΠ΅ Π·Π° Π²ΠΎΠ»ΡƒΠΌΠ΅Π½):

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

Π‘Π΅ Ρ‡ΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° сè Π΅ ΠΎΠ΄Π»ΠΈΡ‡Π½ΠΎ! Како ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΎΠ²Π° Π½Π° страната Π½Π° ΠšΠ΅Ρ„?
Π”ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ список Π½Π° Ρ‚ΠΎΠΌΠΎΠ²ΠΈ Π²ΠΎ Π±Π°Π·Π΅Π½ΠΎΡ‚ ΠΈ ΠΏΡ€Π΅Π³Π»Π΅Π΄ΡƒΠ²Π°ΠΌΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Π½Π°ΡˆΠΈΠΎΡ‚ Π²ΠΎΠ»ΡƒΠΌΠ΅Π½:

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

Π“Π»Π΅Π΄Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° ΠŸΠ’Π¦ Π½Π΅ Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π°. Π—Π° Π΄Π° Π΄ΠΎΠ·Π½Π°Π΅Ρ‚Π΅ Π·ΠΎΡˆΡ‚ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ±Π°Ρ€Π°Ρ‚Π΅ ΠΎΠ΄ Kubernetes опис Π½Π° YAML Π½Π° PVC:

kubectl get pvc rbd-pvc -o yaml

Π•Π²Π΅ Π³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚:

ΠΏΠΎΡ€Π°ΠΊΠ°: Π‘Π΅ Ρ‡Π΅ΠΊΠ° корисникот Π΄Π° (ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ) стартува ΠΏΠΎΠ΄Π»ΠΎΠ³Π° Π·Π° Π΄Π° ја Π·Π°Π²Ρ€ΡˆΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° Ρ˜Π°Ρ‡ΠΈΠ½Π°Ρ‚Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈΠΎΡ‚ систСм Π½Π° Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚. Ρ‚ΠΈΠΏ: FileSystemResizePending

Π’ΠΎΠ° Π΅, дискот порасна, Π½ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈΠΎΡ‚ систСм Π½Π° Π½Π΅Π³ΠΎ Π½Π΅.
Π—Π° Π΄Π° Π³ΠΎ Π·Π³ΠΎΠ»Π΅ΠΌΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈΠΎΡ‚ систСм, Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Ρ‚Π΅ Ρ˜Π°Ρ‡ΠΈΠ½Π°Ρ‚Π° Π½Π° Π·Π²ΡƒΠΊΠΎΡ‚. Кај нас создадСниот ΠŸΠ’Π¦/ΠŸΠ’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ Π½Π΅ сС користи Π½Π° кој Π±ΠΈΠ»ΠΎ Π½Π°Ρ‡ΠΈΠ½.

МоТСмС Π΄Π° создадСмС тСст 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

И сСга Π΄Π° Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠŸΠ’Π¦:

kubectl get pvc

Π“ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π°, сè Π΅ Π²ΠΎ Ρ€Π΅Π΄.

Π’ΠΎ ΠΏΡ€Π²ΠΈΠΎΡ‚ Π΄Π΅Π», Ρ€Π°Π±ΠΎΡ‚Π΅Π²ΠΌΠ΅ со Π±Π»ΠΎΠΊ-ΡƒΡ€Π΅Π΄ΠΎΡ‚ RBD (Ρ‚ΠΎΡ˜ Π΅ ΠΊΡ€Π°Ρ‚Π΅Π½ΠΊΠ° Π·Π° 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 (ΠŸΡ€ΠΎΠΌΠ΅Ρ‚Π΅Ρ˜ ќС ΠΎΠ΄ΠΈ Ρ‚Π°ΠΌΡƒ Π·Π° слСдСњС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°) Π·Π° Π΄Π° Π½Π΅ Π΅ Π²ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ со 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

АјдС Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΠΎΠ»Π½ΠΈΠΌΠ΅ ΠΎΠ²Π΄Π΅ ΠΊΠ»Π°ΡΡ‚Π΅Ρ€Π˜Π” ΠΈ сС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡƒΠ²Π° Π²ΠΎ Kubernetes:

kubectl apply -f storageclass.yaml

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°

Π—Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌΠ΅, ΠΊΠ°ΠΊΠΎ ΠΈ Π²ΠΎ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΈΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ајдС Π΄Π° создадСмС ΠŸΠ’Π¦:

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

И ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ Π³ΠΎ присуството Π½Π° ΠŸΠ’Π¦/ΠŸΠ’:

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 која ќС користи CephFS ΠΊΠ°ΠΊΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ. ΠŸΡ€Π΅ΠΊΡƒ Π±Π°Ρ€Π°ΡšΠ°Ρ‚Π° GET/POST ќС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅Ρ„Ρ€Π»Π°Ρ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π΄Π° Π³ΠΈ ΠΏΡ€ΠΈΠΌΠ°Ρ‚Π΅ ΠΎΠ΄ Ceph.

И Π°ΠΊΠΎ стС повСќС заинтСрСсирани Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Ρ‚ΠΎΠ³Π°Ρˆ ΠΏΡ€ΠΈΡ˜Π°Π²Π΅Ρ‚Π΅ сС Π·Π° Π½ΠΎΠ² курс Π·Π° Ceph. Π”ΠΎΠ΄Π΅ΠΊΠ° Ρ‚Ρ€Π°Π΅ Π±Π΅Ρ‚Π° тСстот, курсот ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π΄ΠΎΠ±ΠΈΠ΅ со попуст ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²Π»ΠΈΡ˜Π°Π΅Ρ‚Π΅ Π½Π° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° содрТина.

Автор Π½Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π°: АлСксандар Π¨Π²Π°Π»ΠΎΠ², ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€-ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ Π‘Π°ΡƒΡ‚Π±Ρ€ΠΈΡŸ, Π‘Π΅Ρ€Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ Kubernetes администратор, Π°Π²Ρ‚ΠΎΡ€ ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ Π½Π° курсСви Π·Π° Slurm.

Π˜Π·Π²ΠΎΡ€: www.habr.com