Eisimpleir phractaigeach de bhith a’ ceangal stòradh stèidhichte air Ceph ri cruinneachadh Kubernetes

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 dh ’innis, agus an-diugh bheir sinn sùil nas mionaidiche air a’ mheasgachadh de CSI agus Ceph: seallaidh sinn ciamar ceangail stòradh Ceph gu buidheann Kubernetes.
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?

Eisimpleir phractaigeach de bhith a’ ceangal stòradh stèidhichte air Ceph ri cruinneachadh Kubernetes

Mar sin, tha cruinneachadh Kubernetes agad aig do chorragan, air a chleachdadh, mar eisimpleir, cubespray. Tha cruinneachadh Ceph ag obair faisg air làimh - faodaidh tu cuideachd a stàladh, mar eisimpleir, le seo seata de leabhraichean-cluiche. Tha mi an dòchas nach fheumar iomradh a thoirt air gum feum lìonra a bhith ann le leud-bann co-dhiù 10 Gbit / s airson cinneasachadh eatorra.

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 Cùrsaichean slurm. Chan eil mi a’ smaoineachadh gun dèanadh duine seo ann an cinneasachadh; tha cunnart mòr ann gun tèid faidhlichean cudromach a dhubhadh às gun fhiosta.

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:

Prionnsabalan coitcheann Kubernetes a bhith ag obair le leabhraichean a-nuas
Sgrìobhainnean RBD
A’ fighe a-steach RBD agus Kubernetes bho shealladh Ceph
Ag aonachadh RBD agus Kubernetes bho shealladh CSI
Sgrìobhainnean coitcheann CephFS
Ag aonachadh CephFS agus Kubernetes bho shealladh CSI

Air a’ chùrsa Slurm Bunait Kubernetes faodaidh tu a dhol beagan nas fhaide agus cleachd fìor thagradh ann an Kubernetes a chleachdas CephFS mar stòradh fhaidhlichean. Tro iarrtasan GET/POST bidh e comasach dhut faidhlichean a ghluasad gu Ceph agus am faighinn bhuapa.

Agus ma tha barrachd ùidh agad ann an stòradh dàta, an uairsin clàraich airson cùrsa ùr air Ceph. Fhad ‘s a tha an deuchainn beta a’ dol air adhart, gheibhear an cùrsa aig lasachadh agus faodaidh tu buaidh a thoirt air an t-susbaint aige.

Ùghdar an artaigil: Alexander Shvalov, innleadair practaigeach Drochaid a Deas, Rianadair dearbhte Kubernetes, ùghdar agus leasaiche cùrsaichean Slurm.

Source: www.habr.com