Interface Kaydinta Kontaynarrada (CSI) waa isku xidhka midaysan ee u dhexeeya Kubernetes iyo nidaamyada kaydinta. Horay ayaanu uga hadalnay si kooban , maantana waxaan si dhow u eegi doonaa isku dhafka CSI iyo Ceph: waxaan tusi doonaa sida ilaa kooxda Kubernetes.
Maqaalku wuxuu bixiyaa tusaalooyin dhab ah, in kasta oo la fududeeyay si loo fududeeyo aragtida. Ma tixgelineyno rakibidda iyo habeynta kooxaha Ceph iyo Kubernetes.
Ma la yaaban tahay sida ay u shaqeyso?

Markaa, waxaad farahaaga ku haysaa koox Kubernetes ah, oo la diray, tusaale ahaan, . Waxaa jira koox Ceph ah oo ka shaqeysa meel u dhow - waxaad sidoo kale ku rakibi kartaa, tusaale ahaan, tan . Waxaan rajeynayaa in aysan jirin baahi loo qabo in la sheego in wax soo saarka dhexdooda ay tahay in ay jiraan shabakad leh xajmiga xajmiga ugu yaraan 10 Gbit / s.
Haddii waxaas oo dhan aad haysatid, ina keen!
Marka hore, aan tagno mid ka mid ah qanjidhada kooxda Ceph oo hubi in wax walba ay hagaagsan yihiin:
ceph health
ceph -sMarka xigta, waxaanu isla markiiba u abuuri doonaa barkad saxannada RBD:
ceph osd pool create kube 32
ceph osd pool application enable kube rbdAan u gudubno kooxda Kubernetes. Halkaa, marka hore, waxaanu ku rakibi doonaa darawalka Ceph CSI ee RBD. Waxaan ku rakibi doonaa, sida la filayo, iyada oo loo marayo Helm.
Waxaan ku darnaa kayd shax leh, waxaanu helnaa doorsoomayaal jaantuska ceph-csi-rbd:
helm repo add ceph-csi https://ceph.github.io/csi-charts
helm inspect values ceph-csi/ceph-csi-rbd > cephrbd.ymlHadda waxaad u baahan tahay inaad buuxiso faylka cephrbd.yml. Si tan loo sameeyo, ogow aqoonsiga kooxda iyo ciwaanka IP-ga ee kormeerayaasha Ceph:
ceph fsid # так мы узнаем clusterID
ceph mon dump # а так увидим IP-адреса мониторовWaxaan galeynaa qiyamka la helay faylka cephrbd.yml. Isla mar ahaantaana, waxaan awoodnaa abuurista siyaasadaha PSP (Pod Security Policy). Ikhtiyaarada qaybaha nodeplugin и bixiye mar horeba faylka, waa la sixi karaa sida hoos ku cad:
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: trueMarka xigta, waxa noo hadhay oo dhan waa in aan ku rakibno jaantuska kooxda Kubernetes.
helm upgrade -i ceph-csi-rbd ceph-csi/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespaceWay fiicantahay, darawalka RBD wuu shaqeeyaa!
Aynu ka abuurno fasalka kaydinta cusub ee Kubernetes. Tani waxay mar kale u baahan tahay xoogaa ka-fiirsi ah Ceph.
Waxaan ku abuurnay isticmaale cusub Ceph waxaanan siinaa xuquuq uu ku qoro barkada cube:
ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'Hadda aan aragno furaha gelitaanka oo weli jira:
ceph auth get-key client.rbdkubeAmarku wuxuu soo saari doonaa wax sidan oo kale ah:
AQCO9NJbhYipKRAAMqZsnqqS/T8OYQX20xIa9A==Aynu ku darno qiimahan sirta ah ee kutlada Kubernetes - halka aan uga baahanahay userKey:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-rbd-secret
namespace: ceph-csi-rbd
stringData:
# Значения ключей соответствуют имени пользователя и его ключу, как указано в
# кластере Ceph. ID юзера должен иметь доступ к пулу,
# указанному в storage class
userID: rbdkube
userKey: <user-key>Oo waxaan abuurnaa sirtayada:
kubectl apply -f secret.yamlMarka xigta, waxaan u baahanahay muujinta heerka kaydinta wax sidan oo kale ah:
---
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:
- discardWaxay u baahan tahay in la buuxiyo clusterID, taas oo aan horay uga baranay kooxda ceph fsid, oo ku dabaq bayaankan kutlada Kubernetes:
kubectl apply -f storageclass.yamlSi loo hubiyo sida kooxuhu u wada shaqeeyaan, aynu abuurno PVC-ga soo socda ( Sheegashada Mugga Joogtada ah):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rbd-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: csi-rbd-scAynu isla markiiba aragno sida Kubernetes u abuuray mugga la codsaday ee Ceph:
kubectl get pvc
kubectl get pvWax walba waxay u muuqdaan inay weyn yihiin! Maxay tani u egtahay dhanka Ceph?
Waxaan ka helnaa liiska mugga barkadda oo aan aragno macluumaadka ku saabsan muggayaga:
rbd ls -p kube
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653 # тут, конечно же, будет другой ID тома, который выдала предыдущая командаHadda aan aragno sida wax u beddelka mugga RBD u shaqeeyo.
U beddel cabbirka mugga ee pvc.yaml muujinta una beddel 2Gi oo adeegso:
kubectl apply -f pvc.yamlAynu sugno isbeddellada si ay u dhaqan galaan oo aan eegno xajmiga mugga mar labaad.
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653
kubectl get pv
kubectl get pvcWaxaan aragnaa in cabbirka PVC uusan isbeddelin. Si aad u ogaato sababta, waxaad waydiin kartaa Kubernetes sharaxaadda YAML ee PVC:
kubectl get pvc rbd-pvc -o yamlWaa kan dhibaatadu:
fariinta: Sugitaanka isticmaalaha inuu (dib u) bilaabo boodh si uu u dhameeyo habka faylalka cabbirka mugga dushiisa. nooca: FileSystemResizePending
Taasi waa, saxanku wuu koray, laakiin nidaamka faylalka ku yaal ma uusan helin.
Si aad u koraan nidaamka faylka, waxaad u baahan tahay inaad kor u qaaddo mugga. Wadankeena, PVC/PV-ga la sameeyay hadda sinaba looma isticmaalo.
Waxaan samayn karnaa qalab tijaabo ah, tusaale ahaan sidan oo kale:
---
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: falseOo hadda aynu eegno PVC:
kubectl get pvcCabbirku wuu is beddelay, wax walba waa hagaagsan yihiin.
Qeybta hore, waxaan la shaqeynay qalabka RBD block (waxay u taagan tahay Rados Block Device), laakiin tan lama samayn karo haddii adeegayaal kala duwan ay u baahan yihiin inay la shaqeeyaan diskkan isku mar. CephFS aad ayey ugu habboon tahay in lagu shaqeeyo faylasha halkii laga isticmaali lahaa sawirada diskka.
Isticmaalka tusaalaha kooxaha Ceph iyo Kubernetes, waxaanu habayn doonaa CSI iyo hay'adaha kale ee lagama maarmaanka ah si ay ula shaqeeyaan CephFS.
Aynu ka helno qiyamka shaxda cusub ee Helm ee aan u baahanahay:
helm inspect values ceph-csi/ceph-csi-cephfs > cephfs.ymlMar labaad waxaad u baahan tahay inaad buuxiso faylka cephfs.yml. Sidii hore, amarada Ceph ayaa ku caawin doona:
ceph fsid
ceph mon dumpKu buuxi feylka qiyamka sidan oo kale ah:
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: trueFadlan ogow in ciwaanada kormeeruhu ay ku qoran yihiin cinwaanka foomka fudud: port. Si aad ugu dhejiso cephf-yada qanjirada, ciwaanadan waxaa loo gudbiyaa qaybta kernel-ka, kaas oo aan wali garanayn sida loogu shaqeeyo borotokoolka kormeeraha v2.
Waxaan u beddelnaa dekedda httpMetrics (Prometheus wuxuu aadi doonaa halkaas si loo kormeero metrics) si aysan u khilaafin nginx-proxy, kaas oo lagu rakibay Kubespray. Waxaa laga yaabaa inaadan u baahnayn tan.
Ku rakib shaxda Helm ee kutlada Kubernetes:
helm upgrade -i ceph-csi-cephfs ceph-csi/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespaceAan tagno dukaanka xogta Ceph si aan halkaas ugu abuurno isticmaale gooni ah. Dukumeentigu wuxuu sheegayaa in bixiyaha CephFS uu u baahan yahay xuquuqaha gelitaanka maamulaha kooxda. Laakiin waxaan abuuri doonaa isticmaale gaar ah fs leh xuquuq xaddidan:
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'Oo aan isla markiiba eegno furihiisa gelitaanka, waxaanu u baahan doonaa hadhow:
ceph auth get-key client.fsAynu abuurno sir gaar ah iyo fasal kaydin.
Wax cusub ma jiraan, waxaan hore ugu aragnay tan tusaalaha RBD:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-cephfs-secret
namespace: ceph-csi-cephfs
stringData:
# Необходимо для динамически создаваемых томов
adminID: fs
adminKey: <вывод предыдущей команды>Codsiga muujinta:
kubectl apply -f secret.yamlOo hadda - Class Kaydinta gaar ah:
---
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:
- debugAan ku buuxino halkan clusterID oo lagu dabaqi karo Kubernetes:
kubectl apply -f storageclass.yamlkormeerka
Si loo hubiyo, sida tusaalihii hore, aan abuurno PVC:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-cephfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: csi-cephfs-scOo hubi joogitaanka PVC/PV:
kubectl get pvc
kubectl get pvHaddii aad rabto inaad eegto faylasha iyo hagayaasha CephFS, waxaad ku dhejin kartaa nidaamka faylkan meel. Tusaale ahaan sida hoos ku cad.
Aan tagno mid ka mid ah qanjidhada kooxda Ceph oo aan samayno falalka soo socda:
# Точка монтирования
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/cephfsDabcan, ku dhejinta FS on Ceph noode sidan oo kale ah waxay ku habboon tahay oo kaliya ujeedooyinka tababarka, taas oo ah waxa aan ku sameyneyno annaga. . Uma maleynayo in qofna uu tan ku sameyn doono wax soo saarka; waxaa jira halis sare oo ah in si lama filaan ah loo tirtiro faylasha muhiimka ah.
Ugu dambayntii, aan eegno sida ay arrimuhu ula shaqeeyaan dib-u-habaynta mugga kiiska CephFS. Aan ku soo laabano Kubernetes oo aan wax ka beddelno caddayntayada PVC - kor u qaad cabbirka halkaas, tusaale ahaan, ilaa 7Gi.
Aynu adeegsano faylka la tafatiray:
kubectl apply -f pvc.yamlAynu eegno hagaha rakiban si aan u aragno sida kootada isu beddeshay:
getfattr -n ceph.quota.max_bytes <каталог-с-данными>Si amarkani u shaqeeyo, waxaa laga yaabaa inaad u baahato inaad xirmada ku rakibto nidaamkaaga attr.
Indhuhu way cabsanayaan, laakiinse gacmihii waa cabsadeen
Dhammaan xarfahan iyo calaamadaha YAML ee dhaadheer waxay u muuqdaan kuwo adag oo dusha sare ah, laakiin ficil ahaan, ardayda Slurm waxay si dhakhso ah u helaan iyaga.
Maqaalkani ma aanan si qoto dheer u gelin hawdka - waxaa jira dukumeenti rasmi ah taas. Haddii aad xiisaynayso faahfaahinta dejinta kaydinta Ceph ee kutlada Kubernetes, xidhiidhadan ayaa ku caawin doona:
Koorsada Slurm Waxaad wax yar ka sii socon kartaa oo aad geyn kartaa codsi dhab ah Kubernetes kaas oo u isticmaali doona CephFS sida kaydinta faylka. Codsiyada GET/POST waxaad awoodi doontaa inaad u wareejiso faylasha oo aad ka hesho Ceph.
Oo haddii aad aad u xiisaynayso kaydinta xogta, ka dibna saxiix . Iyadoo imtixaanka beta uu socdo, koorsada waxaa lagu heli karaa qiimo dhimis oo waxaad saameyn kartaa waxa ku jira.
Qoraaga maqaalka: Alexander Shvalov, injineer ku takhasusay , Maamulaha Kubernetes Shahaadaysan, qoraa iyo horumariye koorsooyinka Slurm.
Source: www.habr.com
