рдХрдиреНрдЯреЗрдирд░ рднрдгреНрдбрд╛рд░рдг рдЗрдиреНрдЯрд░рдлреЗрд╕ (CSI) Kubernetes рд░ рднрдгреНрдбрд╛рд░рдг рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВ рдмреАрдЪрдХреЛ рдПрдХ рдПрдХреАрдХреГрдд рдЗрдиреНрдЯрд░рдлреЗрд╕ рд╣реЛред рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рдпрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рдЫреЛрдЯрдХрд░реАрдорд╛ рдХреБрд░рд╛ рдЧрд░рд┐рд╕рдХреЗрдХрд╛ рдЫреМрдВ
рд▓реЗрдЦрд▓реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ, рдпрджреНрдпрдкрд┐ рдзрд╛рд░рдгрд╛рдХреЛ рд╕рд╣рдЬрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдереЛрд░реИ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВред рд╣рд╛рдореА Ceph рд░ Kubernetes рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреЗ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрджреИрдиреМрдВред
рдХреЗ рддрдкрд╛рдЗрдБ рд╕реЛрдЪреНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рдХрд┐ рдпреЛ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрджрдЫ?
рддреНрдпрд╕реЛрднрдП, рддрдкрд╛рдЗрдБрд╕рдБрдЧ рддрдкрд╛рдЗрдБрдХреЛ рдФрдВрд▓рд╛рдХреЛ рдЫреЗрдЙрдорд╛ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдЫ, рддреИрдирд╛рде рдЧрд░рд┐рдПрдХреЛ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐,
рдпрджрд┐ рддрдкрд╛рдИрдВрд╕рдБрдЧ рдпреЛ рд╕рдмреИ рдЫ рднрдиреЗ, рдЬрд╛рдиреБрд╣реЛрд╕реН!
рдкрд╣рд┐рд▓реЗ, Ceph рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдбрд╣рд░реВ рдордзреНрдпреЗ рдПрдЙрдЯрд╛рдорд╛ рдЬрд╛рдФрдВ рд░ рдЬрд╛рдБрдЪ рдЧрд░реМрдВ рдХрд┐ рд╕рдмреИ рдХреБрд░рд╛ рдХреНрд░рдордмрджреНрдз рдЫ:
ceph health
ceph -s
рдЕрд░реНрдХреЛ, рд╣рд╛рдореА рддреБрд░реБрдиреНрддреИ RBD рдбрд┐рд╕реНрдХрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВ:
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
Kubernetes рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдЬрд╛рдФрдВред рддреНрдпрд╣рд╛рдБ, рд╕рдмреИ рднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ, рд╣рд╛рдореА RBD рдХреЛ рд▓рд╛рдЧрд┐ Ceph CSI рдбреНрд░рд╛рдЗрднрд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВред рд╣рд╛рдореА рд╣реЗрд▓реНрдо рдорд╛рд░реНрдлрдд рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдкрдорд╛ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВред
рд╣рд╛рдореА рдЪрд╛рд░реНрдЯрдХреЛ рд╕рд╛рде рднрдгреНрдбрд╛рд░ рдердкреНрдЫреМрдВ, рд╣рд╛рдореАрд▓реЗ 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 рдлрд╛рдЗрд▓ рднрд░реНрдиреБ рдкрд░реНрдЫред рдпреЛ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, Ceph рдорд╛ рдореЛрдирд┐рдЯрд░рд╣рд░реВрдХреЛ рдХреНрд▓рд╕реНрдЯрд░ ID рд░ IP рдареЗрдЧрд╛рдирд╛рд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБрд╣реЛрд╕реН:
ceph fsid # ╤В╨░╨║ ╨╝╤Л ╤Г╨╖╨╜╨░╨╡╨╝ clusterID
ceph mon dump # ╨░ ╤В╨░╨║ ╤Г╨▓╨╕╨┤╨╕╨╝ IP-╨░╨┤╤А╨╡╤Б╨░ ╨╝╨╛╨╜╨╕╤В╨╛╤А╨╛╨▓
рд╣рд╛рдореАрд▓реЗ рдкреНрд░рд╛рдкреНрдд рдорд╛рдирд╣рд░реВ cephrbd.yml рдлрд╛рдЗрд▓рдорд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдЫреМрдВред рдПрдХреИ рд╕рдордпрдорд╛, рд╣рд╛рдореА PSP рдиреАрддрд┐рд╣рд░реВ (рдкреЛрдб рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐рд╣рд░реВ) рдХреЛ рдирд┐рд░реНрдорд╛рдг рд╕рдХреНрд╖рдо рдЧрд░реНрджрдЫреМрдВред рдЦрдгреНрдбрд╣рд░реВрдорд╛ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ 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
рдЕрд░реНрдХреЛ, рд╣рд╛рдореНрд░реЛ рд▓рд╛рдЧрд┐ рдмрд╛рдБрдХреА рд░рд╣реЗрдХреЛ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдЪрд╛рд░реНрдЯ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБ рд╣реЛред
helm upgrade -i ceph-csi-rbd ceph-csi/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespace
рд░рд╛рдореНрд░реЛ, RBD рдЪрд╛рд▓рдХ рдХрд╛рдо рдЧрд░реНрджрдЫ!
Kubernetes рдорд╛ рдирдпрд╛рдБ StorageClass рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВред рдпрд╕рд▓рд╛рдИ рдлреЗрд░рд┐ рд╕реЗрдлрд╕рдБрдЧ рдЕрд▓рд┐рдХрддрд┐ рдЯрд┐рдВрдХрд░рд┐рдВрдЧ рдЪрд╛рд╣рд┐рдиреНрдЫред
рд╣рд╛рдореА Ceph рдорд╛ рдирдпрд╛рдБ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВ рд░ рдЙрд╕рд▓рд╛рдИ рдкреВрд▓рдорд╛ рд▓реЗрдЦреНрдиреЗ рдЕрдзрд┐рдХрд╛рд░ рджрд┐рдиреНрдЫреМрдВ рдШрди:
ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'
рдЕрдм рдкрд╣реБрдБрдЪ рдХреБрдЮреНрдЬреА рдЕрдЭреИ рддреНрдпрд╣рд╛рдБ рдЫ рд╣реЗрд░реМрдВ:
ceph auth get-key client.rbdkube
рдЖрджреЗрд╢рд▓реЗ рдпреЛ рдЬрд╕реНрддреИ рдХреЗрд╣рд┐ рдЖрдЙрдЯрдкреБрдЯ рдЧрд░реНрдиреЗрдЫ:
AQCO9NJbhYipKRAAMqZsnqqS/T8OYQX20xIa9A==
рдпреЛ рдорд╛рди Kubernetes рдХреНрд▓рд╕реНрдЯрд░рдорд╛ Secret рдорд╛ рдердкреМрдВ - рдЬрд╣рд╛рдБ рд╣рд╛рдореАрд▓рд╛рдИ рдпреЛ рдЪрд╛рд╣рд┐рдиреНрдЫ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЮреНрдЬреА:
---
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 manifest рдХреЗрд╣рд┐ рдЪрд╛рд╣рд┐рдиреНрдЫ:
---
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 рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдпреЛ manifest рд▓рд╛рдЧреВ рдЧрд░реНрдиреБрд╣реЛрд╕реН:
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
рддреБрд░реБрдиреНрддреИ рд╣реЗрд░реМрдВ рдХрд┐ рдХрд╕рд░реА рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рд▓реЗ 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 manifest рдорд╛ рднреЛрд▓реНрдпреБрдо рд╕рд╛рдЗрдЬ 2Gi рдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдпрд╕рд▓рд╛рдИ рд▓рд╛рдЧреВ рдЧрд░реНрдиреБрд╣реЛрд╕реН:
kubectl apply -f pvc.yaml
рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрдиреБрд╣реЛрд╕реН рд░ рднреЛрд▓реНрдпреБрдо рдЖрдХрд╛рд░ рдлреЗрд░рд┐ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653
kubectl get pv
kubectl get pvc
рд╣рд╛рдореА рджреЗрдЦреНрдЫреМрдВ рдХрд┐ PVC рдХреЛ рдЖрдХрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рднрдПрдХреЛ рдЫреИрдиред рдХрд┐рди рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди, рддрдкрд╛рдЗрдБ PVC рдХреЛ YAML рд╡рд┐рд╡рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ Kubernetes рд▓рд╛рдИ рд╕реЛрдзреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:
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 рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВрдХреЛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╣рд╛рдореА CephFS рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди CSI рд░ рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХ рдирд┐рдХрд╛рдпрд╣рд░реВ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреЗрдЫреМрдВред
рд╣рд╛рдореАрд▓рд╛рдИ рдЪрд╛рд╣рд┐рдиреЗ рдирдпрд╛рдБ рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯрдмрд╛рдЯ рдорд╛рдирд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реМрдВ:
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 рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рддрдкрд╛рдИрдВрд▓рд╛рдИ рдпреЛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реБрди рд╕рдХреНрдЫред
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
рдЕрд▓рдЧ рд╕реЗрдХреНрд░реЗрдЯ рд░ рд╕реНрдЯреЛрд░реЗрдЬ рдХреНрд▓рд╛рд╕ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВред
рдХреЗрд╣рд┐ рдирдпрд╛рдБ рдЫреИрди, рд╣рд╛рдореАрд▓реЗ рдпреЛ рдкрд╣рд┐рд▓реЗ рдиреИ 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
рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдпрд╕ рдЬрд╕реНрддреИ Ceph рдиреЛрдбрдорд╛ FS рдорд╛рдЙрдиреНрдЯ рдЧрд░реНрдиреБ рдХреЗрд╡рд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЙрджреНрджреЗрд╢реНрдпрдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рдЫ, рдЬреБрди рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдорд╛ рдЧрд░реНрдЫреМрдВред
рд░ рдЕрдиреНрддрдорд╛, CephFS рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛ рд░рд┐рд╕рд╛рдЗрдЬ рднреЛрд▓реНрдпреБрдо рд╕рдВрдЧ рдЪреАрдЬрд╣рд░реБ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рдЬрд╛рдБрдЪ рдЧрд░реМрдВред Kubernetes рдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реН рд░ PVC рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореНрд░реЛ manifest рд╕рдореНрдкрд╛рджрди рдЧрд░реНрдиреБрд╣реЛрд╕реН - рддреНрдпрд╣рд╛рдБ рдЖрдХрд╛рд░ рдмрдврд╛рдЙрдиреБрд╣реЛрд╕реН, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, 7Gi рдорд╛ред
рд╕рдореНрдкрд╛рджрд┐рдд рдлрд╛рдЗрд▓ рд▓рд╛рдЧреВ рдЧрд░реМрдВ:
kubectl apply -f pvc.yaml
рдХреЛрдЯрд╛ рдХрд╕рд░реА рдкрд░рд┐рд╡рд░реНрддрди рднрдПрдХреЛ рдЫ рд╣реЗрд░реНрди рдорд╛рдЙрдиреНрдЯ рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рд╣реЗрд░реМрдВ:
getfattr -n ceph.quota.max_bytes <╨║╨░╤В╨░╨╗╨╛╨│-╤Б-╨┤╨░╨╜╨╜╤Л╨╝╨╕>
рдпреЛ рдЖрджреЗрд╢ рдХрд╛рдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдкреНрдпрд╛рдХреЗрдЬ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрдЫ attr.
рдЖрдБрдЦрд╛ рдбрд░рд╛рдЙрдБрдЫрдиреН, рддрд░ рд╣рд╛рддрд╣рд░реВ
рдпреА рд╕рдмреИ рдордиреНрддреНрд░рд╣рд░реВ рд░ рд▓рд╛рдореЛ YAML рдкреНрд░рдХрдЯрд╣рд░реВ рд╕рддрд╣рдорд╛ рдЬрдЯрд┐рд▓ рджреЗрдЦрд┐рдиреНрдЫрдиреН, рддрд░ рд╡реНрдпрд╡рд╣рд╛рд░рдорд╛, Slurm рд╡рд┐рджреНрдпрд╛рд░реНрдереАрд╣рд░реВрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЪрд╛рдБрдбреИ рд╣реНрдпрд╛рдЩреНрдЧ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫрдиреНред
рдпрд╕ рд▓реЗрдЦрдорд╛ рд╣рд╛рдореА рдЬрдВрдЧрд▓рдорд╛ рдЧрд╣рд┐рд░реЛ рдЧрдПрдХрд╛ рдЫреИрдиреМрдВ - рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рдЫрдиреНред рдпрджрд┐ рддрдкрд╛рдЗрдБ Kubernetes рдХреНрд▓рд╕реНрдЯрд░рдХреЛ рд╕рд╛рде Ceph рднрдгреНрдбрд╛рд░рдг рд╕реЗрдЯрдЕрдк рдЧрд░реНрдиреЗ рд╡рд┐рд╡рд░рдгрд╣рд░реВрдорд╛ рд░реБрдЪрд┐ рд░рд╛рдЦреНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдпреА рд▓рд┐рдЩреНрдХрд╣рд░реВрд▓реЗ рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫ:
рд╕реНрд▓рд░реНрдо рдХреЛрд░реНрд╕рдорд╛
рд░ рдпрджрд┐ рддрдкрд╛рдЗрдБ рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдгрдорд╛ рдмрдвреА рд░реБрдЪрд┐ рд░рд╛рдЦреНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рд╕рд╛рдЗрди рдЕрдк рдЧрд░реНрдиреБрд╣реЛрд╕реН
рд▓реЗрдЦрдХреЛ рд▓реЗрдЦрдХ: рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рд╢реНрд╡рд╛рд▓реЛрдн, рдЕрднреНрдпрд╛рд╕ рдЗрдиреНрдЬрд┐рдирд┐рдпрд░
рд╕реНрд░реЛрдд: www.habr.com