የመያዣ ማከማቻ በይነገጽ (CSI) በኩበርኔትስ እና በማከማቻ ስርዓቶች መካከል የተዋሃደ በይነገጽ ነው። እኛ ስለ እሱ በአጭሩ
ጽሑፉ እውነተኛ ይዟል፣ ምንም እንኳን ለግንዛቤ ምሳሌዎች በትንሹ ቀላል ቢሆንም። የሴፍ እና የኩበርኔትስ ስብስቦችን መጫን እና ማዋቀርን አናስብም።
እንዴት እንደሚሰራ እያሰቡ ነው?
ስለዚህ፣ በእጅህ የኩበርኔትስ ዘለላ አለህ፣ የተሰማራ፣ ለምሳሌ፣
ይህ ሁሉ ካለህ እንሂድ!
በመጀመሪያ፣ ወደ የሴፍ ክላስተር አንጓዎች እንሂድ እና ሁሉም ነገር በሥርዓት መሆኑን እንፈትሽ።
ceph health
ceph -s
በመቀጠል ወዲያውኑ ለ RBD ዲስኮች ገንዳ እንፈጥራለን-
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
ወደ ኩበርኔትስ ክላስተር እንሂድ። እዚያ፣ በመጀመሪያ፣ የCef CSI ሾፌርን ለ RBD እንጭነዋለን። እንደታሰበው በሄልም በኩል እንጭነዋለን።
ማከማቻ ከገበታ ጋር ያክሉ፣ የ ceph-csi-rbd ገበታ ተለዋዋጮች ስብስብ ያግኙ፡
helm repo add ceph-csi https://ceph.github.io/csi-charts
helm inspect values ceph-csi/ceph-csi-rbd > cephrbd.yml
አሁን የ cephrbd.yml ፋይል መሙላት ያስፈልግዎታል. ይህንን ለማድረግ በሴፍ ውስጥ የክላስተር መታወቂያ እና የተቆጣጣሪዎች አይፒ አድራሻዎችን እናገኛለን፡-
ceph fsid # так мы узнаем clusterID
ceph mon dump # а так увидим IP-адреса мониторов
የተገኙት እሴቶች ወደ cephrbd.yml ፋይል ገብተዋል። በመንገዳችን ላይ፣ የፒኤስፒ ፖሊሲዎችን (የፖድ ደህንነት ፖሊሲዎች) መፍጠርን እናነቃለን። ክፍል አማራጮች መስቀለኛ መንገድ ተሰኪ и አቅራቢ ቀድሞውኑ በፋይሉ ውስጥ ፣ ከዚህ በታች እንደሚታየው ሊስተካከሉ ይችላሉ-
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
ከዚያ ለእኛ የሚቀረው በ Kubernetes ክላስተር ውስጥ ቻርቱን መጫን ነው።
helm upgrade -i ceph-csi-rbd ceph-csi/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespace
በጣም ጥሩ፣ የ RBD ሹፌር ይሰራል!
በኩበርኔትስ ውስጥ አዲስ የማከማቻ ክፍል እንፍጠር። ይህ እንደገና ከሴፍ ጋር የተወሰነ ስራ ያስፈልገዋል።
በሴፍ ውስጥ አዲስ ተጠቃሚ ይፍጠሩ እና ወደ ገንዳው እንዲጽፍ ፍቃድ ይስጡት። ኩብ:
ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'
እና አሁን የመዳረሻ ቁልፉ አሁንም እንዳለ እንይ፡-
ceph auth get-key client.rbdkube
ትዕዛዙ እንደዚህ ያለ ነገር ያወጣል-
AQCO9NJbhYipKRAAMqZsnqqS/T8OYQX20xIa9A==
ይህንን እሴት በ Kubernetes ክላስተር ውስጥ በሚስጥር ውስጥ እናስቀምጠው - በምንፈልገው ቦታ የተጠቃሚ ቁልፍ:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-rbd-secret
namespace: ceph-csi-rbd
stringData:
# Значения ключей соответствуют имени пользователя и его ключу, как указано в
# кластере Ceph. ID юзера должен иметь доступ к пулу,
# указанному в storage class
userID: rbdkube
userKey: <user-key>
እና ምስጢራችንን እንፈጥራለን-
kubectl apply -f secret.yaml
በመቀጠል፣ እንደዚህ ያለ የማከማቻ ክፍል ዝርዝር መግለጫ ያስፈልገናል፡-
---
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
መሙላት ያስፈልጋል ክላስተር መታወቂያ, ቀደም ብለን በቡድኑ የተማርነው ሴፍ fsidእና ይህንን አንጸባራቂ በ Kubernetes ክላስተር ላይ ይተግብሩ፡
kubectl apply -f storageclass.yaml
በጥቅል ውስጥ ያሉትን የክላስተር አሠራር ለመፈተሽ የሚከተለውን PVC እንፍጠር (የማያቋርጥ የይገባኛል ጥያቄ፡)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rbd-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: csi-rbd-sc
ኩበርኔትስ በሴፍ ውስጥ የተጠየቀውን መጠን እንዴት እንደፈጠረ ወዲያውኑ እንይ፡-
kubectl get pvc
kubectl get pv
ሁሉም ነገር ጥሩ ይመስላል! እና በሴፍ በኩል ምን ይመስላል?
በገንዳው ውስጥ የጥራዞች ዝርዝር እናገኛለን እና ስለ ድምፃችን መረጃን እንመለከታለን፡-
rbd ls -p kube
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653 # тут, конечно же, будет другой ID тома, который выдала предыдущая команда
አሁን የ RBD መጠን መቀየር እንዴት እንደሚሰራ እንይ።
በpvc.yaml መግለጫ ውስጥ ያለውን የድምጽ መጠን ወደ 2Gi ቀይር እና ተግብር፡
kubectl apply -f pvc.yaml
ለውጦቹ እስኪተገበሩ ድረስ እንጠብቅ እና የድምጽ መጠኑን እንደገና እንይ።
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653
kubectl get pv
kubectl get pvc
የ PVC መጠኑ እንዳልተለወጠ እናያለን. ለምን እንደሆነ ለማወቅ Kubernetes የ PVC መግለጫን በ YAML ቅርጸት መጠየቅ ይችላሉ፡
kubectl get pvc rbd-pvc -o yaml
እና ችግሩ እዚህ አለ፡-
መልእክት፡ ተጠቃሚው (ዳግም-) ፖድ እስኪጀምር በመጠበቅ ላይ የፋይል ስርዓት በመስቀለኛ ላይ ያለውን የድምጽ መጠን መቀየር። አይነት: FileSystemResize በመጠባበቅ ላይ
ያም ማለት ዲስኩ አድጓል, ነገር ግን በእሱ ላይ ያለው የፋይል ስርዓት አላደረገም.
የፋይል ስርዓቱን ለማስፋት, ድምጹን መጫን ያስፈልግዎታል. በእኛ ሁኔታ, የተፈጠረው PVC / PV አሁን በምንም መንገድ ጥቅም ላይ አይውልም.
እንደዚህ ያለ የሙከራ ፓድ መፍጠር እንችላለን-
---
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
እና አሁን PVC እንይ:
kubectl get pvc
መጠኑ ተለውጧል, ሁሉም ነገር በሥርዓት ነው.
በመጀመሪያው ክፍል ከ RBD ማገጃ መሳሪያ ጋር ሠርተናል (ይህ ማለት Rados Block Device ነው), ነገር ግን በዚህ ዲስክ ከተለያዩ ማይክሮ ሰርቪስ ጋር በተመሳሳይ ጊዜ መስራት ከፈለጉ ይህን ማድረግ አይቻልም. ከፋይሎች ጋር ለመስራት, ከዲስክ ምስል ይልቅ, CephFS በጣም የተሻለው ነው.
የሴፍ እና የኩበርኔትስ ስብስቦችን ምሳሌ በመጠቀም፣ CSI እና ሌሎች አስፈላጊ አካላትን ከሴፍኤፍኤስ ጋር እንዲሰሩ እናዋቅራለን።
እሴቶቹን ከምንፈልገው አዲሱ የ Helm ገበታ እናገኝ፡-
helm inspect values ceph-csi/ceph-csi-cephfs > cephfs.yml
በድጋሚ, የ cephfs.yml ፋይል መሙላት ያስፈልግዎታል. ልክ እንደበፊቱ፣ የሴፍ ትዕዛዞች ይረዳሉ፡-
ceph fsid
ceph mon dump
ፋይሉን በሚከተሉት እሴቶች እንሞላለን-
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
የመቆጣጠሪያ አድራሻዎች በቀላል ፎርም አድራሻ፡ፖርት ውስጥ መገለጹን ልብ ይበሉ። በአስተናጋጁ ላይ cephfs ለመጫን፣ እነዚህ አድራሻዎች ከክትትል ፕሮቶኮል v2 ጋር እንዴት እንደሚሰሩ እስካሁን ወደማያውቀው የከርነል ሞጁል ተላልፈዋል።
በ Kubespray ከተጫነው nginx-proxy ጋር እንዳይጋጭ ወደ httpMetrics እንለውጣለን (Prometheus ለክትትል መለኪያዎች ወደዚያ ይሄዳል)። ይህ ላያስፈልግህ ይችላል።
የ Helm ገበታ በ Kubernetes ክላስተር ውስጥ ጫን፡-
helm upgrade -i ceph-csi-cephfs ceph-csi/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespace
እዚያ የተለየ ተጠቃሚ ለመፍጠር ወደ ሴፍ ዳታ ማከማቻ እንሂድ። የ CephFS አቅራቢ የክላስተር አስተዳዳሪ የመዳረሻ መብቶች እንደሚያስፈልገው ሰነዱ ይገልጻል። ግን የተለየ ተጠቃሚ እንፈጥራለን fs ከተወሰኑ መብቶች ጋር፡-
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'
እና ወዲያውኑ የመዳረሻ ቁልፉን እንይ፣ የበለጠ ይጠቅመናል፡
ceph auth get-key client.fs
የተለየ ሚስጥር እና ማከማቻ ክፍል እንፍጠር።
ምንም አዲስ ነገር የለም፣ ይህንን ከRBD ምሳሌ ጋር አስቀድመን አይተናል፡-
---
apiVersion: v1
kind: Secret
metadata:
name: csi-cephfs-secret
namespace: ceph-csi-cephfs
stringData:
# Необходимо для динамически создаваемых томов
adminID: fs
adminKey: <вывод предыдущей команды>
አንጸባራቂውን በመተግበር ላይ፡-
kubectl apply -f secret.yaml
እና አሁን - የተለየ የማከማቻ ክፍል:
---
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
እዚህ ይሙሉ ክላስተር መታወቂያ እና በኩበርኔትስ ውስጥ ተፈጻሚ ይሆናል፡
kubectl apply -f storageclass.yaml
ተቆጣጣሪነት
ለመፈተሽ ፣ እንደ ቀድሞው ምሳሌ ፣ PVC እንፍጠር-
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-cephfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: csi-cephfs-sc
እና PVC/PV ን ያረጋግጡ፡-
kubectl get pvc
kubectl get pv
በሴፍኤፍኤስ ውስጥ ያሉትን ፋይሎች እና ማውጫዎች ማየት ከፈለጉ፣ ይህን የፋይል ስርዓት የሆነ ቦታ መጫን ይችላሉ። ለምሳሌ, ከታች እንደሚታየው.
ወደ አንዱ የሴፍ ክላስተር ኖዶች ሄደን የሚከተሉትን ድርጊቶች እንፈጽማለን፡
# Точка монтирования
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
እርግጥ ነው፣ እንዲህ ያለው የኤፍኤስ ተራራ በሴፍ ኖድ ላይ ለትምህርት ዓላማዎች ብቻ ተስማሚ ነው፣ ይህም በእኛ ላይ የምናደርገውን ነው።
እና በመጨረሻም፣ በሴፍኤፍኤስ ጉዳይ ላይ የድምጽ መጠንን በመቀየር ነገሮች እንዴት እንደሚሰሩ እንፈትሽ። ወደ Kubernetes እንመለሳለን እና የእኛን መግለጫ ለ PVC እናስተካክላለን - እዚያ መጠኑን እንጨምራለን ፣ ለምሳሌ ወደ 7Gi።
የተስተካከለውን ፋይል ተግብር፡-
kubectl apply -f pvc.yaml
በተሰቀለው ማውጫ ላይ ኮታው እንዴት እንደተለወጠ እንመልከት፡-
getfattr -n ceph.quota.max_bytes <каталог-с-данными>
ይህ ትዕዛዝ እንዲሰራ, ጥቅሉን መጫን ሊኖርብዎት ይችላል attr.
ዓይኖቹ ይፈራሉ, ነገር ግን እጆች ይሠራሉ
ላይ ላዩን፣ እነዚህ ሁሉ ድግምቶች እና ረጅም የ YAML መገለጫዎች የተወሳሰቡ ይመስላሉ፣ በተግባር ግን፣ የስሉርም ተማሪዎች በፍጥነት ይቋቋሟቸዋል።
በዚህ ጽሑፍ ውስጥ ወደ ዱር ውስጥ አልገባንም - ለዚህም ኦፊሴላዊ ሰነዶች አሉ. የሴፍ ማከማቻን በ Kubernetes ክላስተር የማዘጋጀት ዝርዝሮች ላይ ፍላጎት ካሎት እነዚህ ማገናኛዎች ያግዛሉ፡
ኮርስ Slurm ላይ
እና በመረጃ ማከማቻ ላይ የበለጠ ፍላጎት ካሎት፣ ከዚያ ይመዝገቡ
የጽሑፍ ደራሲ: አሌክሳንደር ሽቫሎቭ, መሐንዲስ መለማመድ
ምንጭ: hab.com