Container Storage Interface (CSI) er sameinað tengi milli Kubernetes og geymslukerfa. Við höfum þegar rætt það stuttlega
Greinin gefur raunveruleg, þó aðeins einfölduð dæmi til að auðvelda skynjun. Við íhugum ekki að setja upp og stilla Ceph og Kubernetes klasa.
Ertu að spá í hvernig það virkar?
Þannig að þú ert með Kubernetes þyrping innan seilingar, útbýður, til dæmis,
Ef þú hefur allt þetta, þá skulum við fara!
Fyrst skulum við fara í einn af Ceph klasahnútunum og athuga hvort allt sé í lagi:
ceph health
ceph -s
Næst munum við strax búa til laug fyrir RBD diska:
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
Við skulum halda áfram að Kubernetes klasanum. Þar munum við fyrst og fremst setja upp Ceph CSI rekla fyrir RBD. Við munum setja upp, eins og búist var við, í gegnum Helm.
Við bætum við geymslu með myndriti, við fáum sett af breytum fyrir ceph-csi-rbd töfluna:
helm repo add ceph-csi https://ceph.github.io/csi-charts
helm inspect values ceph-csi/ceph-csi-rbd > cephrbd.yml
Nú þarftu að fylla út cephrbd.yml skrána. Til að gera þetta, finndu út klasaauðkenni og IP tölur skjáa í Ceph:
ceph fsid # так мы узнаем clusterID
ceph mon dump # а так увидим IP-адреса мониторов
Við sláum inn gildin sem fengust í cephrbd.yml skrána. Á sama tíma gerum við kleift að búa til PSP stefnur (Pod Security Policies). Valmöguleikar í köflum nodeplugin и útvegsaðili þegar í skránni er hægt að leiðrétta þær eins og sýnt er hér að neðan:
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
Næst er allt sem eftir er fyrir okkur að setja upp töfluna í Kubernetes klasanum.
helm upgrade -i ceph-csi-rbd ceph-csi/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespace
Frábært, RBD bílstjórinn virkar!
Búum til nýjan StorageClass í Kubernetes. Þetta krefst aftur smá fiktunar við Ceph.
Við búum til nýjan notanda í Ceph og gefum honum réttindi til að skrifa í sundlaugina teningur:
ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'
Nú skulum við sjá að aðgangslykillinn er enn til staðar:
ceph auth get-key client.rbdkube
Skipunin mun gefa út eitthvað á þessa leið:
AQCO9NJbhYipKRAAMqZsnqqS/T8OYQX20xIa9A==
Við skulum bæta þessu gildi við Secret í Kubernetes klasanum - þar sem við þurfum á því að halda notanda lykill:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-rbd-secret
namespace: ceph-csi-rbd
stringData:
# Значения ключей соответствуют имени пользователя и его ключу, как указано в
# кластере Ceph. ID юзера должен иметь доступ к пулу,
# указанному в storage class
userID: rbdkube
userKey: <user-key>
Og við búum til leyndarmál okkar:
kubectl apply -f secret.yaml
Næst þurfum við StorageClass upplýsingaskrá eitthvað á þessa leið:
---
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
Þarf að fylla út clusterID, sem við höfum þegar lært af liðinu ceph fsid, og notaðu þessa upplýsingaskrá á Kubernetes klasann:
kubectl apply -f storageclass.yaml
Til að athuga hvernig klasarnir vinna saman skulum við búa til eftirfarandi PVC (Persistent Volume Claim):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rbd-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: csi-rbd-sc
Við skulum sjá strax hvernig Kubernetes bjó til umbeðið bindi í Ceph:
kubectl get pvc
kubectl get pv
Allt virðist vera frábært! Hvernig lítur þetta út á Ceph hliðinni?
Við fáum lista yfir bindi í sundlauginni og skoðum upplýsingar um magn okkar:
rbd ls -p kube
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653 # тут, конечно же, будет другой ID тома, который выдала предыдущая команда
Nú skulum við sjá hvernig stærð RBD hljóðstyrks virkar.
Breyttu rúmmálsstærðinni í pvc.yaml upplýsingaskránni í 2Gi og notaðu það:
kubectl apply -f pvc.yaml
Bíðum eftir að breytingarnar taki gildi og skoðum hljóðstyrkstærðina aftur.
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653
kubectl get pv
kubectl get pvc
Við sjáum að stærð PVC hefur ekki breyst. Til að komast að því hvers vegna geturðu leitað til Kubernetes um YAML lýsingu á PVC:
kubectl get pvc rbd-pvc -o yaml
Hér er vandamálið:
skilaboð: Bíður eftir því að notandi (endur)ræsi hólf til að ljúka við að breyta stærð skráarkerfis á hljóðstyrk á hnút. gerð: FileSystemResizePending
Það er að segja að diskurinn hefur stækkað en skráarkerfið á honum ekki.
Til að stækka skráarkerfið þarftu að setja hljóðstyrkinn upp. Í okkar landi er búið til PVC / PV sem stendur ekki notað á nokkurn hátt.
Við getum búið til test Pod, til dæmis svona:
---
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
Og nú skulum við líta á PVC:
kubectl get pvc
Stærðin hefur breyst, allt er í lagi.
Í fyrsta hlutanum unnum við með RBD blokkartækið (það stendur fyrir Rados Block Device), en það er ekki hægt að gera það ef mismunandi örþjónustur þurfa að vinna með þennan disk samtímis. CephFS hentar miklu betur til að vinna með skrár en diskamyndir.
Með því að nota dæmið um Ceph og Kubernetes klasa munum við stilla CSI og aðrar nauðsynlegar einingar til að vinna með CephFS.
Við skulum fá gildin úr nýja Helm töflunni sem við þurfum:
helm inspect values ceph-csi/ceph-csi-cephfs > cephfs.yml
Aftur þarftu að fylla út cephfs.yml skrána. Eins og áður munu Ceph skipanir hjálpa:
ceph fsid
ceph mon dump
Fylltu út skrána með gildum eins og þessum:
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
Vinsamlegast athugaðu að netföng skjás eru tilgreind í einföldu formi address:port. Til að tengja cephfs á hnút eru þessi vistföng flutt yfir í kjarnaeininguna, sem veit ekki enn hvernig á að vinna með v2 skjásamskiptareglunum.
Við breytum gáttinni fyrir httpMetrics (Prometheus mun fara þangað til að fylgjast með mæligildum) þannig að hún stangist ekki á við nginx-proxy, sem er sett upp af Kubespray. Þú gætir þurft þetta ekki.
Settu upp Helm töfluna í Kubernetes klasanum:
helm upgrade -i ceph-csi-cephfs ceph-csi/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespace
Förum í Ceph gagnageymsluna til að búa til sérstakan notanda þar. Í skjölunum kemur fram að CephFS veitir krefst aðgangsréttinda klasastjórnanda. En við munum búa til sérstakan notanda fs með takmörkuðum réttindum:
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'
Og við skulum líta strax á aðgangslykil hans, við munum þurfa hann síðar:
ceph auth get-key client.fs
Búum til aðskilið Secret og StorageClass.
Ekkert nýtt, við höfum þegar séð þetta í dæminu um RBD:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-cephfs-secret
namespace: ceph-csi-cephfs
stringData:
# Необходимо для динамически создаваемых томов
adminID: fs
adminKey: <вывод предыдущей команды>
Notkun upplýsingaskrárinnar:
kubectl apply -f secret.yaml
Og nú - sérstakur geymsluflokkur:
---
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
Við skulum fylla það út hér clusterID og á við í Kubernetes:
kubectl apply -f storageclass.yaml
Проверка
Til að athuga, eins og í fyrra dæmi, skulum við búa til PVC:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-cephfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: csi-cephfs-sc
Og athugaðu tilvist PVC / PV:
kubectl get pvc
kubectl get pv
Ef þú vilt skoða skrár og möppur í CephFS geturðu tengt þetta skráarkerfi einhvers staðar. Til dæmis eins og sýnt er hér að neðan.
Við skulum fara í einn af Ceph klasahnútunum og framkvæma eftirfarandi aðgerðir:
# Точка монтирования
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
Að setja FS á Ceph hnút eins og þennan hentar auðvitað aðeins í þjálfunarskyni, sem er það sem við gerum á okkar
Og að lokum skulum við athuga hvernig hlutirnir virka við að breyta stærð rúmmáls þegar um CephFS er að ræða. Snúum okkur aftur til Kubernetes og breytum upplýsingaskránni okkar fyrir PVC - aukum stærðina þar, til dæmis í 7Gi.
Við skulum beita breyttu skránni:
kubectl apply -f pvc.yaml
Við skulum líta á uppsettu möppuna til að sjá hvernig kvótinn hefur breyst:
getfattr -n ceph.quota.max_bytes <каталог-с-данными>
Til að þessi skipun virki gætirðu þurft að setja upp pakkann á vélinni þinni attr.
Augun eru hrædd, en hendurnar gera það
Allir þessir galdrar og löngu YAML birtingarmyndir virðast flóknar á yfirborðinu, en í reynd ná Slurm-nemendur þeim nokkuð fljótt.
Í þessari grein fórum við ekki djúpt inn í frumskóginn - það eru til opinber skjöl fyrir því. Ef þú hefur áhuga á upplýsingum um að setja upp Ceph geymslu með Kubernetes klasa, munu þessir tenglar hjálpa:
Á Slurm námskeiðinu
Og ef þú hefur meiri áhuga á gagnageymslu, skráðu þig þá fyrir
Höfundur greinarinnar: Alexander Shvalov, starfandi verkfræðingur
Heimild: www.habr.com