கொள்கலன் சேமிப்பக இடைமுகம் (சிஎஸ்ஐ) என்பது குபெர்னெட்டஸ் மற்றும் சேமிப்பக அமைப்புகளுக்கு இடையிலான ஒரு ஒருங்கிணைந்த இடைமுகமாகும். நாங்கள் ஏற்கனவே சுருக்கமாகப் பேசியுள்ளோம்
கட்டுரை உண்மையானது, இருப்பினும் எளிதாக உணர்தலுக்கு சற்று எளிமைப்படுத்தப்பட்ட எடுத்துக்காட்டுகளை வழங்குகிறது. Ceph மற்றும் Kubernetes கிளஸ்டர்களை நிறுவி உள்ளமைப்பதை நாங்கள் கருத்தில் கொள்ளவில்லை.
இது எப்படி வேலை செய்கிறது என்று யோசிக்கிறீர்களா?
எனவே, உங்கள் விரல் நுனியில் ஒரு குபெர்னெட்ஸ் கிளஸ்டர் உள்ளது, எடுத்துக்காட்டாக,
இதெல்லாம் இருந்தால் போகட்டும்!
முதலில், Ceph கிளஸ்டர் முனைகளில் ஒன்றிற்குச் சென்று, எல்லாம் ஒழுங்காக இருக்கிறதா என்று சரிபார்க்கவும்:
ceph health
ceph -s
அடுத்து, RBD வட்டுகளுக்கு உடனடியாக ஒரு குளத்தை உருவாக்குவோம்:
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
குபெர்னெட்ஸ் கிளஸ்டருக்கு செல்லலாம். அங்கு, முதலில், RBDக்கான Ceph CSI இயக்கியை நிறுவுவோம். எதிர்பார்த்தபடி, ஹெல்ம் மூலம் நிறுவுவோம்.
விளக்கப்படத்துடன் ஒரு களஞ்சியத்தைச் சேர்க்கிறோம், 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 இல் உள்ள மானிட்டர்களின் கிளஸ்டர் ஐடி மற்றும் ஐபி முகவரிகளைக் கண்டறியவும்:
ceph fsid # так мы узнаем clusterID
ceph mon dump # а так увидим IP-адреса мониторов
பெறப்பட்ட மதிப்புகளை cephrbd.yml கோப்பில் உள்ளிடுகிறோம். அதே நேரத்தில், PSP கொள்கைகளை (Pod Security Policies) உருவாக்குவதை நாங்கள் செயல்படுத்துகிறோம். பிரிவுகளில் விருப்பங்கள் nodeplugin и வழங்குபவர் ஏற்கனவே கோப்பில், கீழே காட்டப்பட்டுள்ளபடி அவற்றை சரிசெய்யலாம்:
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 இயக்கி வேலை செய்கிறது!
குபெர்னெட்டஸில் புதிய ஸ்டோரேஜ் கிளாஸை உருவாக்குவோம். இதற்கு மீண்டும் 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==
இந்த மதிப்பை குபெர்னெட்ஸ் கிளஸ்டரில் உள்ள சீக்ரெட்டில் சேர்ப்போம் - நமக்குத் தேவையான இடத்தில் பயனர் கீ:
---
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
பூர்த்தி செய்ய வேண்டும் கிளஸ்டர் ஐடி, நாங்கள் ஏற்கனவே குழுவால் கற்றுக்கொண்டோம் ceph fsid, மற்றும் இந்த மேனிஃபெஸ்டை குபெர்னெட்ஸ் கிளஸ்டருக்குப் பயன்படுத்தவும்:
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
Ceph இல் Kubernetes கோரப்பட்ட தொகுதியை எவ்வாறு உருவாக்கினார் என்பதை உடனடியாகப் பார்ப்போம்:
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 இன் அளவு மாறவில்லை என்பதை நாம் காண்கிறோம். ஏன் என்பதை அறிய, PVC இன் YAML விளக்கத்திற்காக குபெர்னெட்டஸை நீங்கள் வினவலாம்:
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 பிளாக் சாதனத்துடன் பணிபுரிந்தோம் (இது ரேடோஸ் பிளாக் சாதனத்தைக் குறிக்கிறது), ஆனால் வெவ்வேறு மைக்ரோ சர்வீஸ்கள் இந்த வட்டுடன் ஒரே நேரத்தில் வேலை செய்ய வேண்டுமானால் இதைச் செய்ய முடியாது. 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 க்கான போர்ட்டை மாற்றுகிறோம் (அளவீடுகளை கண்காணிப்பதற்காக ப்ரோமிதியஸ் அங்கு செல்வார்) அதனால் அது Kubespray ஆல் நிறுவப்பட்ட nginx-proxy உடன் முரண்படாது. உங்களுக்கு இது தேவையில்லாமல் இருக்கலாம்.
குபெர்னெட்ஸ் கிளஸ்டரில் ஹெல்ம் விளக்கப்படத்தை நிறுவவும்:
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
தனி சீக்ரெட் மற்றும் ஸ்டோரேஜ் கிளாஸ் உருவாக்குவோம்.
புதிதாக எதுவும் இல்லை, 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
நீங்கள் 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 முனையில் FS ஐ ஏற்றுவது பயிற்சி நோக்கங்களுக்காக மட்டுமே பொருத்தமானது, இதைத்தான் நாங்கள் செய்கிறோம்
இறுதியாக, CephFS விஷயத்தில் அளவுகளை மறுஅளவிடுவதன் மூலம் விஷயங்கள் எவ்வாறு செயல்படுகின்றன என்பதைச் சரிபார்க்கலாம். குபெர்னெட்டஸுக்குத் திரும்பி, PVCக்கான எங்கள் மேனிஃபெஸ்ட்டைத் திருத்துவோம் - அங்கு அளவை அதிகரிக்கவும், எடுத்துக்காட்டாக, 7Gi.
திருத்தப்பட்ட கோப்பைப் பயன்படுத்துவோம்:
kubectl apply -f pvc.yaml
ஒதுக்கீடு எவ்வாறு மாறியது என்பதைப் பார்க்க ஏற்றப்பட்ட கோப்பகத்தைப் பார்ப்போம்:
getfattr -n ceph.quota.max_bytes <каталог-с-данными>
இந்த கட்டளை வேலை செய்ய, உங்கள் கணினியில் தொகுப்பை நிறுவ வேண்டும் attr.
கண்கள் பயப்படுகின்றன, ஆனால் கைகள் பயப்படுகின்றன
இந்த எழுத்துப்பிழைகள் மற்றும் நீண்ட YAML வெளிப்பாடுகள் மேற்பரப்பில் சிக்கலானதாகத் தெரிகிறது, ஆனால் நடைமுறையில், ஸ்லர்ம் மாணவர்கள் அவற்றை மிக விரைவாகப் பெறுகிறார்கள்.
இந்த கட்டுரையில் நாங்கள் காட்டில் ஆழமாக செல்லவில்லை - அதற்கான அதிகாரப்பூர்வ ஆவணங்கள் உள்ளன. குபெர்னெட்ஸ் கிளஸ்டருடன் Ceph சேமிப்பகத்தை அமைப்பது குறித்த விவரங்களில் நீங்கள் ஆர்வமாக இருந்தால், இந்த இணைப்புகள் உதவும்:
ஸ்லர்ம் போக்கில்
நீங்கள் தரவு சேமிப்பகத்தில் அதிக ஆர்வமாக இருந்தால், பதிவு செய்யவும்
கட்டுரையின் ஆசிரியர்: அலெக்சாண்டர் ஷ்வலோவ், பயிற்சி பொறியாளர்
ஆதாரம்: www.habr.com