ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡΡ Π·Π° ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ (CSI) Π΅ ΡΠ½ΠΈΡΠΈΡΠΈΡΠ°Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΌΠ΅ΠΆΠ΄Ρ Kubernetes ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Π·Π° ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅. ΠΠ΅ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΡ
ΠΌΠ΅ Π·Π° ΡΠΎΠ²Π° Π½Π°ΠΊΡΠ°ΡΠΊΠΎ
Π‘ΡΠ°ΡΠΈΡΡΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΠ΅Π°Π»Π½ΠΈ, ΠΌΠ°ΠΊΠ°Ρ ΠΈ Π»Π΅ΠΊΠΎ ΠΎΠΏΡΠΎΡΡΠ΅Π½ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ Π²ΡΠ·ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅. ΠΠΈΠ΅ Π½Π΅ ΠΎΠ±ΠΌΠΈΡΠ»ΡΠΌΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Ceph ΠΈ Kubernetes ΠΊΠ»ΡΡΡΠ΅ΡΠΈ.
Π§ΡΠ΄ΠΈΡΠ΅ Π»ΠΈ ΡΠ΅ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ?
Π ΡΠ°ΠΊΠ°, ΠΈΠΌΠ°ΡΠ΅ Kubernetes ΠΊΠ»ΡΡΡΠ΅Ρ Π½Π° Π΅Π΄Π½Π° ΡΡΠΊΠ° ΡΠ°Π·ΡΡΠΎΡΠ½ΠΈΠ΅, ΡΠ°Π·Π³ΡΡΠ½Π°Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π°, Π΄Π° Π²ΡΡΠ²ΠΈΠΌ!
ΠΡΡΠ²ΠΎ, Π½Π΅ΠΊΠ° ΠΎΡΠΈΠ΄Π΅ΠΌ Π΄ΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΊΠ»ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ Π²ΡΠ·Π»ΠΈ Π½Π° 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. ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ID Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΈ 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
Π’ΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠΏΡΠ»Π½ΠΈ clusterID, ΠΊΠΎΠ΅ΡΠΎ Π²Π΅ΡΠ΅ Π½Π°ΡΡΠΈΡ ΠΌΠ΅ ΠΎΡ Π΅ΠΊΠΈΠΏΠ° ceph fsidΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡ ΠΊΡΠΌ ΠΊΠ»ΡΡΡΠ΅ΡΠ° Kubernetes:
kubectl apply -f storageclass.yaml
ΠΠ° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΠΊΠ°ΠΊ ΠΊΠ»ΡΡΡΠ΅ΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΡΡ Π·Π°Π΅Π΄Π½ΠΎ, Π½Π΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠ»Π΅Π΄Π½ΠΈΡ PVC (Persistent Volume Claim):
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 ΡΠΎΠΌ.
ΠΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΡΠΎΠΌΠ° Π² 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 Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎ Π½ΠΈΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½.
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠ΅ΡΡΠΎΠ² ΠΏΠΎΠ΄, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½:
---
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 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. ΠΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅ ΠΎΡ ΡΠΎΠ²Π°.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ°ΡΠ° 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 ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
# Π’ΠΎΡΠΊΠ° ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
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 <ΠΊΠ°ΡΠ°Π»ΠΎΠ³-Ρ-Π΄Π°Π½Π½ΡΠΌΠΈ>
ΠΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° Π½Π° Π²Π°ΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π°ΡΡΠΈΠ±ΡΡ.
ΠΡΠΈΡΠ΅ ΡΠ΅ ΡΡΡΠ°Ρ ΡΠ²Π°Ρ, Π½ΠΎ ΡΡΡΠ΅ΡΠ΅ ΠΏΠ»Π°ΡΠ°Ρ
ΠΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΡ ΠΈ Π΄ΡΠ»Π³ΠΈ YAML ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΈ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΈ Π½Π° ΠΏΡΡΠ² ΠΏΠΎΠ³Π»Π΅Π΄, Π½ΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° ΡΡΠ΅Π½ΠΈΡΠΈΡΠ΅ Π½Π° Slurm Π³ΠΈ ΠΎΠ²Π»Π°Π΄ΡΠ²Π°Ρ Π΄ΠΎΡΡΠ° Π±ΡΡΠ·ΠΎ.
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π½Π΅ Π½Π°Π²Π»ΡΠ·ΠΎΡ
ΠΌΠ΅ Π΄ΡΠ»Π±ΠΎΠΊΠΎ Π² Π΄ΠΆΡΠ½Π³Π»Π°ΡΠ° - ΠΈΠΌΠ° ΠΎΡΠΈΡΠΈΠ°Π»Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π·Π° ΡΠΎΠ²Π°. ΠΠΊΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΡΠ΅ ΠΎΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π½Π° Ceph Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Ρ Kubernetes ΠΊΠ»ΡΡΡΠ΅Ρ, ΡΠ΅Π·ΠΈ Π²ΡΡΠ·ΠΊΠΈ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ:
ΠΠ° ΠΊΡΡΡΠ° Slurm
Π Π°ΠΊΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ, ΡΠΎΠ³Π°Π²Π° ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°ΠΉΡΠ΅ Π·Π°
ΠΠ²ΡΠΎΡ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°: ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΡ Π¨Π²Π°Π»ΠΎΠ², ΠΏΡΠ°ΠΊΡΠΈΠΊΡΠ²Π°Ρ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com