ಕಂಟೈನರ್ ಸ್ಟೋರೇಜ್ ಇಂಟರ್ಫೇಸ್ (CSI) ಕುಬರ್ನೆಟ್ಸ್ ಮತ್ತು ಶೇಖರಣಾ ವ್ಯವಸ್ಥೆಗಳ ನಡುವಿನ ಏಕೀಕೃತ ಇಂಟರ್ಫೇಸ್ ಆಗಿದೆ. ನಾವು ಈಗಾಗಲೇ ಅದರ ಬಗ್ಗೆ ಸಂಕ್ಷಿಪ್ತವಾಗಿ ಮಾತನಾಡಿದ್ದೇವೆ
ಗ್ರಹಿಕೆಗೆ ಸುಲಭವಾಗುವಂತೆ ಸ್ವಲ್ಪ ಸರಳೀಕೃತ ಉದಾಹರಣೆಗಳಿದ್ದರೂ ಲೇಖನವು ನೈಜತೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ. Ceph ಮತ್ತು Kubernetes ಕ್ಲಸ್ಟರ್ಗಳನ್ನು ಸ್ಥಾಪಿಸುವುದನ್ನು ಮತ್ತು ಕಾನ್ಫಿಗರ್ ಮಾಡುವುದನ್ನು ನಾವು ಪರಿಗಣಿಸುವುದಿಲ್ಲ.
ಇದು ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಎಂದು ನೀವು ಆಶ್ಚರ್ಯ ಪಡುತ್ತೀರಾ?
ಆದ್ದರಿಂದ, ನಿಮ್ಮ ಬೆರಳ ತುದಿಯಲ್ಲಿ ನೀವು ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಹೊಂದಿದ್ದೀರಿ, ಉದಾಹರಣೆಗೆ, ನಿಯೋಜಿಸಲಾಗಿದೆ,
ನಿಮ್ಮ ಬಳಿ ಇದೆಲ್ಲ ಇದ್ದರೆ, ಹೋಗೋಣ!
ಮೊದಲಿಗೆ, ನಾವು Ceph ಕ್ಲಸ್ಟರ್ ನೋಡ್ಗಳಲ್ಲಿ ಒಂದಕ್ಕೆ ಹೋಗೋಣ ಮತ್ತು ಎಲ್ಲವೂ ಕ್ರಮದಲ್ಲಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸೋಣ:
ceph health
ceph -s
ಮುಂದೆ, ನಾವು ತಕ್ಷಣವೇ RBD ಡಿಸ್ಕ್ಗಳಿಗಾಗಿ ಪೂಲ್ ಅನ್ನು ರಚಿಸುತ್ತೇವೆ:
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್ಗೆ ಹೋಗೋಣ. ಅಲ್ಲಿ, ಮೊದಲನೆಯದಾಗಿ, ನಾವು 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 ನೀತಿಗಳ ರಚನೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತೇವೆ (ಪಾಡ್ ಭದ್ರತಾ ನೀತಿಗಳು). ವಿಭಾಗಗಳಲ್ಲಿ ಆಯ್ಕೆಗಳು ನೋಡ್ಪ್ಲಗಿನ್ и ಒದಗಿಸುವವರು ಈಗಾಗಲೇ ಫೈಲ್ನಲ್ಲಿ, ಕೆಳಗೆ ತೋರಿಸಿರುವಂತೆ ಅವುಗಳನ್ನು ಸರಿಪಡಿಸಬಹುದು:
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 ಡ್ರೈವರ್ ಕೆಲಸ ಮಾಡುತ್ತದೆ!
ಕುಬರ್ನೆಟ್ಸ್ನಲ್ಲಿ ಹೊಸ ಶೇಖರಣಾ ವರ್ಗವನ್ನು ರಚಿಸೋಣ. ಇದಕ್ಕೆ ಮತ್ತೊಮ್ಮೆ Ceph ನೊಂದಿಗೆ ಸ್ವಲ್ಪ ಟಿಂಕರ್ ಮಾಡುವ ಅಗತ್ಯವಿದೆ.
ನಾವು Ceph ನಲ್ಲಿ ಹೊಸ ಬಳಕೆದಾರರನ್ನು ರಚಿಸುತ್ತೇವೆ ಮತ್ತು ಪೂಲ್ಗೆ ಬರೆಯಲು ಅವರಿಗೆ ಹಕ್ಕುಗಳನ್ನು ನೀಡುತ್ತೇವೆ ಘನ:
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
ಮುಂದೆ, ನಮಗೆ ಈ ರೀತಿಯ 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
ಭರ್ತಿ ಮಾಡಬೇಕಾಗಿದೆ ಕ್ಲಸ್ಟರ್ ಐಡಿ, ನಾವು ಈಗಾಗಲೇ ತಂಡದಿಂದ ಕಲಿತಿದ್ದೇವೆ 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
Ceph ನಲ್ಲಿ ವಿನಂತಿಸಿದ ಪರಿಮಾಣವನ್ನು Kubernetes ಹೇಗೆ ರಚಿಸಿದ್ದಾರೆ ಎಂಬುದನ್ನು ತಕ್ಷಣ ನೋಡೋಣ:
kubectl get pvc
kubectl get pv
ಎಲ್ಲವೂ ಅದ್ಭುತವಾಗಿದೆ ಎಂದು ತೋರುತ್ತದೆ! Cef ಭಾಗದಲ್ಲಿ ಇದು ಹೇಗೆ ಕಾಣುತ್ತದೆ?
ನಾವು ಪೂಲ್ನಲ್ಲಿರುವ ಸಂಪುಟಗಳ ಪಟ್ಟಿಯನ್ನು ಪಡೆಯುತ್ತೇವೆ ಮತ್ತು ನಮ್ಮ ಪರಿಮಾಣದ ಕುರಿತು ಮಾಹಿತಿಯನ್ನು ವೀಕ್ಷಿಸುತ್ತೇವೆ:
rbd ls -p kube
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653 # тут, конечно же, будет другой ID тома, который выдала предыдущая команда
ಈಗ RBD ಪರಿಮಾಣವನ್ನು ಮರುಗಾತ್ರಗೊಳಿಸುವುದು ಹೇಗೆ ಎಂದು ನೋಡೋಣ.
pvc.yaml ಮ್ಯಾನಿಫೆಸ್ಟ್ನಲ್ಲಿನ ವಾಲ್ಯೂಮ್ ಗಾತ್ರವನ್ನು 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 ವಿವರಣೆಗಾಗಿ ನೀವು ಕುಬರ್ನೆಟ್ಸ್ ಅನ್ನು ಪ್ರಶ್ನಿಸಬಹುದು:
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 ಕ್ಲಸ್ಟರ್ಗಳ ಉದಾಹರಣೆಯನ್ನು ಬಳಸಿಕೊಂಡು, CephFS ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ನಾವು CSI ಮತ್ತು ಇತರ ಅಗತ್ಯ ಘಟಕಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುತ್ತೇವೆ.
ನಮಗೆ ಅಗತ್ಯವಿರುವ ಹೊಸ ಹೆಲ್ಮ್ ಚಾರ್ಟ್ನಿಂದ ಮೌಲ್ಯಗಳನ್ನು ಪಡೆಯೋಣ:
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
ಮಾನಿಟರ್ ವಿಳಾಸಗಳನ್ನು ಸರಳ ಫಾರ್ಮ್ ವಿಳಾಸ:ಪೋರ್ಟ್ನಲ್ಲಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ನೋಡ್ನಲ್ಲಿ cephfs ಅನ್ನು ಆರೋಹಿಸಲು, ಈ ವಿಳಾಸಗಳನ್ನು ಕರ್ನಲ್ ಮಾಡ್ಯೂಲ್ಗೆ ವರ್ಗಾಯಿಸಲಾಗುತ್ತದೆ, ಇದು v2 ಮಾನಿಟರ್ ಪ್ರೋಟೋಕಾಲ್ನೊಂದಿಗೆ ಹೇಗೆ ಕೆಲಸ ಮಾಡಬೇಕೆಂದು ಇನ್ನೂ ತಿಳಿದಿಲ್ಲ.
ನಾವು httpMetrics ಗಾಗಿ ಪೋರ್ಟ್ ಅನ್ನು ಬದಲಾಯಿಸುತ್ತೇವೆ (ಪ್ರಮೀತಿಯಸ್ ಮಾನಿಟರಿಂಗ್ ಮೆಟ್ರಿಕ್ಗಳಿಗಾಗಿ ಅಲ್ಲಿಗೆ ಹೋಗುತ್ತಾರೆ) ಇದರಿಂದ ಅದು Kubespray ನಿಂದ ಸ್ಥಾಪಿಸಲಾದ nginx-proxy ಯೊಂದಿಗೆ ಸಂಘರ್ಷಿಸುವುದಿಲ್ಲ. ನಿಮಗೆ ಇದು ಅಗತ್ಯವಿಲ್ಲದಿರಬಹುದು.
ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್ನಲ್ಲಿ ಹೆಲ್ಮ್ ಚಾರ್ಟ್ ಅನ್ನು ಸ್ಥಾಪಿಸಿ:
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
ಅದನ್ನು ಇಲ್ಲಿ ಭರ್ತಿ ಮಾಡೋಣ ಕ್ಲಸ್ಟರ್ ಐಡಿ ಮತ್ತು ಕುಬರ್ನೆಟ್ಸ್ನಲ್ಲಿ ಅನ್ವಯಿಸುತ್ತದೆ:
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
ಸಹಜವಾಗಿ, ಈ ರೀತಿಯ ಸೆಫ್ ನೋಡ್ನಲ್ಲಿ ಎಫ್ಎಸ್ ಅನ್ನು ಆರೋಹಿಸುವುದು ತರಬೇತಿ ಉದ್ದೇಶಗಳಿಗಾಗಿ ಮಾತ್ರ ಸೂಕ್ತವಾಗಿದೆ, ಇದನ್ನು ನಾವು ನಮ್ಮ ಮೇಲೆ ಮಾಡುತ್ತೇವೆ
ಮತ್ತು ಅಂತಿಮವಾಗಿ, CephFS ಸಂದರ್ಭದಲ್ಲಿ ಮರುಗಾತ್ರಗೊಳಿಸುವ ಸಂಪುಟಗಳೊಂದಿಗೆ ವಿಷಯಗಳು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಎಂಬುದನ್ನು ಪರಿಶೀಲಿಸೋಣ. ನಾವು Kubernetes ಗೆ ಹಿಂತಿರುಗಿ ಮತ್ತು PVC ಗಾಗಿ ನಮ್ಮ ಮ್ಯಾನಿಫೆಸ್ಟ್ ಅನ್ನು ಸಂಪಾದಿಸೋಣ - ಅಲ್ಲಿ ಗಾತ್ರವನ್ನು ಹೆಚ್ಚಿಸಿ, ಉದಾಹರಣೆಗೆ, 7Gi ಗೆ.
ಸಂಪಾದಿಸಿದ ಫೈಲ್ ಅನ್ನು ಅನ್ವಯಿಸೋಣ:
kubectl apply -f pvc.yaml
ಕೋಟಾ ಹೇಗೆ ಬದಲಾಗಿದೆ ಎಂಬುದನ್ನು ನೋಡಲು ಮೌಂಟೆಡ್ ಡೈರೆಕ್ಟರಿಯನ್ನು ನೋಡೋಣ:
getfattr -n ceph.quota.max_bytes <каталог-с-данными>
ಈ ಆಜ್ಞೆಯು ಕೆಲಸ ಮಾಡಲು, ನಿಮ್ಮ ಸಿಸ್ಟಂನಲ್ಲಿ ನೀವು ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಸ್ಥಾಪಿಸಬೇಕಾಗಬಹುದು attr.
ಕಣ್ಣುಗಳು ಭಯಪಡುತ್ತವೆ, ಆದರೆ ಕೈಗಳು ಹಾಗೆ ಮಾಡುತ್ತವೆ
ಈ ಎಲ್ಲಾ ಮಂತ್ರಗಳು ಮತ್ತು ದೀರ್ಘವಾದ YAML ಮ್ಯಾನಿಫೆಸ್ಟ್ಗಳು ಮೇಲ್ನೋಟಕ್ಕೆ ಜಟಿಲವಾಗಿದೆ ಎಂದು ತೋರುತ್ತದೆ, ಆದರೆ ಪ್ರಾಯೋಗಿಕವಾಗಿ, ಸ್ಲರ್ಮ್ ವಿದ್ಯಾರ್ಥಿಗಳು ಅವುಗಳನ್ನು ಬಹಳ ಬೇಗನೆ ಗ್ರಹಿಸುತ್ತಾರೆ.
ಈ ಲೇಖನದಲ್ಲಿ ನಾವು ಕಾಡಿನೊಳಗೆ ಆಳವಾಗಿ ಹೋಗಲಿಲ್ಲ - ಅದಕ್ಕಾಗಿ ಅಧಿಕೃತ ದಾಖಲೆಗಳಿವೆ. ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್ನೊಂದಿಗೆ Ceph ಸಂಗ್ರಹಣೆಯನ್ನು ಹೊಂದಿಸುವ ವಿವರಗಳಲ್ಲಿ ನೀವು ಆಸಕ್ತಿ ಹೊಂದಿದ್ದರೆ, ಈ ಲಿಂಕ್ಗಳು ಸಹಾಯ ಮಾಡುತ್ತವೆ:
ಸ್ಲರ್ಮ್ ಕೋರ್ಸ್ನಲ್ಲಿ
ಮತ್ತು ನೀವು ಡೇಟಾ ಸಂಗ್ರಹಣೆಯಲ್ಲಿ ಹೆಚ್ಚು ಆಸಕ್ತಿ ಹೊಂದಿದ್ದರೆ, ನಂತರ ಸೈನ್ ಅಪ್ ಮಾಡಿ
ಲೇಖನದ ಲೇಖಕ: ಅಲೆಕ್ಸಾಂಡರ್ ಶ್ವಾಲೋವ್, ಅಭ್ಯಾಸ ಇಂಜಿನಿಯರ್
ಮೂಲ: www.habr.com