Mae Rhyngwyneb Storio Cynhwysydd (CSI) yn rhyngwyneb unedig rhwng Kubernetes a systemau storio. Rydym eisoes wedi siarad yn fyr amdano
Mae'r erthygl yn darparu enghreifftiau go iawn, er eu bod ychydig wedi'u symleiddio, er hwylustod canfyddiad. Nid ydym yn ystyried gosod a ffurfweddu clystyrau Ceph a Kubernetes.
Ydych chi'n pendroni sut mae'n gweithio?
Felly, mae gennych chi glwstwr Kubernetes ar flaenau eich bysedd, wedi'i ddefnyddio, er enghraifft,
Os oes gennych chi hyn i gyd, gadewch i ni fynd!
Yn gyntaf, gadewch i ni fynd i un o nodau clwstwr Ceph a gwirio bod popeth mewn trefn:
ceph health
ceph -s
Nesaf, byddwn yn creu cronfa ar unwaith ar gyfer disgiau RBD:
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
Gadewch i ni symud ymlaen i glwstwr Kubernetes. Yno, yn gyntaf oll, byddwn yn gosod gyrrwr CSI Ceph ar gyfer RBD. Byddwn yn gosod, yn ôl y disgwyl, trwy Helm.
Rydyn ni'n ychwanegu ystorfa gyda siart, rydyn ni'n cael set o newidynnau ar gyfer y siart ceph-csi-rbd:
helm repo add ceph-csi https://ceph.github.io/csi-charts
helm inspect values ceph-csi/ceph-csi-rbd > cephrbd.yml
Nawr mae angen i chi lenwi'r ffeil cephrbd.yml. I wneud hyn, darganfyddwch ID clwstwr a chyfeiriadau IP monitorau yn Ceph:
ceph fsid # так мы узнаем clusterID
ceph mon dump # а так увидим IP-адреса мониторов
Rydyn ni'n nodi'r gwerthoedd a gafwyd yn y ffeil cephrbd.yml. Ar yr un pryd, rydym yn galluogi creu polisïau PSP (Pod Security Policies). Opsiynau mewn adrannau nodeplugin и darparydd eisoes yn y ffeil, gellir eu cywiro fel y dangosir isod:
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
Nesaf, y cyfan sydd ar ôl i ni yw gosod y siart yng nghlwstwr Kubernetes.
helm upgrade -i ceph-csi-rbd ceph-csi/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespace
Gwych, mae'r gyrrwr RBD yn gweithio!
Gadewch i ni greu StorageClass newydd yn Kubernetes. Mae hyn eto yn gofyn am ychydig o tincian gyda Ceph.
Rydyn ni'n creu defnyddiwr newydd yn Ceph ac yn rhoi hawliau iddo ysgrifennu i'r pwll Ciwb:
ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'
Nawr, gadewch i ni weld bod yr allwedd mynediad yn dal i fod yno:
ceph auth get-key client.rbdkube
Bydd y gorchymyn yn allbynnu rhywbeth fel hyn:
AQCO9NJbhYipKRAAMqZsnqqS/T8OYQX20xIa9A==
Gadewch i ni ychwanegu'r gwerth hwn at Secret yng nghlwstwr Kubernetes - lle mae ei angen arnom allwedd defnyddiwr:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-rbd-secret
namespace: ceph-csi-rbd
stringData:
# Значения ключей соответствуют имени пользователя и его ключу, как указано в
# кластере Ceph. ID юзера должен иметь доступ к пулу,
# указанному в storage class
userID: rbdkube
userKey: <user-key>
Ac rydyn ni'n creu ein cyfrinach:
kubectl apply -f secret.yaml
Nesaf, mae arnom angen maniffest StorageClass rhywbeth fel hyn:
---
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
Mae angen ei llenwi clwstwrID, yr ydym eisoes wedi'i ddysgu gan y tîm ceph fsid, a chymhwyso'r amlygiad hwn i glwstwr Kubernetes:
kubectl apply -f storageclass.yaml
I wirio sut mae'r clystyrau'n gweithio gyda'i gilydd, gadewch i ni greu'r PVC canlynol (Hawliad Cyfrol Parhaus):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rbd-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: csi-rbd-sc
Dewch i ni weld ar unwaith sut y creodd Kubernetes y gyfrol y gofynnwyd amdani yn Ceph:
kubectl get pvc
kubectl get pv
Mae popeth yn ymddangos yn wych! Sut olwg sydd ar hwn ar ochr Ceph?
Cawn restr o gyfrolau yn y pwll a gweld gwybodaeth am ein cyfrol:
rbd ls -p kube
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653 # тут, конечно же, будет другой ID тома, который выдала предыдущая команда
Nawr, gadewch i ni weld sut mae newid maint cyfaint RBD yn gweithio.
Newidiwch faint cyfaint yn y maniffest pvc.yaml i 2Gi a'i gymhwyso:
kubectl apply -f pvc.yaml
Gadewch i ni aros i'r newidiadau ddod i rym ac edrych ar faint y gyfrol eto.
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653
kubectl get pv
kubectl get pvc
Gwelwn nad yw maint PVC wedi newid. I ddarganfod pam, gallwch holi Kubernetes am ddisgrifiad YAML o'r PVC:
kubectl get pvc rbd-pvc -o yaml
Dyma'r broblem:
neges: Aros i'r defnyddiwr (ail-)gychwyn pod i orffen newid maint y system ffeiliau ar y nod. math: FileSystemResizePending
Hynny yw, mae'r ddisg wedi tyfu, ond nid yw'r system ffeiliau arni.
I dyfu'r system ffeiliau, mae angen i chi osod y cyfaint. Yn ein gwlad ni, nid yw'r PVC / PV a grëwyd yn cael ei ddefnyddio mewn unrhyw ffordd ar hyn o bryd.
Gallwn greu Pod prawf, er enghraifft fel hyn:
---
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
A nawr gadewch i ni edrych ar PVC:
kubectl get pvc
Mae'r maint wedi newid, mae popeth yn iawn.
Yn y rhan gyntaf, buom yn gweithio gyda'r ddyfais bloc RBD (mae'n sefyll am Rados Block Device), ond ni ellir gwneud hyn os oes angen i wahanol ficrowasanaethau weithio gyda'r ddisg hon ar yr un pryd. Mae CephFS yn llawer mwy addas ar gyfer gweithio gyda ffeiliau yn hytrach na delweddau disg.
Gan ddefnyddio enghraifft clystyrau Ceph a Kubernetes, byddwn yn ffurfweddu CSI ac endidau angenrheidiol eraill i weithio gyda CephFS.
Gadewch i ni gael y gwerthoedd o'r siart Helm newydd sydd eu hangen arnom:
helm inspect values ceph-csi/ceph-csi-cephfs > cephfs.yml
Unwaith eto mae angen i chi lenwi'r ffeil cephfs.yml. Fel o'r blaen, bydd gorchmynion Ceph yn helpu:
ceph fsid
ceph mon dump
Llenwch y ffeil gyda gwerthoedd fel hyn:
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
Sylwch fod cyfeiriadau monitor wedi'u nodi yn y cyfeiriad ffurflen syml:port. I osod cephfs ar nod, trosglwyddir y cyfeiriadau hyn i'r modiwl cnewyllyn, nad yw'n gwybod eto sut i weithio gyda'r protocol monitor v2.
Rydym yn newid y porthladd ar gyfer httpMetrics (bydd Prometheus yn mynd yno ar gyfer monitro metrigau) fel nad yw'n gwrthdaro â nginx-proxy, sy'n cael ei osod gan Kubespray. Efallai na fydd angen hyn arnoch chi.
Gosodwch y siart Helm yng nghlwstwr Kubernetes:
helm upgrade -i ceph-csi-cephfs ceph-csi/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespace
Gadewch i ni fynd i storfa ddata Ceph i greu defnyddiwr ar wahân yno. Mae'r ddogfennaeth yn nodi bod angen hawliau mynediad gweinyddwr clwstwr ar ddarparwr CephFS. Ond byddwn yn creu defnyddiwr ar wahân fs gyda hawliau cyfyngedig:
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'
A gadewch i ni edrych ar ei allwedd mynediad ar unwaith, bydd ei angen arnom yn nes ymlaen:
ceph auth get-key client.fs
Gadewch i ni greu Secret a StorageClass ar wahân.
Dim byd newydd, rydym eisoes wedi gweld hyn yn yr enghraifft o RBD:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-cephfs-secret
namespace: ceph-csi-cephfs
stringData:
# Необходимо для динамически создаваемых томов
adminID: fs
adminKey: <вывод предыдущей команды>
Cymhwyso'r maniffest:
kubectl apply -f secret.yaml
A nawr - Dosbarth Storio ar wahân:
---
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
Gadewch i ni ei lenwi yma clwstwrID ac yn berthnasol yn Kubernetes:
kubectl apply -f storageclass.yaml
Проверка
I wirio, fel yn yr enghraifft flaenorol, gadewch i ni greu PVC:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-cephfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: csi-cephfs-sc
A gwiriwch bresenoldeb PVC / PV:
kubectl get pvc
kubectl get pv
Os ydych am edrych ar ffeiliau a chyfeiriaduron yn CephFS, gallwch osod y system ffeiliau hon yn rhywle. Er enghraifft, fel y dangosir isod.
Gadewch i ni fynd i un o nodau clwstwr Ceph a pherfformio'r camau canlynol:
# Точка монтирования
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
Wrth gwrs, dim ond at ddibenion hyfforddi y mae mowntio FS ar nod Ceph fel hwn yn addas, sef yr hyn a wnawn ar ein
Ac yn olaf, gadewch i ni wirio sut mae pethau'n gweithio gyda newid maint cyfeintiau yn achos CephFS. Gadewch i ni ddychwelyd i Kubernetes a golygu ein maniffest ar gyfer PVC - cynyddwch y maint yno, er enghraifft, i 7Gi.
Gadewch i ni gymhwyso'r ffeil olygedig:
kubectl apply -f pvc.yaml
Edrychwn ar y cyfeiriadur wedi'i osod i weld sut mae'r cwota wedi newid:
getfattr -n ceph.quota.max_bytes <каталог-с-данными>
Er mwyn i'r gorchymyn hwn weithio, efallai y bydd angen i chi osod y pecyn ar eich system attr.
Mae ofn ar y llygaid, ond mae'r dwylo'n gwneud hynny
Mae'r holl swynion hyn ac amlygiadau hir YAML yn ymddangos yn gymhleth ar yr wyneb, ond yn ymarferol, mae myfyrwyr Slurm yn cael gafael arnynt yn eithaf cyflym.
Yn yr erthygl hon ni aethom yn ddwfn i'r jyngl - mae dogfennaeth swyddogol ar gyfer hynny. Os oes gennych ddiddordeb yn y manylion am sefydlu storfa Ceph gyda chlwstwr Kubernetes, bydd y dolenni hyn yn helpu:
Ar y cwrs Slurm
Ac os oes gennych fwy o ddiddordeb mewn storio data, yna cofrestrwch ar gyfer
Awdur yr erthygl: Alexander Shvalov, peiriannydd gweithredol
Ffynhonnell: hab.com