Ceph-ಆಧಾರಿತ ಸಂಗ್ರಹಣೆಯನ್ನು Kubernetes ಕ್ಲಸ್ಟರ್‌ಗೆ ಸಂಪರ್ಕಿಸುವ ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆ

ಕಂಟೈನರ್ ಸ್ಟೋರೇಜ್ ಇಂಟರ್ಫೇಸ್ (CSI) ಕುಬರ್ನೆಟ್ಸ್ ಮತ್ತು ಶೇಖರಣಾ ವ್ಯವಸ್ಥೆಗಳ ನಡುವಿನ ಏಕೀಕೃತ ಇಂಟರ್ಫೇಸ್ ಆಗಿದೆ. ನಾವು ಈಗಾಗಲೇ ಅದರ ಬಗ್ಗೆ ಸಂಕ್ಷಿಪ್ತವಾಗಿ ಮಾತನಾಡಿದ್ದೇವೆ ಹೇಳಿದರು, ಮತ್ತು ಇಂದು ನಾವು CSI ಮತ್ತು Ceph ಸಂಯೋಜನೆಯನ್ನು ಹತ್ತಿರದಿಂದ ನೋಡೋಣ: ನಾವು ಹೇಗೆ ತೋರಿಸುತ್ತೇವೆ Ceph ಸಂಗ್ರಹಣೆಯನ್ನು ಸಂಪರ್ಕಿಸಿ ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್‌ಗೆ.
ಗ್ರಹಿಕೆಗೆ ಸುಲಭವಾಗುವಂತೆ ಸ್ವಲ್ಪ ಸರಳೀಕೃತ ಉದಾಹರಣೆಗಳಿದ್ದರೂ ಲೇಖನವು ನೈಜತೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ. Ceph ಮತ್ತು Kubernetes ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಸ್ಥಾಪಿಸುವುದನ್ನು ಮತ್ತು ಕಾನ್ಫಿಗರ್ ಮಾಡುವುದನ್ನು ನಾವು ಪರಿಗಣಿಸುವುದಿಲ್ಲ.

ಇದು ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಎಂದು ನೀವು ಆಶ್ಚರ್ಯ ಪಡುತ್ತೀರಾ?

Ceph-ಆಧಾರಿತ ಸಂಗ್ರಹಣೆಯನ್ನು Kubernetes ಕ್ಲಸ್ಟರ್‌ಗೆ ಸಂಪರ್ಕಿಸುವ ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆ

ಆದ್ದರಿಂದ, ನಿಮ್ಮ ಬೆರಳ ತುದಿಯಲ್ಲಿ ನೀವು ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಹೊಂದಿದ್ದೀರಿ, ಉದಾಹರಣೆಗೆ, ನಿಯೋಜಿಸಲಾಗಿದೆ, ಕುಬೆಸ್ಪ್ರೇ. ಹತ್ತಿರದಲ್ಲಿ Ceph ಕ್ಲಸ್ಟರ್ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿದೆ - ನೀವು ಇದನ್ನು ಸಹ ಸ್ಥಾಪಿಸಬಹುದು, ಉದಾಹರಣೆಗೆ, ಇದರೊಂದಿಗೆ ಆಟದ ಪುಸ್ತಕಗಳ ಒಂದು ಸೆಟ್. ಅವುಗಳ ನಡುವೆ ಉತ್ಪಾದನೆಗೆ ಕನಿಷ್ಠ 10 Gbit/s ಬ್ಯಾಂಡ್‌ವಿಡ್ತ್‌ನೊಂದಿಗೆ ನೆಟ್ವರ್ಕ್ ಇರಬೇಕು ಎಂದು ನಮೂದಿಸುವ ಅಗತ್ಯವಿಲ್ಲ ಎಂದು ನಾನು ಭಾವಿಸುತ್ತೇನೆ.

ನಿಮ್ಮ ಬಳಿ ಇದೆಲ್ಲ ಇದ್ದರೆ, ಹೋಗೋಣ!

