Ang Container Storage Interface (CSI) usa ka hiniusa nga interface tali sa Kubernetes ug mga sistema sa pagtipig. Nahisgotan na namo kini sa makadiyot
Ang artikulo naghatag og tinuod, bisan gamay nga gipayano nga mga pananglitan alang sa kasayon ββsa panglantaw. Wala namo gikonsiderar ang pag-install ug pag-configure sa mga cluster sa Ceph ug Kubernetes.
Nahibulong ka ba kung giunsa kini paglihok?
Busa, aduna kay Kubernetes cluster sa imong mga tudlo, gipakatap, pananglitan,
Kung naa nimo kining tanan, lakaw ta!
Una, moadto kita sa usa sa mga cluster node sa Ceph ug susihon kung naa ba ang tanan:
ceph health
ceph -s
Sunod, maghimo dayon kami usa ka pool alang sa mga RBD disk:
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
Mopadayon kita ngadto sa Kubernetes cluster. Didto, una sa tanan, atong i-install ang Ceph CSI driver para sa RBD. Atong i-install, sama sa gipaabot, pinaagi sa Helm.
Nagdugang kami usa ka repository nga adunay usa ka tsart, nakakuha kami usa ka hugpong sa mga variable alang sa tsart sa ceph-csi-rbd:
helm repo add ceph-csi https://ceph.github.io/csi-charts
helm inspect values ceph-csi/ceph-csi-rbd > cephrbd.yml
Karon kinahanglan nimo nga pun-on ang cephrbd.yml file. Aron mahimo kini, pangitaa ang cluster ID ug IP address sa mga monitor sa Ceph:
ceph fsid # ΡΠ°ΠΊ ΠΌΡ ΡΠ·Π½Π°Π΅ΠΌ clusterID
ceph mon dump # Π° ΡΠ°ΠΊ ΡΠ²ΠΈΠ΄ΠΈΠΌ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΎΠ²
Gisulod namon ang nakuha nga mga kantidad sa file sa cephrbd.yml. Sa parehas nga oras, mahimo namon ang paghimo sa mga palisiya sa PSP (Pod Security Policies). Mga kapilian sa mga seksyon nodeplugin ΠΈ tighatag naa na sa file, mahimo silang matul-id sama sa gipakita sa ubos:
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
Sunod, ang nahabilin alang kanamo mao ang pag-install sa tsart sa kumpol sa Kubernetes.
helm upgrade -i ceph-csi-rbd ceph-csi/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespace
Maayo, ang drayber sa RBD nagtrabaho!
Magbuhat ta ug bag-ong StorageClass sa Kubernetes. Nanginahanglan na usab kini og gamay nga pag-usisa ni Ceph.
Naghimo kami usa ka bag-ong tiggamit sa Ceph ug gihatagan siya mga katungod sa pagsulat sa pool cube:
ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'
Karon atong tan-awon ang access key anaa gihapon:
ceph auth get-key client.rbdkube
Ang mando magpagawas usa ka butang nga sama niini:
AQCO9NJbhYipKRAAMqZsnqqS/T8OYQX20xIa9A==
Atong idugang kini nga bili sa Secret sa Kubernetes cluster - diin gikinahanglan nato kini userKey:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-rbd-secret
namespace: ceph-csi-rbd
stringData:
# ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π΅Π³ΠΎ ΠΊΠ»ΡΡΡ, ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π²
# ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Ceph. ID ΡΠ·Π΅ΡΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΡΠ»Ρ,
# ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π² storage class
userID: rbdkube
userKey: <user-key>
Ug among gihimo ang among sekreto:
kubectl apply -f secret.yaml
Sunod, kinahanglan namon ang usa ka StorageClass nga magpakita nga sama niini:
---
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
Kinahanglang pun-an clusterID, nga nakat-onan na namo sa team ceph fsid, ug i-apply kini nga manifest sa Kubernetes cluster:
kubectl apply -f storageclass.yaml
Aron masusi kung giunsa ang pagtinabangay sa mga pungpong, buhaton nato ang mosunod nga PVC (Persistent Volume Claim):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rbd-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: csi-rbd-sc
Atong tan-awon dayon kung giunsa paghimo sa Kubernetes ang gihangyo nga volume sa Ceph:
kubectl get pvc
kubectl get pv
Ang tanan daw maayo! Unsa ang hitsura niini sa bahin sa Ceph?
Nagkuha kami usa ka lista sa mga volume sa pool ug tan-awa ang kasayuran bahin sa among volume:
rbd ls -p kube
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653 # ΡΡΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, Π±ΡΠ΄Π΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ID ΡΠΎΠΌΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ΄Π°Π»Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°
Karon atong tan-awon kung giunsa ang pagbag-o sa usa ka volume sa RBD.
Usba ang gidak-on sa volume sa pvc.yaml manifest sa 2Gi ug i-apply kini:
kubectl apply -f pvc.yaml
Atong hulaton ang mga pagbag-o nga mo-epekto ug tan-awon pag-usab ang gidak-on sa volume.
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653
kubectl get pv
kubectl get pvc
Nakita namon nga ang gidak-on sa PVC wala mausab. Aron mahibal-an kung ngano, mahimo nimong pangutana ang Kubernetes alang sa usa ka paghulagway sa YAML sa PVC:
kubectl get pvc rbd-pvc -o yaml
Ania ang problema:
mensahe: Naghulat alang sa user nga (pag-usab) magsugod sa usa ka pod aron mahuman ang file system resize sa volume sa node. tipo: FileSystemResizePending
Kana mao, ang disk mitubo, apan ang file system niini wala.
Aron mapadako ang file system, kinahanglan nimo nga i-mount ang volume. Sa atong nasud, ang gibuhat nga PVC/PV wala gigamit karon sa bisan unsang paagi.
Makahimo kita og test Pod, pananglitan sama niini:
---
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
Ug karon atong tan-awon ang PVC:
kubectl get pvc
Nausab ang gidak-on, maayo ang tanan.
Sa una nga bahin, nagtrabaho kami sa RBD block device (kini nagpasabut sa Rados Block Device), apan dili kini mahimo kung ang lainlaing mga microservice kinahanglan nga magtrabaho sa kini nga disk nga dungan. Ang CephFS labi ka angay alang sa pagtrabaho sa mga file kaysa mga imahe sa disk.
Gamit ang panig-ingnan sa Ceph ug Kubernetes clusters, among i-configure ang CSI ug uban pang mga kinahanglanon nga entidad aron magtrabaho kauban ang CephFS.
Atong kuhaon ang mga bili gikan sa bag-ong Helm chart nga atong gikinahanglan:
helm inspect values ceph-csi/ceph-csi-cephfs > cephfs.yml
Pag-usab kinahanglan nimo nga pun-on ang cephfs.yml file. Sama kaniadto, ang mga mando ni Ceph makatabang:
ceph fsid
ceph mon dump
Pun-a ang file nga adunay mga kantidad nga sama niini:
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
Palihug timan-i nga ang mga adres sa monitor gitakda sa yano nga porma nga adres:port. Aron ma-mount ang mga cephfs sa usa ka node, kini nga mga adres gipasa sa kernel module, nga wala pa mahibal-an kung giunsa ang pagtrabaho kauban ang v2 monitor protocol.
Gibag-o namon ang pantalan para sa httpMetrics (Ang Prometheus moadto didto alang sa pagmonitor sa mga sukatan) aron dili kini magkasumpaki sa nginx-proxy, nga gi-install sa Kubespray. Tingali dili nimo kinahanglan kini.
I-install ang Helm chart sa Kubernetes cluster:
helm upgrade -i ceph-csi-cephfs ceph-csi/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespace
Adto ta sa Ceph data store para maghimo ug bulag nga user didto. Ang dokumentasyon nag-ingon nga ang tagahatag sa CephFS nanginahanglan mga katungod sa pag-access sa cluster administrator. Apan maghimo kami usa ka lahi nga tiggamit fs nga adunay limitado nga mga katungod:
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'
Ug tan-awon dayon nato ang iyang access key, kinahanglan nato kini sa ulahi:
ceph auth get-key client.fs
Magbuhat ta ug bulag nga Secret ug StorageClass.
Walaβy bag-o, nakita na namon kini sa pananglitan sa RBD:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-cephfs-secret
namespace: ceph-csi-cephfs
stringData:
# ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΡ
ΡΠΎΠΌΠΎΠ²
adminID: fs
adminKey: <Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ>
Pagpadapat sa manifest:
kubectl apply -f secret.yaml
Ug karon - usa ka lahi nga 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
Atong pun-on kini dinhi clusterID ug magamit sa Kubernetes:
kubectl apply -f storageclass.yaml
inspection
Aron masusi, sama sa miaging pananglitan, maghimo kita og PVC:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-cephfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: csi-cephfs-sc
Ug susiha ang presensya sa PVC/PV:
kubectl get pvc
kubectl get pv
Kung gusto nimo tan-awon ang mga file ug direktoryo sa CephFS, mahimo nimong i-mount kini nga file system bisan diin. Pananglitan sama sa gipakita sa ubos.
Adto ta sa usa sa mga Ceph cluster node ug buhata ang mosunod nga mga aksyon:
# Π’ΠΎΡΠΊΠ° ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
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
Siyempre, ang pag-mount sa FS sa usa ka Ceph node nga sama niini angay lamang alang sa mga katuyoan sa pagbansay, nga mao ang among gibuhat sa among
Ug sa katapusan, atong susihon kung giunsa ang paglihok sa mga butang sa pagbag-o sa mga volume sa kaso sa CephFS. Balik ta sa Kubernetes ug i-edit ang atong manifest para sa PVC - dugangan ang gidak-on didto, pananglitan, ngadto sa 7Gi.
Atong i-apply ang gi-edit nga file:
kubectl apply -f pvc.yaml
Atong tan-awon ang naka-mount nga direktoryo aron makita kung giunsa ang pagbag-o sa quota:
getfattr -n ceph.quota.max_bytes <ΠΊΠ°ΡΠ°Π»ΠΎΠ³-Ρ-Π΄Π°Π½Π½ΡΠΌΠΈ>
Aron molihok kini nga sugo, kinahanglan nimo nga i-install ang package sa imong sistema attr.
Ang mga mata nahadlok, apan ang mga kamot nahadlok
Kining tanan nga mga spelling ug taas nga YAML manifests daw komplikado sa ibabaw, apan sa pagpraktis, ang mga estudyante sa Slurm dali nga nakasabot niini.
Niini nga artikulo wala kami moadto sa lawom nga kalasangan - adunay opisyal nga dokumentasyon alang niana. Kung interesado ka sa mga detalye sa pag-set up sa Ceph storage gamit ang Kubernetes cluster, kini nga mga link makatabang:
Sa kursong Slurm
Ug kung mas interesado ka sa pagtipig sa datos, dayon pag-sign up
Awtor sa artikulo: Alexander Shvalov, practicing engineer
Source: www.habr.com