Container Storage Interface (CSI) Kubernetes eta biltegiratze sistemen arteko interfaze bateratua da. Dagoeneko laburki hitz egin dugu
Artikuluak adibide errealak eskaintzen ditu, nahiz eta apur bat sinplifikatuak hautemateko erraztasunerako. Ez dugu kontuan hartzen Ceph eta Kubernetes klusterrak instalatzea eta konfiguratzea.
Nola funtzionatzen duen galdetzen al duzu?
Beraz, Kubernetes kluster bat duzu eskura, zabalduta, adibidez,
Hau guztia baduzu, goazen!
Lehenik eta behin, joan gaitezen Ceph klusterreko nodo batera eta egiaztatu dena ondo dagoela:
ceph health
ceph -s
Ondoren, berehala sortuko dugu RBD diskoetarako igerileku bat:
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
Goazen Kubernetes klusterera. Bertan, lehenik eta behin, RBDrako Ceph CSI kontrolatzailea instalatuko dugu. Helm-en bidez instalatuko dugu, espero bezala.
Diagrama batekin biltegi bat gehitzen dugu, ceph-csi-rbd grafikorako aldagai multzo bat lortzen dugu:
helm repo add ceph-csi https://ceph.github.io/csi-charts
helm inspect values ceph-csi/ceph-csi-rbd > cephrbd.yml
Orain cephrbd.yml fitxategia bete behar duzu. Horretarako, ezagutu Ceph-eko monitoreen kluster IDa eta IP helbideak:
ceph fsid # ΡΠ°ΠΊ ΠΌΡ ΡΠ·Π½Π°Π΅ΠΌ clusterID
ceph mon dump # Π° ΡΠ°ΠΊ ΡΠ²ΠΈΠ΄ΠΈΠΌ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΎΠ²
Lortutako balioak cephrbd.yml fitxategian sartzen ditugu. Aldi berean, PSP politikak (Pod Security Policies) sortzea ahalbidetzen dugu. Aukerak ataletan nodeplugin ΠΈ hornitzaile Dagoeneko fitxategian, zuzendu daitezke behean erakusten den moduan:
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
Ondoren, Kubernetes klusterrean taula instalatzea besterik ez zaigu geratzen.
helm upgrade -i ceph-csi-rbd ceph-csi/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespace
Bikaina, RBD kontrolatzaileak funtzionatzen du!
Sortu dezagun StorageClass berri bat Kubernetes-en. Honek berriro ere Ceph-ekin txikitu pixka bat eskatzen du.
Ceph-en erabiltzaile berri bat sortzen dugu eta igerilekuan idazteko eskubideak ematen dizkiogu Kube:
ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'
Orain ikus dezagun sarbide-gakoa oraindik hor dagoela:
ceph auth get-key client.rbdkube
Komandoak honelako zerbait aterako du:
AQCO9NJbhYipKRAAMqZsnqqS/T8OYQX20xIa9A==
Gehi diezaiogun balio hau Kubernetes klusterrean Secretari, behar dugun tokian erabiltzaile-gakoa:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-rbd-secret
namespace: ceph-csi-rbd
stringData:
# ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π΅Π³ΠΎ ΠΊΠ»ΡΡΡ, ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π²
# ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Ceph. ID ΡΠ·Π΅ΡΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΡΠ»Ρ,
# ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π² storage class
userID: rbdkube
userKey: <user-key>
Eta gure sekretua sortzen dugu:
kubectl apply -f secret.yaml
Ondoren, StorageClass manifestu bat behar dugu honelako zerbait:
---
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
Bete behar da clusterID, taldeak dagoeneko ikasi duguna ceph fsid, eta aplikatu manifestu hau Kubernetes klusterrean:
kubectl apply -f storageclass.yaml
Klusterrak elkarrekin nola funtzionatzen duten egiaztatzeko, sor dezagun honako PVC (Bolumien Erreklamazio Iraunkorra):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rbd-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: csi-rbd-sc
Ikus dezagun berehala Kubernetes-ek Ceph-en eskatutako bolumena nola sortu zuen:
kubectl get pvc
kubectl get pv
Dena bikaina omen da! Zer itxura du honek Ceph aldean?
Igerilekuan bolumenen zerrenda bat jasotzen dugu eta gure bolumenari buruzko informazioa ikusten dugu:
rbd ls -p kube
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653 # ΡΡΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, Π±ΡΠ΄Π΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ID ΡΠΎΠΌΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ΄Π°Π»Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°
Orain ikus dezagun nola funtzionatzen duen RBD bolumen baten tamaina aldatzea.
Aldatu pvc.yaml manifestuaren bolumenaren tamaina 2Gi-ra eta aplikatu:
kubectl apply -f pvc.yaml
Itxaron dezagun aldaketak eragina izan arte eta begiratu berriro bolumenaren tamaina.
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653
kubectl get pv
kubectl get pvc
PVCaren tamaina ez dela aldatu ikusten dugu. Zergatik jakiteko, Kubernetes kontsulta dezakezu PVCaren YAML deskribapen bat:
kubectl get pvc rbd-pvc -o yaml
Hona hemen arazoa:
mezua: Erabiltzaileak pod bat (berriro) abiarazteko zain, fitxategi-sistemaren bolumenaren tamaina aldatzeko nodoan amaitzeko. mota: FileSystemResizePending
Hau da, diskoa hazi egin da, baina bertan dagoen fitxategi-sistema ez.
Fitxategi-sistema hazteko, bolumena muntatu behar duzu. Gurean, gaur egun sortutako PVC/PV ez da inola ere erabiltzen.
Test Pod bat sor dezakegu, adibidez, honela:
---
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
Eta orain ikus dezagun PVC-a:
kubectl get pvc
Tamaina aldatu da, dena ondo dago.
Lehenengo zatian, RBD bloke gailuarekin lan egin dugu (Rados Block Device esan nahi du), baina hori ezin da egin mikrozerbitzu ezberdinek disko honekin aldi berean lan egin behar badute. CephFS askoz ere egokia da diskoko irudiekin baino fitxategiekin lan egiteko.
Ceph eta Kubernetes klusterren adibidea erabiliz, CSI eta beharrezko beste entitate batzuk konfiguratuko ditugu CephFS-ekin lan egiteko.
Lor ditzagun balioak behar dugun Helm grafiko berritik:
helm inspect values ceph-csi/ceph-csi-cephfs > cephfs.yml
Berriz ere cephfs.yml fitxategia bete behar duzu. Lehen bezala, Ceph komandoek lagunduko dute:
ceph fsid
ceph mon dump
Bete fitxategia honelako balioekin:
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
Kontuan izan monitoreen helbideak formulario sinplean helbide:portuan zehazten direla. Cephfs nodo batean muntatzeko, helbide hauek nukleoaren modulura transferitzen dira, zeinak oraindik ez daki nola funtzionatzen duen v2 monitorearen protokoloarekin.
httpMetrics-en ataka aldatzen dugu (Prometheus hara joango da metrikak monitorizatzeko), Kubespray-k instalatzen duen nginx-proxy-rekin gatazkarik egon ez dadin. Baliteke hau behar ez izatea.
Instalatu Helm diagrama Kubernetes klusterrean:
helm upgrade -i ceph-csi-cephfs ceph-csi/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespace
Goazen Ceph datu-biltegira hor aparteko erabiltzaile bat sortzeko. Dokumentazioak dio CephFS hornitzaileak klusterreko administratzaileen sarbide-eskubideak behar dituela. Baina erabiltzaile bereizi bat sortuko dugu fs eskubide mugatuekin:
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'
Eta berehala ikus dezagun bere sarbide-gakoa, geroago beharko dugu:
ceph auth get-key client.fs
Sor ditzagun Secret eta StorageClass bereiziak.
Ezer berririk ez, RBDren adibidean hau ikusi dugu jada:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-cephfs-secret
namespace: ceph-csi-cephfs
stringData:
# ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΡ
ΡΠΎΠΌΠΎΠ²
adminID: fs
adminKey: <Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ>
Manifestua aplikatzea:
kubectl apply -f secret.yaml
Eta orain - StorageClass bereizi bat:
---
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
Bete dezagun hemen clusterID eta Kubernetes-en aplikagarria:
kubectl apply -f storageclass.yaml
ikuskatzeko
Egiaztatzeko, aurreko adibidean bezala, sor dezagun PVC bat:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-cephfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: csi-cephfs-sc
Eta egiaztatu PVC/PVren presentzia:
kubectl get pvc
kubectl get pv
CephFS-ko fitxategiak eta direktorioak begiratu nahi badituzu, fitxategi-sistema hau nonbait munta dezakezu. Adibidez, behean erakusten den moduan.
Goazen Ceph klusterreko nodo batera eta egin ditzagun ekintza hauek:
# Π’ΠΎΡΠΊΠ° ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
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
Jakina, FS horrelako Ceph nodo batean muntatzea prestakuntza helburuetarako soilik egokia da, hau da, gurean egiten duguna.
Eta, azkenik, egiazta dezagun gauzak nola funtzionatzen duten bolumenak tamaina aldatzearekin CephFS-en kasuan. Itzul gaitezen Kubernetesera eta editatu gaitezen PVCrako manifestua - handitu han tamaina, adibidez, 7Gi-ra.
Aplikatu dezagun editatutako fitxategia:
kubectl apply -f pvc.yaml
Ikus dezagun muntatutako direktoriora kuota nola aldatu den ikusteko:
getfattr -n ceph.quota.max_bytes <ΠΊΠ°ΡΠ°Π»ΠΎΠ³-Ρ-Π΄Π°Π½Π½ΡΠΌΠΈ>
Komando honek funtziona dezan, baliteke paketea zure sisteman instalatu behar izatea attr.
Begiak beldur dira, baina eskuak bai
Sorginkeria eta YAML manifestu luze hauek guztiak konplikatuak dirudite azalean, baina praktikan, Slurm-eko ikasleek nahiko azkar lortzen dituzte.
Artikulu honetan ez gara oihanean sakondu - horretarako dokumentazio ofiziala dago. Ceph biltegiratzea Kubernetes kluster batekin konfiguratzeko xehetasunak interesatzen bazaizkizu, esteka hauek lagunduko dizute:
Slurm ikastaroan
Eta datuak biltegiratzean gehiago interesatzen bazaizu, eman izena
Artikuluaren egilea: Alexander Shvalov, ingeniari praktikatzailea
Iturria: www.habr.com