Container Storage Interface (CSI) hija interface unifikata bejn Kubernetes u sistemi ta 'ħażna. Diġà tkellimna fil-qosor dwarha
L-artikolu jipprovdi eżempji reali, għalkemm kemmxejn simplifikati għall-faċilità tal-perċezzjoni. Aħna ma nikkunsidrawx l-installazzjoni u l-konfigurazzjoni ta 'clusters Ceph u Kubernetes.
Qed tistaqsi kif taħdem?
Għalhekk, għandek cluster Kubernetes fuq ponot subgħajk, skjerat, pereżempju,
Jekk għandek dan kollu, ejja mmorru!
L-ewwel, ejja mmorru għal wieħed min-nodi tal-cluster Ceph u ċċekkja li kollox huwa fl-ordni:
ceph health
ceph -s
Sussegwentement, immedjatament noħolqu ġabra għal diski RBD:
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
Ejja ngħaddu għall-cluster Kubernetes. Hemm, l-ewwel nett, aħna se ninstallaw is-sewwieq Ceph CSI għal RBD. Se ninstallaw, kif mistenni, permezz ta' Helm.
Aħna nżidu repożitorju b'ċart, niksbu sett ta 'varjabbli għaċ-ċart ceph-csi-rbd:
helm repo add ceph-csi https://ceph.github.io/csi-charts
helm inspect values ceph-csi/ceph-csi-rbd > cephrbd.yml
Issa trid timla l-fajl cephrbd.yml. Biex tagħmel dan, sib l-ID tal-cluster u l-indirizzi IP tal-monitors f'Ceph:
ceph fsid # так мы узнаем clusterID
ceph mon dump # а так увидим IP-адреса мониторов
Aħna ndaħħlu l-valuri miksuba fil-fajl cephrbd.yml. Fl-istess ħin, nippermettu l-ħolqien ta 'politiki PSP (Pod Security Policies). Għażliet fit-taqsimiet nodeplugin и provveditur diġà fil-fajl, jistgħu jiġu kkoreġuti kif muri hawn taħt:
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
Sussegwentement, dak kollu li jibqa għalina huwa li ninstallaw iċ-ċart fil-cluster Kubernetes.
helm upgrade -i ceph-csi-rbd ceph-csi/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespace
Kbir, is-sewwieq RBD jaħdem!
Ejja noħolqu StorageClass ġdida f'Kubernetes. Dan għal darb'oħra jirrikjedi daqsxejn ta' tbagħbis ma' Ceph.
Noħolqu utent ġdid f'Ceph u nagħtuh drittijiet biex jikteb fil-pool Kubu:
ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'
Issa ejja naraw li ċ-ċavetta tal-aċċess għadha hemm:
ceph auth get-key client.rbdkube
Il-kmand joħroġ xi ħaġa bħal din:
AQCO9NJbhYipKRAAMqZsnqqS/T8OYQX20xIa9A==
Ejja nżidu dan il-valur ma' Sigriet fil-cluster Kubernetes - fejn għandna bżonnu userKey:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-rbd-secret
namespace: ceph-csi-rbd
stringData:
# Значения ключей соответствуют имени пользователя и его ключу, как указано в
# кластере Ceph. ID юзера должен иметь доступ к пулу,
# указанному в storage class
userID: rbdkube
userKey: <user-key>
U noħolqu s-sigriet tagħna:
kubectl apply -f secret.yaml
Sussegwentement, għandna bżonn manifest StorageClass xi ħaġa bħal din:
---
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
Jeħtieġ li timtela clusterID, li diġà tgħallimna mit-tim ceph fsid, u applika dan il-manifest għall-cluster Kubernetes:
kubectl apply -f storageclass.yaml
Biex tivverifika kif ir-raggruppamenti jaħdmu flimkien, ejja noħolqu l-PVC li ġej (Talba ta’ Volum Persistenti):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rbd-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: csi-rbd-sc
Ejja naraw immedjatament kif Kubernetes ħoloq il-volum mitlub f'Ceph:
kubectl get pvc
kubectl get pv
Kollox jidher li huwa kbir! Kif jidher dan fuq in-naħa Ceph?
Ikollna lista ta 'volumi fil-pool u naraw informazzjoni dwar il-volum tagħna:
rbd ls -p kube
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653 # тут, конечно же, будет другой ID тома, который выдала предыдущая команда
Issa ejja naraw kif jaħdem volum RBD mill-ġdid tad-daqs.
Ibdel id-daqs tal-volum fil-manifest pvc.yaml għal 2Gi u applikah:
kubectl apply -f pvc.yaml
Ejja nistennew li l-bidliet jidħlu fis-seħħ u nerġgħu nħarsu lejn id-daqs tal-volum.
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653
kubectl get pv
kubectl get pvc
Naraw li d-daqs tal-PVC ma nbidilx. Biex issir taf għaliex, tista' tfittex lil Kubernetes għal deskrizzjoni YAML tal-PVC:
kubectl get pvc rbd-pvc -o yaml
Hawn il-problema:
messaġġ: Stennija għall-utent biex (jerġa') jibda pod biex itemm id-daqs tal-volum tas-sistema tal-fajls fuq in-node. tip: FileSystemResizePending
Jiġifieri, id-diska kibret, iżda s-sistema tal-fajls fuqha le.
Biex tikber is-sistema tal-fajls, għandek bżonn timmonta l-volum. F'pajjiżna, il-PVC/PV maħluq bħalissa ma jintuża bl-ebda mod.
Nistgħu noħolqu Pod tat-test, pereżempju bħal dan:
---
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
U issa ejja nħarsu lejn il-PVC:
kubectl get pvc
Id-daqs inbidel, kollox tajjeb.
Fl-ewwel parti, ħdimna mal-apparat tal-blokk RBD (jiġifieri Rados Block Device), iżda dan ma jistax isir jekk mikroservizzi differenti jeħtieġu jaħdmu ma 'din id-diska fl-istess ħin. CephFS huwa ferm aħjar biex jaħdem ma 'fajls aktar milli immaġini ta' disk.
Bl-użu tal-eżempju ta 'clusters Ceph u Kubernetes, aħna ser tikkonfigura CSI u entitajiet oħra meħtieġa biex jaħdmu ma' CephFS.
Ejja nieħdu l-valuri mit-tabella l-ġdida ta’ Helm li għandna bżonn:
helm inspect values ceph-csi/ceph-csi-cephfs > cephfs.yml
Għal darb'oħra għandek bżonn timla l-fajl cephfs.yml. Bħal qabel, il-kmandi Ceph se jgħinu:
ceph fsid
ceph mon dump
Imla l-fajl b'valuri bħal dawn:
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
Jekk jogħġbok innota li l-indirizzi tal-monitor huma speċifikati fil-formola sempliċi indirizz:port. Biex jintramaw cephfs fuq node, dawn l-indirizzi jiġu trasferiti għall-modulu tal-kernel, li għadu ma jafx kif jaħdem mal-protokoll tal-monitor v2.
Nibdlu l-port għal httpMetrics (Prometheus se jmur hemm għall-metriċi ta 'monitoraġġ) sabiex ma jkunx f'kunflitt ma' nginx-proxy, li huwa installat minn Kubespray. Jista 'ma jkollokx bżonn dan.
Installa l-Helm chart fil-cluster Kubernetes:
helm upgrade -i ceph-csi-cephfs ceph-csi/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespace
Ejja mmorru fil-maħżen tad-dejta Ceph biex noħolqu utent separat hemmhekk. Id-dokumentazzjoni tiddikjara li l-fornitur tas-CephFS jeħtieġ drittijiet ta' aċċess għall-amministratur tal-clusters. Imma se noħolqu utent separat fs bi drittijiet limitati:
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'
U ejja immedjatament inħarsu lejn iċ-ċavetta ta 'aċċess tiegħu, ikollna bżonnha aktar tard:
ceph auth get-key client.fs
Ejja noħolqu Secret u StorageClass separati.
Xejn ġdid, diġà rajna dan fl-eżempju ta 'RBD:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-cephfs-secret
namespace: ceph-csi-cephfs
stringData:
# Необходимо для динамически создаваемых томов
adminID: fs
adminKey: <вывод предыдущей команды>
L-applikazzjoni tal-manifest:
kubectl apply -f secret.yaml
U issa - StorageClass separata:
---
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
Ejja nimlewha hawn clusterID u applikabbli f'Kubernetes:
kubectl apply -f storageclass.yaml
Проверка
Biex tiċċekkja, bħal fl-eżempju preċedenti, ejja noħolqu PVC:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-cephfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: csi-cephfs-sc
U iċċekkja l-preżenza tal-PVC/PV:
kubectl get pvc
kubectl get pv
Jekk trid tħares lejn fajls u direttorji f'CephFS, tista' twaħħal din is-sistema tal-fajls x'imkien. Per eżempju kif muri hawn taħt.
Ejja mmorru għal wieħed min-nodi tal-cluster Ceph u wettaq l-azzjonijiet li ġejjin:
# Точка монтирования
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
Naturalment, l-immuntar ta 'FS fuq node Ceph bħal dan huwa adattat biss għal skopijiet ta' taħriġ, li huwa dak li nagħmlu fuq tagħna
U fl-aħħarnett, ejja niċċekkjaw kif jaħdmu l-affarijiet b'volumi ta 'ridimensjonar fil-każ ta' CephFS. Ejja nerġgħu lura għal Kubernetes u neditjaw il-manifest tagħna għall-PVC - żid id-daqs hemmhekk, pereżempju, għal 7Gi.
Ejja napplikaw il-fajl editjat:
kubectl apply -f pvc.yaml
Ejja nħarsu lejn id-direttorju mmuntat biex naraw kif il-kwota nbidlet:
getfattr -n ceph.quota.max_bytes <каталог-с-данными>
Biex dan il-kmand jaħdem, jista 'jkollok bżonn tinstalla l-pakkett fis-sistema tiegħek attr.
L-għajnejn jibżgħu, imma l-idejn
Dawn il-perjodi kollha u l-manifesti YAML twal jidhru kkumplikati fuq il-wiċċ, iżda fil-prattika, l-istudenti ta 'Slurm jiksbu l-hang tagħhom pjuttost malajr.
F'dan l-artikolu ma mornax fil-fond fil-ġungla - hemm dokumentazzjoni uffiċjali għal dan. Jekk inti interessat fid-dettalji tat-twaqqif tal-ħażna Ceph ma 'cluster Kubernetes, dawn ir-rabtiet jgħinu:
Fuq il-kors Slurm
U jekk inti aktar interessat fil-ħażna tad-data, imbagħad iffirma għal
Awtur tal-artiklu: Alexander Shvalov, inġinier prattikanti
Sors: www.habr.com