Tha Eadar-aghaidh Stòradh Container (CSI) na eadar-aghaidh aonaichte eadar Kubernetes agus siostaman stòraidh. Tha sinn mu thràth air bruidhinn goirid mu dheidhinn
Tha an artaigil a’ toirt seachad eisimpleirean fìor, ged a tha iad beagan nas sìmplidhe airson a bhith furasta am faicinn. Cha bhith sinn a’ beachdachadh air cruinneachaidhean Ceph agus Kubernetes a chuir a-steach agus a rèiteachadh.
A bheil thu a’ faighneachd ciamar a tha e ag obair?
Mar sin, tha cruinneachadh Kubernetes agad aig do chorragan, air a chleachdadh, mar eisimpleir,
Ma tha seo uile agad, rachamaid!
An toiseach, rachamaid gu aon de na nodan brabhsair Ceph agus dèan cinnteach gu bheil a h-uile dad ann an òrdugh:
ceph health
ceph -s
An ath rud, cruthaichidh sinn sa bhad amar airson dioscan RBD:
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
Gluaisidh sinn air adhart gu buidheann Kubernetes. An sin, an toiseach, stàlaidhidh sinn an draibhear Ceph CSI airson RBD. Stàlaichidh sinn, mar a bhiodh dùil, tro Helm.
Bidh sinn a’ cur stòr ri clàr, gheibh sinn seata de chaochladairean airson a’ chairt ceph-csi-rbd:
helm repo add ceph-csi https://ceph.github.io/csi-charts
helm inspect values ceph-csi/ceph-csi-rbd > cephrbd.yml
A-nis feumaidh tu am faidhle cephrbd.yml a lìonadh. Gus seo a dhèanamh, faigh a-mach ID brabhsair agus seòlaidhean IP sgrùdairean ann an Ceph:
ceph fsid # так мы узнаем clusterID
ceph mon dump # а так увидим IP-адреса мониторов
Bidh sinn a’ cuir a-steach na luachan a gheibhear a-steach don fhaidhle cephrbd.yml. Aig an aon àm, bidh sinn a’ comasachadh cruthachadh phoileasaidhean PSP (Podaidhean Tèarainteachd Pod). Roghainnean ann an earrannan nodeflugin и neach-solair mu thràth san fhaidhle, faodar an ceartachadh mar a chithear gu h-ìosal:
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
An ath rud, chan eil air fhàgail againn ach a’ chairt a chuir a-steach ann am buidheann Kubernetes.
helm upgrade -i ceph-csi-rbd ceph-csi/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespace
Sgoinneil, tha an draibhear RBD ag obair!
Nach cruthaich sinn StorageClass ùr ann an Kubernetes. Feumaidh seo a-rithist beagan tinkering le Ceph.
Bidh sinn a’ cruthachadh neach-cleachdaidh ùr ann an Ceph agus a’ toirt còirichean dha sgrìobhadh chun linne cube:
ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'
A-nis chì sinn gu bheil an iuchair ruigsinneachd fhathast ann:
ceph auth get-key client.rbdkube
Bheir an àithne a-mach rudeigin mar seo:
AQCO9NJbhYipKRAAMqZsnqqS/T8OYQX20xIa9A==
Nach cuir sinn an luach seo ri Secret ann an cruinneachadh Kubernetes - far a bheil feum againn air iuchair neach-cleachdaidh:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-rbd-secret
namespace: ceph-csi-rbd
stringData:
# Значения ключей соответствуют имени пользователя и его ключу, как указано в
# кластере Ceph. ID юзера должен иметь доступ к пулу,
# указанному в storage class
userID: rbdkube
userKey: <user-key>
Agus cruthaichidh sinn ar dìomhaireachd:
kubectl apply -f secret.yaml
An ath rud, feumaidh sinn StorageClass a’ nochdadh rudeigin mar seo:
---
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
Tha feum air a lìonadh braisle, a tha sinn air ionnsachadh leis an sgioba mu thràth ceph fsid, agus cuir am follaiseach seo gu buidheann Kubernetes:
kubectl apply -f storageclass.yaml
Gus faighinn a-mach mar a tha na cruinneachaidhean ag obair còmhla, cruthaichidh sinn an PVC a leanas (Clais Tomhas Seasmhach):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rbd-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: csi-rbd-sc
Chì sinn sa bhad mar a chruthaich Kubernetes an tomhas a chaidh iarraidh ann an Ceph:
kubectl get pvc
kubectl get pv
Tha e coltach gu bheil a h-uile dad fìor mhath! Cò ris a tha seo coltach air taobh Ceph?
Gheibh sinn liosta de leabhraichean anns an amar agus chì sinn fiosrachadh mun tomhas-lìonaidh againn:
rbd ls -p kube
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653 # тут, конечно же, будет другой ID тома, который выдала предыдущая команда
A-nis chì sinn mar a tha ath-mheudachadh meud RBD ag obair.
Atharraich meud an tomhas-lìonaidh anns an taisbeanadh pvc.yaml gu 2Gi agus cuir an sàs e:
kubectl apply -f pvc.yaml
Fuirichidh sinn gus an tig na h-atharrachaidhean gu buil agus coimhead air meud an tomhas a-rithist.
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653
kubectl get pv
kubectl get pvc
Chì sinn nach eil meud PVC air atharrachadh. Gus faighinn a-mach carson, faodaidh tu Kubernetes a cheasnachadh airson tuairisgeul YAML air an PVC:
kubectl get pvc rbd-pvc -o yaml
Seo an duilgheadas:
teachdaireachd: A’ feitheamh ris an neach-cleachdaidh (ath-) pod a thòiseachadh gus crìoch a chuir air siostam faidhle ath-mheudachadh meud air nód. seòrsa: FileSystemResizePending
Is e sin, tha an diosg air fàs, ach chan eil an siostam faidhle air.
Gus an siostam faidhle fhàs, feumaidh tu an tomhas-lìonaidh a chuir suas. Anns an dùthaich againn, chan eil an PVC / PV cruthaichte air a chleachdadh an-dràsta ann an dòigh sam bith.
Is urrainn dhuinn Pod deuchainn a chruthachadh, mar eisimpleir mar seo:
---
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
Agus a-nis leig dhuinn sùil a thoirt air PVC:
kubectl get pvc
Tha am meud air atharrachadh, tha a h-uile dad gu math.
Anns a 'chiad phàirt, dh' obraich sinn leis an inneal bloca RBD (tha e na sheasamh airson Inneal Bloc Rados), ach chan urrainnear seo a dhèanamh ma dh'fheumas diofar microservices obrachadh leis an diosg seo aig an aon àm. Tha CephFS gu math nas freagarraiche airson a bhith ag obair le faidhlichean seach ìomhaighean diosc.
A’ cleachdadh eisimpleir cruinneachaidhean Ceph agus Kubernetes, rèitichidh sinn CSI agus buidhnean riatanach eile gus obrachadh le CephFS.
Nach faigh sinn na luachan bhon chairt Helm ùr a dh’ fheumas sinn:
helm inspect values ceph-csi/ceph-csi-cephfs > cephfs.yml
A-rithist feumaidh tu am faidhle cephfs.yml a lìonadh. Mar a bha roimhe, cuidichidh òrdughan Ceph:
ceph fsid
ceph mon dump
Lìon a-steach am faidhle le luachan mar seo:
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
Thoir an aire gu bheil seòlaidhean sgrùdaidh air an sònrachadh anns an t-seòladh foirm shìmplidh: port. Gus cephfs a chuir suas air nód, thèid na seòlaidhean sin a ghluasad chun mhodal kernel, aig nach eil fios fhathast ciamar a dh’ obraicheas iad leis a ’phròtacal sgrùdaidh v2.
Bidh sinn ag atharrachadh a’ phort airson httpMetrics (thèid Prometheus ann airson sùil a chumail air meatrach) gus nach bi e an aghaidh nginx-proxy, a tha air a chuir a-steach le Kubespray. Is dòcha nach fheum thu seo.
Stàlaich an clàr Helm ann am buidheann Kubernetes:
helm upgrade -i ceph-csi-cephfs ceph-csi/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespace
Rachamaid gu stòr dàta Ceph gus cleachdaiche fa leth a chruthachadh an sin. Tha na sgrìobhainnean ag ràdh gu bheil feum aig neach-solair CephFS air còraichean-slighe rianadair brabhsair. Ach cruthaichidh sinn neach-cleachdaidh fa leth fs le còraichean cuibhrichte:
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'
Agus bheir sinn sùil sa bhad air an iuchair ruigsinneachd aige, bidh feum againn air nas fhaide air adhart:
ceph auth get-key client.fs
Cruthaichidh sinn Secret and StorageClass air leth.
Chan eil dad ùr, tha sinn air seo fhaicinn mar-thà san eisimpleir de RBD:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-cephfs-secret
namespace: ceph-csi-cephfs
stringData:
# Необходимо для динамически создаваемых томов
adminID: fs
adminKey: <вывод предыдущей команды>
A’ cur an gnìomh am manifesto:
kubectl apply -f secret.yaml
Agus a-nis - clas stòraidh air leth:
---
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
Leig leinn a lìonadh a-mach an seo braisle agus iomchaidh ann an Kubernetes:
kubectl apply -f storageclass.yaml
sgrùdadh
Gus sgrùdadh a dhèanamh, mar anns an eisimpleir roimhe, cruthaichidh sinn PVC:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-cephfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: csi-cephfs-sc
Agus thoir sùil air làthaireachd PVC / PV:
kubectl get pvc
kubectl get pv
Ma tha thu airson sùil a thoirt air faidhlichean agus clàran ann an CephFS, faodaidh tu an siostam faidhle seo a chuir suas an àiteigin. Mar eisimpleir mar a chithear gu h-ìosal.
Rachamaid gu aon de na nodan cnuasachaidh Ceph agus dèan sinn na gnìomhan a leanas:
# Точка монтирования
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
Gu dearbh, chan eil a bhith a’ cur suas FS air nód Ceph mar seo freagarrach ach airson adhbharan trèanaidh, agus is e sin a bhios sinn a’ dèanamh air ar
Agus mu dheireadh, leig dhuinn sùil a thoirt air mar a tha cùisean ag obair le bhith ag ath-mheudachadh meud a thaobh CephFS. Tillidh sinn gu Kubernetes agus deasaich sinn am manifesto againn airson PVC - àrdaich am meud an sin, mar eisimpleir, gu 7Gi.
Feuch an cuir sinn am faidhle deasaichte an sàs:
kubectl apply -f pvc.yaml
Bheir sinn sùil air an eòlaire air a chuir suas gus faicinn mar a tha an cuota air atharrachadh:
getfattr -n ceph.quota.max_bytes <каталог-с-данными>
Gus an obraich an àithne seo, is dòcha gum feum thu am pasgan a stàladh air an t-siostam agad attr.
Tha eagal air na sùilean, ach nì na làmhan
Tha coltas gu bheil na geasan sin agus na taisbeanaidhean fada YAML iom-fhillte air an uachdar, ach ann an cleachdadh, bidh oileanaich Slurm a’ faighinn an crochadh gu math luath.
Anns an artaigil seo cha deach sinn gu domhainn a-steach don jungle - tha sgrìobhainnean oifigeil ann airson sin. Ma tha ùidh agad anns an fhiosrachadh mu bhith a’ stèidheachadh stòradh Ceph le cruinneachadh Kubernetes, cuidichidh na ceanglaichean seo:
Air a’ chùrsa Slurm
Agus ma tha barrachd ùidh agad ann an stòradh dàta, an uairsin clàraich airson
Ùghdar an artaigil: Alexander Shvalov, innleadair practaigeach
Source: www.habr.com