ڪنٽينر اسٽوريج انٽرفيس (CSI) Kubernetes ۽ اسٽوريج سسٽم جي وچ ۾ هڪ متحد انٽرفيس آهي. اسان اڳ ۾ ئي مختصر طور تي ان بابت ڳالهايو آهي
مضمون مهيا ڪري ٿو حقيقي، جيتوڻيڪ تصور جي آسانيء لاء ٿورو آسان مثال. اسان ڪيف ۽ ڪبرنيٽس ڪلستر کي انسٽال ڪرڻ ۽ ترتيب ڏيڻ تي غور نه ڪندا آهيون.
ڇا توهان حيران ٿي رهيا آهيو ته اهو ڪيئن ڪم ڪري ٿو؟
تنهن ڪري، توهان وٽ توهان جي آڱرين تي ڪبرنيٽس ڪلستر آهي، ترتيب ڏنل، مثال طور،
جيڪڏهن توهان وٽ اهو سڀ ڪجهه آهي، ته اچو!
پهرين، اچو ته ڪيف ڪلستر نوڊس مان هڪ ڏانهن وڃو ۽ چيڪ ڪريو ته هر شي ترتيب ۾ آهي:
ceph health
ceph -s
اڳيون، اسان فوري طور تي آر بي ڊي ڊسڪ لاء هڪ تلاء ٺاهي سگهنداسين:
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
اچو ته Kubernetes ڪلستر ڏانھن وڃو. اتي، سڀ کان پهريان، اسان انسٽال ڪنداسين Ceph CSI ڊرائيور RBD لاءِ. اسان انسٽال ڪنداسين، جيئن توقع ڪئي وئي، 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 فائل ڀرڻ جي ضرورت آهي. هن کي ڪرڻ لاء، مانيٽر جي ڪلستر ID ۽ IP پتي کي ڳوليو 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
عظيم، آر بي ڊي ڊرائيور ڪم ڪري ٿو!
اچو ته Kubernetes ۾ هڪ نئون StorageClass ٺاهيون. اهو وري ڪيف سان گڏ ٿورڙي ٽڪرائڻ جي ضرورت آهي.
اسان ڪيف ۾ هڪ نئون صارف ٺاهيو ۽ کيس پول ڏانهن لکڻ جا حق ڏيو ڪڇ:
ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'
هاڻي اچو ته ڏسو ته رسائي جي چيڪ اڃا تائين موجود آهي:
ceph auth get-key client.rbdkube
حڪم هن طرح ڪجهه ڪڍي ڇڏيندو:
AQCO9NJbhYipKRAAMqZsnqqS/T8OYQX20xIa9A==
اچو ته هن قيمت کي ڪبرنيٽس ڪلستر ۾ راز ۾ شامل ڪريون - جتي اسان کي ان جي ضرورت آهي 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، ۽ هن پڌري کي ڪبرنيٽس ڪلستر تي لاڳو ڪريو:
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 manifest ۾ حجم جي سائيز کي 2Gi ۾ تبديل ڪريو ۽ ان کي لاڳو ڪريو:
kubectl apply -f pvc.yaml
اچو ته تبديلين کي اثر انداز ٿيڻ جو انتظار ڪريون ۽ حجم جي سائيز کي ٻيهر ڏسو.
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653
kubectl get pv
kubectl get pvc
اسان ڏسون ٿا ته پي وي سي جي سائيز تبديل نه ڪئي وئي آهي. معلوم ڪرڻ لاءِ ڇو، توھان پڇي سگھوٿا Kubernetes 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
۽ ھاڻي اچو ته ڏسو پي وي سي:
kubectl get pvc
سائيز تبديل ٿي وئي آهي، هر شيء ٺيڪ آهي.
پهرين حصي ۾، اسان آر بي ڊي بلاڪ ڊيوائس سان ڪم ڪيو (اهو ريڊس بلاڪ ڊيوائس لاءِ بيٺو آهي)، پر اهو نه ٿو ڪري سگهجي جيڪڏهن مختلف مائڪرو سروسز کي هن ڊسڪ سان گڏ ڪم ڪرڻ جي ضرورت آهي. CephFS ڊسڪ تصويرن جي بجاءِ فائلن سان ڪم ڪرڻ لاءِ وڌيڪ موزون آهي.
Ceph ۽ Kubernetes ڪلستر جو مثال استعمال ڪندي، اسان CSI ۽ ٻين ضروري ادارن کي ترتيب ڏينداسين CephFS سان ڪم ڪرڻ لاءِ.
اچو ته نئين هيلم چارٽ مان قيمتون حاصل ڪريون جنهن جي اسان کي ضرورت آهي:
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
مهرباني ڪري نوٽ ڪريو ته مانيٽر ايڊريس بيان ڪيا ويا آهن سادي فارم پتي ۾: پورٽ. ڪيفف کي نوڊ تي مائونٽ ڪرڻ لاءِ، ھي ايڊريس ڪرنل ماڊل ڏانھن منتقل ڪيا ويا آھن، جيڪي اڃا تائين نه ڄاڻندا آھن ته ڪيئن ڪم ڪجي v2 مانيٽر پروٽوڪول سان.
اسان httpMetrics لاءِ پورٽ تبديل ڪريون ٿا (Prometheus اتي ويندو ميٽرڪ جي نگراني لاءِ) ته جيئن اهو nginx-proxy سان ٽڪراءُ نه ڪري، جيڪو Kubespray پاران نصب ڪيو ويو آهي. توهان کي شايد هن جي ضرورت نه آهي.
ڪبرنيٽس ڪلستر ۾ هيلم چارٽ انسٽال ڪريو:
helm upgrade -i ceph-csi-cephfs ceph-csi/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespace
اچو ته ڪيف ڊيٽا اسٽور ڏانھن وڃو اتي ھڪڙو الڳ صارف ٺاھيو. دستاويزن ۾ چيو ويو آهي ته سيف ايف ايس فراهم ڪندڙ کي ڪلسٽر ايڊمنسٽريٽر جي رسائي جي حقن جي ضرورت آهي. پر اسان هڪ الڳ صارف ٺاهينداسين 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
۽ هاڻي - هڪ الڳ StorageClass:
---
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
جي چڪاس
چيڪ ڪرڻ لاء، جيئن پوئين مثال ۾، اچو ته هڪ پي وي سي ٺاهي:
---
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 ۾ فائلن ۽ ڊائريڪٽرن کي ڏسڻ چاهيو ٿا، ته توهان هن فائل سسٽم کي ڪٿي نصب ڪري سگهو ٿا. مثال طور جيئن هيٺ ڏيکاريل آهي.
اچو ته ڪيف ڪلستر نوڊس مان ھڪڙي ڏانھن وڃو ۽ ھيٺيون عمل ڪريو.
# Точка монтирования
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
يقينن، FS کي سيف نوڊ تي چڙهڻ صرف تربيتي مقصدن لاءِ موزون آهي، جيڪو اسان اسان تي ڪندا آهيون.
۽ آخرڪار، اچو ته چيڪ ڪريو ته شيون ڪيئن ڪم ڪن ٿيون حجم کي ٻيهر ڪرڻ سان CephFS جي صورت ۾. اچو ته Kubernetes ڏانهن واپس وڃو ۽ PVC لاءِ اسان جي منشور کي ايڊٽ ڪريو - اتي سائيز وڌايو، مثال طور، 7Gi تائين.
اچو ته تبديل ٿيل فائل کي لاڳو ڪريو:
kubectl apply -f pvc.yaml
اچو ته نصب ٿيل ڊاريڪٽري کي ڏسو ته ڏسو ته ڪوٽا ڪيئن بدلجي ويو آهي:
getfattr -n ceph.quota.max_bytes <каталог-с-данными>
ھن حڪم کي ڪم ڪرڻ لاء، توھان کي توھان جي سسٽم تي پيڪيج کي انسٽال ڪرڻ جي ضرورت پوندي attr.
اکيون ڊڄنديون آهن، پر هٿ ڪندا آهن
اهي سڀئي منتر ۽ ڊگها YAML ظاهري سطح تي پيچيده نظر اچن ٿا، پر عملي طور تي، سلرم شاگردن کي انهن مان جلدي جلدي حاصل ٿئي ٿي.
هن مقالي ۾ اسان جهنگ ۾ گهيرو نه ڪيو آهي - ان لاء سرڪاري دستاويز موجود آهي. جيڪڏهن توهان ڪيف اسٽوريج قائم ڪرڻ جي تفصيل ۾ دلچسپي رکو ٿا ڪبرنيٽس ڪلستر سان، اهي لنڪ مدد ڪندا:
Slurm ڪورس تي
۽ جيڪڏهن توهان ڊيٽا اسٽوريج ۾ وڌيڪ دلچسپي وٺندا آهيو، پوء سائن اپ ڪريو
مضمون جو ليکڪ: اليگزينڊر شوالوف، انجنيئر انجنيئر
جو ذريعو: www.habr.com