د کبرنیټس کلستر ته د سیف میشته ذخیره وصل کولو عملي مثال

د کانټینر ذخیره کولو انٹرفیس (CSI) د کوبرنیټس او ذخیره کولو سیسټمونو ترمینځ یو متحد انٹرفیس دی. موږ دمخه په دې اړه لنډې خبرې کړې دي وویل، او نن به موږ د CSI او Ceph ترکیب ته نږدې کتنه وکړو: موږ به وښیو چې څنګه د Ceph ذخیره وصل کړئ د Kubernetes کلستر ته.
مقاله د احساس د اسانتیا لپاره ریښتیني، که څه هم یو څه ساده مثالونه وړاندې کوي. موږ د Ceph او Kubernetes کلسترونو نصب او تنظیم کولو ته پام نه کوو.

ایا تاسو حیران یاست چې دا څنګه کار کوي؟

د کبرنیټس کلستر ته د سیف میشته ذخیره وصل کولو عملي مثال

نو، تاسو په ګوتو کې د کوبرنیټس کلستر لرئ، ځای پرځای شوي، د بیلګې په توګه، kubespray. د سیف کلستر نږدې کار کوي - تاسو کولی شئ دا هم نصب کړئ، د بیلګې په توګه، د دې سره د لوبو کتابونو یوه ټولګه. زه امید لرم چې د دې ذکر کولو ته اړتیا نشته چې د دوی ترمینځ تولید لپاره باید لږترلږه د 10 Gbit/s د بینډ ویت سره شبکه وي.

که تاسو دا ټول لرئ، راځئ چې لاړ شو!

لومړی، راځئ چې د 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 څرګندونه په سطحه پیچلې ښکاري، مګر په عمل کې، د سلرم زده کونکي په چټکۍ سره د دوی ځړول ترلاسه کوي.
په دې مقاله کې موږ په ځنګل کې ژور نه شو - د دې لپاره رسمي اسناد شتون لري. که تاسو د کبرنیټس کلستر سره د سیف ذخیره تنظیم کولو توضیحاتو سره علاقه لرئ ، نو دا لینکونه به مرسته وکړي:

د کبرنیټس عمومي اصول د حجمونو سره کار کوي
د RBD اسناد
د سیف لید څخه د RBD او کبرنیټس ادغام
د CSI له لید څخه د RBD او Kubernetes ادغام
د عمومي CephFS اسناد
د CSI لید څخه د CephFS او Kubernetes ادغام

د سلرم کورس کې د کوبرنیټس بیس تاسو کولی شئ یو څه نور لاړ شئ او په Kubernetes کې یو ریښتینی غوښتنلیک ځای په ځای کړئ چې CephFS به د فایل ذخیره کولو په توګه وکاروي. د GET/POST غوښتنو له لارې تاسو به وکولی شئ فایلونه انتقال کړئ او له Ceph څخه یې ترلاسه کړئ.

او که تاسو د ډیټا ذخیره کولو کې ډیر لیوالتیا لرئ ، نو د دې لپاره لاسلیک وکړئ په سیف کې نوی کورس. پداسې حال کې چې د بیټا ازموینه روانه ده، کورس په تخفیف کې ترلاسه کیدی شي او تاسو کولی شئ د هغې مینځپانګه اغیزه وکړئ.

د مقالې لیکوال: الکساندر شوالوف، تمرین انجنیر ساوتریج, تصدیق شوی Kubernetes مدیر، لیکوال او د سلرم کورسونو پراختیا کونکی.

سرچینه: www.habr.com