Container Storage Interface (CSI) on ühtne liides Kubernetese ja salvestussüsteemide vahel. Oleme sellest juba lühidalt rääkinud
Artikkel pakub tõelisi, kuigi veidi lihtsustatud näiteid tajumise hõlbustamiseks. Me ei kaalu Cephi ja Kubernetese klastrite installimist ja konfigureerimist.
Kas teid huvitab, kuidas see toimib?
Seega on teie käeulatuses Kubernetese klaster, mis on juurutatud näiteks
Kui sul on see kõik olemas, siis lähme!
Kõigepealt läheme ühte Cephi klastri sõlme ja kontrollime, kas kõik on korras:
ceph health
ceph -s
Järgmisena loome kohe RBD-ketaste basseini:
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
Liigume edasi Kubernetese klastri juurde. Seal installime kõigepealt RBD jaoks Ceph CSI draiveri. Paigaldame ootuspäraselt Helmi kaudu.
Lisame diagrammiga hoidla, saame diagrammi ceph-csi-rbd jaoks muutujate komplekti:
helm repo add ceph-csi https://ceph.github.io/csi-charts
helm inspect values ceph-csi/ceph-csi-rbd > cephrbd.yml
Nüüd peate täitma faili cephrbd.yml. Selleks uurige Cephis olevate monitoride klastri ID-d ja IP-aadressid:
ceph fsid # так мы узнаем clusterID
ceph mon dump # а так увидим IP-адреса мониторов
Saadud väärtused sisestame faili cephrbd.yml. Samal ajal võimaldame luua PSP poliitikaid (Pod Security Policies). Valikud jaotistes nodeplugin и varustaja juba failis, saab neid parandada järgmiselt:
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
Järgmiseks jääb meile vaid diagramm Kubernetese klastris installida.
helm upgrade -i ceph-csi-rbd ceph-csi/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespace
Suurepärane, RBD draiver töötab!
Loome Kubernetesis uue StorageClassi. See nõuab jällegi Cephiga natuke nokitsemist.
Loome Cephis uue kasutaja ja anname talle õiguse basseini kirjutada Kuubik:
ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'
Nüüd vaatame, et pääsuvõti on endiselt olemas:
ceph auth get-key client.rbdkube
Käsk väljastab midagi sellist:
AQCO9NJbhYipKRAAMqZsnqqS/T8OYQX20xIa9A==
Lisame selle väärtuse Kubernetese klastris olevale Secretile – seal, kus seda vajame userKey:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-rbd-secret
namespace: ceph-csi-rbd
stringData:
# Значения ключей соответствуют имени пользователя и его ключу, как указано в
# кластере Ceph. ID юзера должен иметь доступ к пулу,
# указанному в storage class
userID: rbdkube
userKey: <user-key>
Ja me loome oma saladuse:
kubectl apply -f secret.yaml
Järgmiseks vajame StorageClassi manifesti midagi sellist:
---
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
Vajab täita klastri ID, mida oleme meeskonna poolt juba õppinud ceph fsidja rakendage see manifest Kubernetese klastrile:
kubectl apply -f storageclass.yaml
Et kontrollida, kuidas klastrid koos töötavad, loome järgmise PVC (püsiv mahunõue):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rbd-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: csi-rbd-sc
Vaatame kohe, kuidas Kubernetes lõi Cephis soovitud köite:
kubectl get pvc
kubectl get pv
Kõik tundub olevat suurepärane! Kuidas see Cephi poolel välja näeb?
Saame kogumis olevate köidete loendi ja vaatame teavet meie köite kohta:
rbd ls -p kube
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653 # тут, конечно же, будет другой ID тома, который выдала предыдущая команда
Nüüd vaatame, kuidas RBD helitugevuse suuruse muutmine töötab.
Muutke pvc.yamli manifestis helitugevuse suuruseks 2Gi ja rakendage see:
kubectl apply -f pvc.yaml
Ootame muudatuste jõustumist ja vaatame uuesti helitugevust.
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653
kubectl get pv
kubectl get pvc
Näeme, et PVC suurus pole muutunud. Põhjuse väljaselgitamiseks võite Kubernetesilt küsida PVC YAML-i kirjeldust:
kubectl get pvc rbd-pvc -o yaml
Siin on probleem:
teade: Ootab, kuni kasutaja (taas)käivitab podi, et lõpetada failisüsteemi mahu muutmine sõlmes. tüüp: FileSystemResizePending
See tähendab, et ketas on kasvanud, kuid sellel olev failisüsteem mitte.
Failisüsteemi laiendamiseks peate installima helitugevuse. Meie riigis ei ole loodud PVC/PV hetkel kuidagi kasutusel.
Saame luua näiteks sellise testpodi:
---
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
Ja nüüd vaatame PVC-d:
kubectl get pvc
Suurus on muutunud, kõik on korras.
Esimeses osas töötasime RBD-plokiseadmega (see tähistab Rados Block Device), kuid seda ei saa teha, kui selle kettaga peavad korraga töötama erinevad mikroteenused. CephFS sobib palju paremini failidega, mitte kettakujutistega töötamiseks.
Ceph ja Kubernetes klastrite näitel konfigureerime CSI ja muud vajalikud olemid CephFS-iga töötamiseks.
Võtame väärtused uuest Helmi diagrammist, mida vajame:
helm inspect values ceph-csi/ceph-csi-cephfs > cephfs.yml
Jällegi peate täitma faili cephfs.yml. Nagu varemgi, aitavad Cephi käsud:
ceph fsid
ceph mon dump
Täitke fail selliste väärtustega:
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
Pange tähele, et monitoride aadressid on määratud lihtsal kujul address:port. Ceffide ühendamiseks sõlmele kantakse need aadressid üle kerneli moodulisse, mis ei tea veel, kuidas v2 monitori protokolliga töötada.
Muudame httpMetricsi porti (Prometheus läheb sinna mõõdikute jälgimiseks), et see ei oleks vastuolus Kubespray installitud nginx-proxyga. Teil ei pruugi seda vaja minna.
Installige Helmi diagramm Kubernetese klastris:
helm upgrade -i ceph-csi-cephfs ceph-csi/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespace
Läheme Cephi andmepoodi, et luua seal eraldi kasutaja. Dokumentatsioonis öeldakse, et CephFS-i pakkumine nõuab klastri administraatori juurdepääsuõigusi. Aga loome eraldi kasutaja fs piiratud õigustega:
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'
Ja vaatame kohe tema juurdepääsuvõtit, vajame seda hiljem:
ceph auth get-key client.fs
Loome eraldi Secret ja StorageClass.
Pole midagi uut, oleme seda juba näinud RBD näites:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-cephfs-secret
namespace: ceph-csi-cephfs
stringData:
# Необходимо для динамически создаваемых томов
adminID: fs
adminKey: <вывод предыдущей команды>
Manifesti rakendamine:
kubectl apply -f secret.yaml
Ja nüüd - eraldi StorageClass:
---
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
Täidame selle siin klastri ID ja rakendatav Kubernetesis:
kubectl apply -f storageclass.yaml
Проверка
Kontrollimiseks, nagu eelmises näites, loome PVC:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-cephfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: csi-cephfs-sc
Ja kontrollige PVC/PV olemasolu:
kubectl get pvc
kubectl get pv
Kui soovite CephFS-is faile ja katalooge vaadata, saate selle failisüsteemi kuhugi paigaldada. Näiteks nagu allpool näidatud.
Läheme ühele Cephi klastri sõlmedest ja teeme järgmised toimingud:
# Точка монтирования
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
Loomulikult sobib FS-i paigaldamine sellisele Ceph-sõlmele ainult koolituse eesmärgil, mida me oma
Ja lõpuks, kontrollime, kuidas asjad CephFS-i puhul mahu suuruse muutmisega töötavad. Naaskem Kubernetese juurde ja redigeerime oma PVC manifesti – suurendage seal suurust näiteks 7Gi-ni.
Rakendame redigeeritud faili:
kubectl apply -f pvc.yaml
Vaatame ühendatud kataloogi, et näha, kuidas kvoot on muutunud:
getfattr -n ceph.quota.max_bytes <каталог-с-данными>
Selle käsu toimimiseks peate võib-olla installima paketi oma süsteemi attr.
Silmad kardavad, aga käed kardavad
Kõik need loitsud ja pikad YAML-i manifestid tunduvad pealtnäha keerulised, kuid praktikas saavad Slurmi õpilased neist üsna kiiresti aru.
Selles artiklis me sügavale džunglisse ei laskunud – selleks on olemas ametlik dokumentatsioon. Kui olete huvitatud Kubernetese klastri Cephi salvestusruumi seadistamise üksikasjadest, aitavad need lingid:
Slurmi kursusel
Ja kui olete rohkem huvitatud andmete salvestamisest, siis registreeruge
Artikli autor: Aleksandr Shvalov, praktiseeriv insener
Allikas: www.habr.com