ಮೊದಲಿಗೆ, ನಾವು 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 ಸಂಗ್ರಹಣೆಯನ್ನು ಹೊಂದಿಸುವ ವಿವರಗಳಲ್ಲಿ ನೀವು ಆಸಕ್ತಿ ಹೊಂದಿದ್ದರೆ, ಈ ಲಿಂಕ್‌ಗಳು ಸಹಾಯ ಮಾಡುತ್ತವೆ:

ಸಂಪುಟಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವ ಕುಬರ್ನೆಟ್ಸ್ನ ಸಾಮಾನ್ಯ ತತ್ವಗಳು
RBD ದಾಖಲೆ
Ceph ದೃಷ್ಟಿಕೋನದಿಂದ RBD ಮತ್ತು ಕುಬರ್ನೆಟ್ಸ್ ಅನ್ನು ಸಂಯೋಜಿಸುವುದು
CSI ದೃಷ್ಟಿಕೋನದಿಂದ RBD ಮತ್ತು ಕುಬರ್ನೆಟ್ಸ್ ಅನ್ನು ಸಂಯೋಜಿಸುವುದು
ಸಾಮಾನ್ಯ CephFS ಡಾಕ್ಯುಮೆಂಟೇಶನ್
CSI ದೃಷ್ಟಿಕೋನದಿಂದ CephFS ಮತ್ತು Kubernetes ಅನ್ನು ಸಂಯೋಜಿಸುವುದು

ಸ್ಲರ್ಮ್ ಕೋರ್ಸ್ನಲ್ಲಿ ಕುಬರ್ನೆಟ್ಸ್ ಬೇಸ್ ನೀವು ಸ್ವಲ್ಪ ಮುಂದೆ ಹೋಗಬಹುದು ಮತ್ತು CephFS ಅನ್ನು ಫೈಲ್ ಸಂಗ್ರಹಣೆಯಾಗಿ ಬಳಸುವ Kubernetes ನಲ್ಲಿ ನಿಜವಾದ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನಿಯೋಜಿಸಬಹುದು. GET/POST ವಿನಂತಿಗಳ ಮೂಲಕ ನೀವು ಫೈಲ್‌ಗಳನ್ನು Ceph ಗೆ ವರ್ಗಾಯಿಸಲು ಮತ್ತು ಸ್ವೀಕರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.

ಮತ್ತು ನೀವು ಡೇಟಾ ಸಂಗ್ರಹಣೆಯಲ್ಲಿ ಹೆಚ್ಚು ಆಸಕ್ತಿ ಹೊಂದಿದ್ದರೆ, ನಂತರ ಸೈನ್ ಅಪ್ ಮಾಡಿ Ceph ನಲ್ಲಿ ಹೊಸ ಕೋರ್ಸ್. ಬೀಟಾ ಪರೀಕ್ಷೆಯು ನಡೆಯುತ್ತಿರುವಾಗ, ಕೋರ್ಸ್ ಅನ್ನು ರಿಯಾಯಿತಿಯಲ್ಲಿ ಪಡೆಯಬಹುದು ಮತ್ತು ನೀವು ಅದರ ವಿಷಯದ ಮೇಲೆ ಪ್ರಭಾವ ಬೀರಬಹುದು.

ಲೇಖನದ ಲೇಖಕ: ಅಲೆಕ್ಸಾಂಡರ್ ಶ್ವಾಲೋವ್, ಅಭ್ಯಾಸ ಇಂಜಿನಿಯರ್ ಸೌತ್ಬ್ರಿಡ್ಜ್, ಪ್ರಮಾಣೀಕೃತ ಕುಬರ್ನೆಟ್ಸ್ ನಿರ್ವಾಹಕರು, ಸ್ಲರ್ಮ್ ಕೋರ್ಸ್‌ಗಳ ಲೇಖಕ ಮತ್ತು ಡೆವಲಪರ್.

ಮೂಲ: www.habr.com