බහාලුම් ගබඩා අතුරුමුහුණත (CSI) යනු Kubernetes සහ ගබඩා පද්ධති අතර ඒකාබද්ධ අතුරු මුහුණතකි. අපි දැනටමත් ඒ ගැන කෙටියෙන් කතා කර ඇත්තෙමු
සංජානනයේ පහසුව සඳහා තරමක් සරල කළ උදාහරණ වුවද ලිපිය සැබෑ දේ සපයයි. අපි Ceph සහ Kubernetes පොකුරු ස්ථාපනය සහ වින්යාස කිරීම සලකා බලන්නේ නැත.
එය ක්රියා කරන්නේ කෙසේදැයි ඔබ කල්පනා කරනවාද?
ඉතින්, ඔබට ඔබේ ඇඟිලි තුඩුවල Kubernetes පොකුරක් ඇත, උදාහරණයක් ලෙස,
ඔබට මේ සියල්ල තිබේ නම්, අපි යමු!
පළමුව, අපි Ceph පොකුරු නෝඩ් එකකට ගොස් සියල්ල පිළිවෙලට තිබේදැයි පරීක්ෂා කරමු:
ceph health
ceph -s
ඊළඟට, අපි වහාම RBD තැටි සඳහා සංචිතයක් සාදන්නෙමු:
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
අපි Kubernetes පොකුරට යමු. එහිදී, පළමුවෙන්ම, අපි RBD සඳහා Ceph CSI ධාවකය ස්ථාපනය කරමු. අපි බලාපොරොත්තු වූ පරිදි, Helm හරහා ස්ථාපනය කරන්නෙමු.
අපි ප්රස්ථාරයක් සමඟ ගබඩාවක් එකතු කරමු, අපට 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 හි මොනිටරවල පොකුරු හැඳුනුම්පත සහ IP ලිපින සොයා ගන්න:
ceph fsid # так мы узнаем clusterID
ceph mon dump # а так увидим IP-адреса мониторов
අපි ලබාගත් අගයන් cephrbd.yml ගොනුවට ඇතුළත් කරමු. ඒ සමගම, අපි PSP ප්රතිපත්ති (Pod Security Policies) නිර්මාණය කිරීම සක්රීය කරමු. අංශවල විකල්ප නෝඩ්ප්ලගිනය и සැපයුම්කරු දැනටමත් ගොනුවේ, පහත දැක්වෙන පරිදි ඒවා නිවැරදි කළ හැක:
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
ඊළඟට, අපට ඉතිරිව ඇත්තේ කුබර්නෙටස් පොකුරේ ප්රස්ථාරය ස්ථාපනය කිරීමයි.
helm upgrade -i ceph-csi-rbd ceph-csi/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespace
නියමයි, RBD ධාවකය ක්රියා කරයි!
අපි Kubernetes හි නව ගබඩා පන්තියක් නිර්මාණය කරමු. මෙය නැවතත් Ceph සමඟ ටින්කර් කිරීම අවශ්ය වේ.
අපි Ceph හි නව පරිශීලකයෙකු නිර්මාණය කර ඔහුට සංචිතයට ලිවීමට අයිතිය ලබා දෙන්නෙමු ඝනකයක්:
ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'
දැන් අපි බලමු ප්රවේශ යතුර තවමත් පවතින බව:
ceph auth get-key client.rbdkube
විධානය මෙවැනි දෙයක් ප්රතිදානය කරයි:
AQCO9NJbhYipKRAAMqZsnqqS/T8OYQX20xIa9A==
අපි මෙම අගය Kubernetes පොකුරේ Secret වෙත එකතු කරමු - අපට එය අවශ්ය තැන userKey:
---
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
ඊළඟට, අපට මෙවැනි දෙයක් StorageClass මැනිෆෙස්ටයක් අවශ්ය වේ:
---
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
පිරවීම අවශ්ය වේ clusterID, අපි දැනටමත් කණ්ඩායම විසින් ඉගෙන ගෙන ඇත ceph 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
Kubernetes Ceph හි ඉල්ලූ පරිමාව නිර්මාණය කළේ කෙසේදැයි අපි වහාම බලමු:
kubectl get pvc
kubectl get pv
සෑම දෙයක්ම විශිෂ්ට බව පෙනේ! මේක Cep පැත්තේ මොන වගේද?
අපි සංචිතයේ ඇති වෙළුම් ලැයිස්තුවක් ලබාගෙන අපගේ පරිමාව පිළිබඳ තොරතුරු බලන්න:
rbd ls -p kube
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653 # тут, конечно же, будет другой ID тома, который выдала предыдущая команда
දැන් අපි බලමු RBD Volume එකක ප්රමාණය වෙනස් කරන්නේ කොහොමද කියලා.
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 ප්රමාණය වෙනස් වී නැති බව අපි දකිමු. ඇයි දැයි දැන ගැනීමට, ඔබට PVC පිළිබඳ YAML විස්තරයක් සඳහා Kubernetes විමසිය හැක:
kubectl get pvc rbd-pvc -o yaml
මෙන්න ගැටලුව:
පණිවිඩය: නෝඩයේ ඇති ගොනු පද්ධති ප්රමාණය වෙනස් කිරීම අවසන් කිරීමට පරිශීලකයා පොඩ් එකක් (නැවත) ආරම්භ කරන තෙක් රැඳී සිටිමින්. වර්ගය: FileSystemResizePending
එනම්, තැටිය වර්ධනය වී ඇත, නමුත් එය මත ගොනු පද්ධතිය නොවේ.
ගොනු පද්ධතිය වර්ධනය කිරීම සඳහා, ඔබ පරිමාව සවි කළ යුතුය. අපේ රටේ, නිර්මාණය කරන ලද 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 වඩාත් සුදුසු වේ.
Ceph සහ Kubernetes පොකුරු උදාහරණය භාවිතා කරමින්, අපි CephFS සමඟ වැඩ කිරීමට CSI සහ අනෙකුත් අවශ්ය ආයතන වින්යාස කරන්නෙමු.
අපට අවශ්ය නව හෙල්ම් ප්රස්ථාරයෙන් අගයන් ලබා ගනිමු:
helm inspect values ceph-csi/ceph-csi-cephfs > cephfs.yml
නැවතත් ඔබ cephfs.yml ගොනුව පිරවිය යුතුය. පෙර මෙන්, Ceph විධාන උපකාර වනු ඇත:
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
මොනිටර ලිපින සරල පෝරමයේ ලිපිනය:port හි දක්වා ඇති බව කරුණාවෙන් සලකන්න. නෝඩයක් මත cephfs සවි කිරීම සඳහා, මෙම ලිපින කර්නල් මොඩියුලයට මාරු කරනු ලැබේ, එය තවමත් v2 මොනිටර ප්රොටෝකෝලය සමඟ වැඩ කරන්නේ කෙසේදැයි නොදනී.
අපි httpMetrics සඳහා වරාය වෙනස් කරන්නෙමු (Metrics අධීක්ෂණය සඳහා Prometheus එහි යයි) එවිට එය Kubespray විසින් ස්ථාපනය කර ඇති nginx-proxy සමඟ ගැටෙන්නේ නැත. ඔබට මෙය අවශ්ය නොවනු ඇත.
Kubernetes පොකුරේ Helm ප්රස්ථාරය ස්ථාපනය කරන්න:
helm upgrade -i ceph-csi-cephfs ceph-csi/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespace
අපි Ceph දත්ත ගබඩාවට ගොස් එහි වෙනම පරිශීලකයෙකු නිර්මාණය කරමු. 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
අපි වෙනම Secret සහ StorageClass හදමු.
අලුත් දෙයක් නැත, අපි මෙය දැනටමත් 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
අපි එය මෙහි පුරවමු clusterID සහ Kubernetes හි අදාළ වේ:
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
ඔබට CephFS හි ගොනු සහ නාමාවලි බැලීමට අවශ්ය නම්, ඔබට මෙම ගොනු පද්ධතිය කොහේ හරි සවි කළ හැකිය. උදාහරණයක් ලෙස පහත දැක්වෙන පරිදි.
අපි Ceph පොකුරු නෝඩ් එකකට ගොස් පහත ක්රියා සිදු කරමු:
# Точка монтирования
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
ඇත්ත වශයෙන්ම, මෙවැනි Ceph node එකක් මත FS සවි කිරීම සුදුසු වන්නේ පුහුණු අරමුණු සඳහා පමණි, එය අප විසින් සිදු කරනු ලැබේ.
අවසාන වශයෙන්, CephFS හි පරිමාව ප්රමාණය වෙනස් කිරීම සමඟ දේවල් ක්රියා කරන්නේ කෙසේදැයි පරීක්ෂා කර බලමු. අපි Kubernetes වෙත ආපසු ගොස් PVC සඳහා අපගේ මැනිෆෙස්ටය සංස්කරණය කරමු - එහි ප්රමාණය වැඩි කරන්න, උදාහරණයක් ලෙස, 7Gi දක්වා.
අපි සංස්කරණය කළ ගොනුව යොදමු:
kubectl apply -f pvc.yaml
කෝටාව වෙනස් වී ඇති ආකාරය බැලීමට සවිකර ඇති නාමාවලිය දෙස බලමු:
getfattr -n ceph.quota.max_bytes <каталог-с-данными>
මෙම විධානය ක්රියාත්මක වීමට නම්, ඔබට ඔබේ පද්ධතියේ පැකේජය ස්ථාපනය කිරීමට අවශ්ය විය හැක atr.
ඇස් බයයි, නමුත් දෑත් බයයි
මෙම සියලු අක්ෂර වින්යාසයන් සහ දිගු YAML ප්රකාශනයන් මතුපිටින් සංකීර්ණ බව පෙනේ, නමුත් ප්රායෝගිකව, Slurm සිසුන් ඉතා ඉක්මනින් ඒවා ග්රහණය කර ගනී.
මෙම ලිපියෙන් අපි කැලයට ගැඹුරට ගියේ නැත - ඒ සඳහා නිල ලියකියවිලි තිබේ. ඔබ Kubernetes පොකුරක් සමඟ Ceph ගබඩාව පිහිටුවීමේ විස්තර ගැන උනන්දුවක් දක්වන්නේ නම්, මෙම සබැඳි උපකාර වනු ඇත:
Slurm පාඨමාලාව මත
ඔබ දත්ත ගබඩා කිරීමට වැඩි උනන්දුවක් දක්වන්නේ නම්, ලියාපදිංචි වන්න
ලිපියේ කර්තෘ: ඇලෙක්සැන්ඩර් ෂ්වාලොව්, පුහුණු ඉංජිනේරු
මූලාශ්රය: www.habr.com