Container Storage Interface (CSI) mangrupikeun antarmuka anu ngahijikeun antara Kubernetes sareng sistem panyimpenan. Kami parantos nyarios sakedap
Artikel nyadiakeun conto nyata, sanajan rada saderhana pikeun betah persepsi. Kami henteu nganggap masang sareng ngonpigurasikeun klaster Ceph sareng Kubernetes.
Anjeun wondering kumaha gawéna?
Janten, anjeun gaduh klaster Kubernetes di ujung ramo anjeun, disebarkeun, contona,
Upami anjeun gaduh sadayana ieu, hayu urang angkat!
Mimiti, hayu urang angkat ka salah sahiji titik klaster Ceph sareng pariksa yén sadayana aya dina urutan:
ceph health
ceph -s
Salajengna, urang bakal langsung nyiptakeun kolam renang pikeun disk RBD:
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
Hayu urang ngaléngkah ka klaster Kubernetes. Di dinya, mimitina, urang bakal masang supir Ceph CSI pikeun RBD. Urang bakal masang, saperti nu diharapkeun, ngaliwatan Helm.
Kami nambihan gudang kalayan bagan, kami nampi sakumpulan variabel pikeun bagan ceph-csi-rbd:
helm repo add ceph-csi https://ceph.github.io/csi-charts
helm inspect values ceph-csi/ceph-csi-rbd > cephrbd.yml
Ayeuna anjeun kedah ngeusian file cephrbd.yml. Jang ngalampahkeun ieu, panggihan ID klaster sareng alamat IP monitor di Ceph:
ceph fsid # так мы узнаем clusterID
ceph mon dump # а так увидим IP-адреса мониторов
Urang asupkeun nilai diala kana file cephrbd.yml. Dina waktos anu sami, urang ngaktifkeun nyiptakeun kawijakan PSP (Pod Security Policies). Pilihan dina bagian nodeplugin и panyadia parantos aya dina file, aranjeunna tiasa dilereskeun sapertos anu dipidangkeun di handap ieu:
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
Salajengna, anu tetep pikeun urang nyaéta masang bagan dina klaster Kubernetes.
helm upgrade -i ceph-csi-rbd ceph-csi/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespace
Hébat, supir RBD jalan!
Hayu urang nyieun StorageClass anyar dina Kubernetes. Ieu deui merlukeun saeutik tinkering kalawan Ceph.
Urang nyieun pamaké anyar dina Ceph sarta méré anjeunna hak nulis ka kolam renang nu kubus:
ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'
Ayeuna hayu urang tingali konci aksés masih aya:
ceph auth get-key client.rbdkube
Paréntah bakal kaluaran sapertos kieu:
AQCO9NJbhYipKRAAMqZsnqqS/T8OYQX20xIa9A==
Hayu urang tambahkeun nilai ieu Rahasia dina klaster Kubernetes - dimana urang peryogina userKey:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-rbd-secret
namespace: ceph-csi-rbd
stringData:
# Значения ключей соответствуют имени пользователя и его ключу, как указано в
# кластере Ceph. ID юзера должен иметь доступ к пулу,
# указанному в storage class
userID: rbdkube
userKey: <user-key>
Sareng urang nyiptakeun rusiah urang:
kubectl apply -f secret.yaml
Salajengna, urang peryogi StorageClass manifest sapertos kieu:
---
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
Perlu dieusian clusterID, anu kami parantos diajar ku tim cepy fsid, sareng nerapkeun manifest ieu kana klaster Kubernetes:
kubectl apply -f storageclass.yaml
Pikeun mariksa kumaha klaster gawé bareng, hayu urang nyieun PVC handap (Persistent Volume Claim):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rbd-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: csi-rbd-sc
Hayu urang tingali kumaha Kubernetes nyiptakeun volume anu dipénta dina Ceph:
kubectl get pvc
kubectl get pv
Sagalana sigana hébat! Naon ieu kasampak kawas di sisi Ceph?
Kami nampi daptar volume di kolam renang sareng ningali inpormasi ngeunaan volume kami:
rbd ls -p kube
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653 # тут, конечно же, будет другой ID тома, который выдала предыдущая команда
Ayeuna hayu urang tingali kumaha ngatur ukuran volume RBD jalan.
Robah ukuran polumeu dina manifest pvc.yaml ka 2Gi sareng nerapkeun:
kubectl apply -f pvc.yaml
Hayu urang ngadagoan parobahan mawa pangaruh jeung kasampak di ukuran volume deui.
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653
kubectl get pv
kubectl get pvc
Urang nempo yén ukuran PVC teu robah. Pikeun milarian alesanana, anjeun tiasa naroskeun Kubernetes pikeun déskripsi YAML tina PVC:
kubectl get pvc rbd-pvc -o yaml
Ieu masalahna:
pesen: Ngadagoan pamaké pikeun (ulang) ngamimitian pod nepi ka rengse ukuran sistem file volume on node. ngetik: FileSystemResizePending
Nyaéta, disk parantos ningkat, tapi sistem file dina éta henteu.
Pikeun tumuwuh sistem file, Anjeun kudu masang polumeu. Di nagara urang, anu dijieun PVC / PV ayeuna teu dipaké dina sagala cara.
Urang tiasa ngadamel test Pod, contona sapertos kieu:
---
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
Ayeuna hayu urang nempo PVC:
kubectl get pvc
Ukuranna parantos robih, sadayana saé.
Dina bagian kahiji, urang digawekeun ku alat block RBD (eta nangtung pikeun Rados Blok Alat), tapi ieu teu bisa dipigawé lamun microservices béda kudu gawé bareng disk ieu sakaligus. CephFS langkung cocog pikeun damel sareng file tinimbang gambar disk.
Nganggo conto klaster Ceph sareng Kubernetes, urang bakal ngonpigurasikeun CSI sareng éntitas anu sanés pikeun damel sareng CephFS.
Hayu urang kéngingkeun nilai tina bagan Helm énggal anu urang peryogikeun:
helm inspect values ceph-csi/ceph-csi-cephfs > cephfs.yml
Sakali deui anjeun kedah ngeusian file cephfs.yml. Sapertos sateuacanna, paréntah Ceph bakal ngabantosan:
ceph fsid
ceph mon dump
Eusian file kalayan nilai sapertos kieu:
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
Perhatikeun yén alamat monitor dieusian dina alamat formulir basajan: port. Pikeun masang cephfs dina node, alamat ieu ditransfer ka modul kernel, anu henteu acan terang kumaha jalanna sareng protokol monitor v2.
Urang ngarobah port pikeun httpMetrics (Prometheus bakal indit ka dinya pikeun monitoring metrics) meh teu konflik jeung nginx-proxy, nu dipasang ku Kubespray. Anjeun panginten henteu peryogi ieu.
Pasang bagan Helm dina klaster Kubernetes:
helm upgrade -i ceph-csi-cephfs ceph-csi/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespace
Hayu urang angkat ka toko data Ceph pikeun nyiptakeun pangguna anu misah di dinya. Dokuméntasi nyatakeun yén panyadia CephFS butuh hak aksés administrator klaster. Tapi urang bakal nyieun pamaké misah fs kalawan hak kawates:
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'
Sareng hayu urang tingali konci aksés na, urang peryogina engké:
ceph auth get-key client.fs
Hayu urang nyieun Rahasia misah jeung StorageClass.
Henteu aya anu énggal, kami parantos ningali ieu dina conto RBD:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-cephfs-secret
namespace: ceph-csi-cephfs
stringData:
# Необходимо для динамически создаваемых томов
adminID: fs
adminKey: <вывод предыдущей команды>
Nerapkeun manifest:
kubectl apply -f secret.yaml
Sareng ayeuna - StorageClass anu misah:
---
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
Hayu urang eusian dieu clusterID sareng lumaku dina Kubernetes:
kubectl apply -f storageclass.yaml
pamariksaan
Pikeun pariksa, sapertos dina conto sateuacana, hayu urang ngadamel PVC:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-cephfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: csi-cephfs-sc
Jeung pariksa ayana PVC / PV:
kubectl get pvc
kubectl get pv
Upami anjeun hoyong ningali file sareng diréktori di CephFS, anjeun tiasa masang sistem file ieu dimana waé. Contona saperti ditémbongkeun di handap.
Hayu urang angkat ka salah sahiji titik klaster Ceph sareng laksanakeun tindakan ieu:
# Точка монтирования
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
Tangtosna, masang FS dina titik Ceph sapertos kieu ngan ukur cocog pikeun tujuan palatihan, anu kami lakukeun dina kami.
Sareng pamustunganana, hayu urang parios kumaha hal-hal damel sareng ukuran ukuran jilid dina kasus CephFS. Hayu urang uih deui ka Kubernetes sareng ngédit manifest kami pikeun PVC - ningkatkeun ukuranana di dinya, contona, kana 7Gi.
Hayu urang nerapkeun file anu diédit:
kubectl apply -f pvc.yaml
Hayu urang tingali diréktori anu dipasang pikeun ningali kumaha kuota parantos robih:
getfattr -n ceph.quota.max_bytes <каталог-с-данными>
Pikeun paréntah ieu tiasa dianggo, anjeun panginten kedah pasang pakét dina sistem anjeun attr.
Panon sieun, tapi leungeun
Sadaya mantra ieu sareng manifes YAML anu panjang sigana pajeulit dina permukaan, tapi dina prakna, murid Slurm gancang ngartos.
Dina tulisan ieu kami henteu lebet ka jero leuweung - aya dokuméntasi resmi pikeun éta. Upami anjeun resep kana detil ngeunaan nyetél panyimpenan Ceph sareng klaster Kubernetes, tautan ieu bakal ngabantosan:
Dina kursus Slurm
Sareng upami anjeun langkung resep kana neundeun data, teras ngadaptarkeun
Panulis artikel: Alexander Shvalov, practicing insinyur
sumber: www.habr.com