د کانټینر ذخیره کولو انٹرفیس (CSI) د کوبرنیټس او ذخیره کولو سیسټمونو ترمینځ یو متحد انٹرفیس دی. موږ دمخه په دې اړه لنډې خبرې کړې دي
مقاله د احساس د اسانتیا لپاره ریښتیني، که څه هم یو څه ساده مثالونه وړاندې کوي. موږ د Ceph او Kubernetes کلسترونو نصب او تنظیم کولو ته پام نه کوو.
ایا تاسو حیران یاست چې دا څنګه کار کوي؟
نو، تاسو په ګوتو کې د کوبرنیټس کلستر لرئ، ځای پرځای شوي، د بیلګې په توګه،
که تاسو دا ټول لرئ، راځئ چې لاړ شو!
لومړی، راځئ چې د Ceph کلستر نوډونو څخه یو ته لاړ شو او وګورئ چې هرڅه سم دي:
ceph health
ceph -s
بل، موږ به سمدلاسه د RBD ډیسکونو لپاره حوض جوړ کړو:
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
راځئ چې د Kubernetes کلستر ته لاړ شو. هلته، لومړی، موږ به د 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 کې د څارونکو کلستر ID او IP پتې ومومئ:
ceph fsid # так мы узнаем clusterID
ceph mon dump # а так увидим IP-адреса мониторов
موږ ترلاسه شوي ارزښتونه د cephrbd.yml فایل کې دننه کوو. په ورته وخت کې، موږ د PSP پالیسۍ (د پوډ امنیت پالیسۍ) جوړول فعالوو. په برخو کې اختیارونه 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 ډرایور کار کوي!
راځئ چې په 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==
راځئ چې دا ارزښت د کوبرنیټس کلستر کې راز ته اضافه کړو - چیرې چې موږ ورته اړتیا لرو د کاروونکي کیلي:
---
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
ډکولو ته اړتیا لري کلستر ID، کوم چې موږ دمخه د ټیم لخوا زده کړل 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
موږ ګورو چې د 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 بلاک وسیلې سره کار وکړ (دا د رادوس بلاک وسیلې لپاره ولاړ دی) ، مګر دا نشي ترسره کیدی که چیرې مختلف مایکرو خدمتونه د دې ډیسک سره په ورته وخت کې کار کولو ته اړتیا ولري. 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
راځئ چې د 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
راځئ چې دلته یې ډک کړو کلستر ID او په 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
البته، د دې په څیر په سیف نوډ کې د FS نصب کول یوازې د روزنې موخو لپاره مناسب دي، دا هغه څه دي چې موږ یې کوو.
او په نهایت کې ، راځئ وګورو چې شیان څنګه د CephFS په قضیه کې د حجمونو له اندازې سره کار کوي. راځئ چې Kubernetes ته راستون شو او د PVC لپاره زموږ منشور ایډیټ کړو - هلته اندازه زیاته کړئ، د بیلګې په توګه، 7Gi ته.
راځئ چې ترمیم شوی فایل پلي کړو:
kubectl apply -f pvc.yaml
راځئ چې نصب شوي لارښود ته وګورو ترڅو وګورو چې کوټه څنګه بدله شوې ده:
getfattr -n ceph.quota.max_bytes <каталог-с-данными>
د دې کمانډ کار کولو لپاره، تاسو ممکن په خپل سیسټم کې کڅوړه نصبولو ته اړتیا ولرئ attr.
سترګې ډاریږي، خو لاسونه یې کوي
دا ټول منترونه او اوږده YAML څرګندونه په سطحه پیچلې ښکاري، مګر په عمل کې، د سلرم زده کونکي په چټکۍ سره د دوی ځړول ترلاسه کوي.
په دې مقاله کې موږ په ځنګل کې ژور نه شو - د دې لپاره رسمي اسناد شتون لري. که تاسو د کبرنیټس کلستر سره د سیف ذخیره تنظیم کولو توضیحاتو سره علاقه لرئ ، نو دا لینکونه به مرسته وکړي:
د سلرم کورس کې
او که تاسو د ډیټا ذخیره کولو کې ډیر لیوالتیا لرئ ، نو د دې لپاره لاسلیک وکړئ
د مقالې لیکوال: الکساندر شوالوف، تمرین انجنیر
سرچینه: www.habr.com