ΠΠ½ΡΠ΅ΡΡΠ΅ΡΡΠΎΡ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ (CSI) Π΅ ΡΠ½ΠΈΡΠΈΡΠΈΡΠ°Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ ΠΏΠΎΠΌΠ΅ΡΡ Kubernetes ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅. ΠΠ΅ΡΠ΅ Π½Π°ΠΊΡΠ°ΡΠΊΠΎ ΡΠ°Π·Π³ΠΎΠ²Π°ΡΠ°Π²ΠΌΠ΅ Π·Π° ΡΠΎΠ°
ΠΠ°ΠΏΠΈΡΠΎΡ Π΄Π°Π²Π° Π²ΠΈΡΡΠΈΠ½ΡΠΊΠΈ, ΠΈΠ°ΠΊΠΎ ΠΌΠ°Π»ΠΊΡ ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΏΠΎΠ»Π΅ΡΠ½ΠΎ ΠΏΠ΅ΡΡΠ΅ΠΏΡΠΈΡΠ°. ΠΠ΅ ΡΠ°Π·ΠΌΠΈΡΠ»ΡΠ²Π°ΠΌΠ΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈ Ceph ΠΈ Kubernetes.
ΠΠ°Π»ΠΈ ΡΠ΅ ΠΏΡΠ°ΡΡΠ²Π°ΡΠ΅ ΠΊΠ°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°?
ΠΠ½Π°ΡΠΈ, ΠΈΠΌΠ°ΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅Ρ Kubernetes Π½Π° Π΄ΠΎΡΠ°Ρ Π½Π° ΡΠ°ΠΊΠ°ΡΠ°, ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π΅Π½, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ,
ΠΠΊΠΎ Π³ΠΎ ΠΈΠΌΠ°ΡΠ΅ ΡΠ΅ΡΠΎ ΠΎΠ²Π°, Π°ΡΠ΄Π΅ Π΄Π° ΠΎΠ΄ΠΈΠΌΠ΅!
ΠΡΠ²ΠΎ, Π΄Π° ΠΎΠ΄ΠΈΠΌΠ΅ Π΄ΠΎ Π΅Π΄Π΅Π½ ΠΎΠ΄ ΡΠ°Π·Π»ΠΈΡΠ΅ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ 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, ΠΎΠ²ΠΈΠ΅ Π²ΡΡΠΊΠΈ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ:
ΠΠ° ΠΊΡΡΡΠΎΡ Slurm
Π Π°ΠΊΠΎ ΡΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ°Π½ΠΈ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΡΠΎΠ³Π°Ρ ΠΏΡΠΈΡΠ°Π²Π΅ΡΠ΅ ΡΠ΅ Π·Π°
ΠΠ²ΡΠΎΡ Π½Π° ΡΡΠ°ΡΠΈΡΠ°ΡΠ°: ΠΠ»Π΅ΠΊΡΠ°Π½Π΄Π°Ρ Π¨Π²Π°Π»ΠΎΠ², ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ-ΠΏΡΠ°ΠΊΡΠΈΠΊ
ΠΠ·Π²ΠΎΡ: www.habr.com