Container Storage Interface (CSI) ืืื ืืืฉืง ืืืืื ืืื Kubernetes ืืืขืจืืืช ืืืกืื. ืืืจ ืืืืจื ื ืขื ืื ืืงืฆืจื
ืืืืืจ ืืกืคืง ืืืืืืืช ืืืืชืืืช, ืื ืื ืืขื ืืคืืฉืืืช ืืื ืืืงื ืขื ืืชืคืืกื. ืืื ื ื ืฉืืงืืื ืืชืงื ื ืืืืืจื ืฉื ืืฉืืืืืช Ceph ื-Kubernetes.
ืืชื ืชืืื ืืื ืื ืขืืื?
ืื, ืืฉ ืื ืืฉืืื Kubernetes ืืืืฉื ืืื, ืคืจืืก, ืืืฉื,
ืื ืืฉ ืื ืืช ืื ืื, ืืื ื ืื!
ืจืืฉืืช, ื ืื ืืืื ืืฆืืชื ืืฉืืื Ceph ืื ืืืืง ืฉืืื ืชืงืื:
ceph health
ceph -s
ืืืืจ ืืื, ืืื ื ืืฆืืจ ืืืืจ ืขืืืจ ืืืกืงื RBD:
ceph osd pool create kube 32
ceph osd pool application enable kube rbd
ืืืื ื ืขืืืจ ืืืฉืืื Kubernetes. ืฉื, ืงืืื ืื, ื ืชืงืื ืืช ืื ืื ืืืชืงื ืฉื Ceph CSI ืขืืืจ RBD. ื ืชืงืื, ืืฆืคืื, ืืจื Helm.
ืื ื ืืืกืืคืื ืืืืจ ืขื ืชืจืฉืื, ื ืงืื ืงืืืฆื ืฉื ืืฉืชื ืื ืืชืจืฉืื 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. ืืื ืืขืฉืืช ืืืช, ืืื ืืช ืืืื ืืืฉืืื ืืืชืืืืช ื-IP ืฉื ืฆืืื ื-Ceph:
ceph fsid # ัะฐะบ ะผั ัะทะฝะฐะตะผ clusterID
ceph mon dump # ะฐ ัะฐะบ ัะฒะธะดะธะผ IP-ะฐะดัะตัะฐ ะผะพะฝะธัะพัะพะฒ
ืื ื ืืื ืืกืื ืืช ืืขืจืืื ืฉืืืฉืื ืืงืืืฅ cephrbd.yml. ืืืงืืื, ืื ื ืืืคืฉืจืื ืืฆืืจืช ืืืื ืืืช PSP (Pod Security Policies). ืืคืฉืจืืืืช ืืกืขืืคืื 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
ืืืืจ ืืื, ืื ืื ืฉื ืืชืจ ืื ื ืืื ืืืชืงืื ืืช ืืชืจืฉืื ืืืฉืืื Kubernetes.
helm upgrade -i ceph-csi-rbd ceph-csi/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespace
ื ืืืจ, ืื ืื ืืชืงื RBD ืขืืื!
ืืืื ื ืืฆืืจ StorageClass ืืืฉ ื-Kubernetes. ืื ืฉืื ืืืจืฉ ืงืฆืช ืืชืขืกืงืืช ืขื 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==
ืืืื ื ืืกืืฃ ืืช ืืขืจื ืืื ื-Secret ืืืฉืืื Kubernetes - ืืืคื ืฉืื ืื ื ืฆืจืืืื ืืืชื UserKey:
---
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, ืืืื ืืช ืืื ืืคืกื ืืื ืขื ืืฉืืื Kubernetes:
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
ืืืื ื ืจืื ืืื ืืื Kubernetes ืืฆืจ ืืช ืืืจื ืืืืืงืฉ ื-Ceph:
kubectl get pvc
kubectl get pv
ืืื ื ืจืื ื ืืืจ! ืืื ืื ื ืจืื ืืฆื ื-Cep?
ืื ื ืืงืืืื ืจืฉืืื ืฉื ืืจืืื ืืืจืืื ืืฆืืคืื ืืืืืข ืขื ืื ืคื ืฉืื ื:
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 ืื ืืฉืชื ื. ืืื ืืืจืจ ืืืืข, ืืชื ืืืื ืืฉืืื Kubernetes ืขืืืจ ืชืืืืจ YAML ืฉื PVC:
kubectl get pvc rbd-pvc -o yaml
ืื ื ืืืขืื:
ืืืืขื: ืืืื ืฉืืืฉืชืืฉ ืืชืืื (ืืืืฉ) ืคืื ืืื ืืกืืื ืืช ืฉืื ืื ืืืื ืืขืจืืช ืืงืืฆืื ืฉื ืืืฆืขื ืืืืกืื ืืฆืืืช. ืกืื: FileSystemResizePending
ืืืืืจ, ืืืืกืง ืืื, ืืื ืืขืจืืช ืืงืืฆืื ืื ืื.
ืืื ืืืืืื ืืช ืืขืจืืช ืืงืืฆืื, ืขืืื ืืืขืืืช ืืช ืขืืฆืืช ืืงืื. ืืืจืฆื ื, ื-PVC/PV ืฉื ืืฆืจ ืืื ื ืืฉืืฉ ืืืื ืืฉืื ืฆืืจื.
ืื ื ืืืืืื ืืืฆืืจ Pod ืืืืงื, ืืืฉื ืื:
---
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 block (ืื ืืืืฆื Rados Block Device), ืื ืื ื ืืชื ืืขืฉืืช ืืืช ืื ืืืงืจื-ืฉืืจืืชืื ืฉืื ืื ืฆืจืืืื ืืขืืื ืขื ืืืืกืง ืืื ืื ืืื ืืช. CephFS ืืชืืื ืืจืื ืืืชืจ ืืขืืืื ืขื ืงืืฆืื ืืื ืขื ืชืืื ืืช ืืืกืง.
ืืืืฆืขืืช ืืืืืื ืฉื ืืฉืืืืืช Ceph ื-Kubernetes, ื ืืืืจ ืืช ืืชืฆืืจื ืฉื CSI ืืืฉืืืืช ื ืืืฆืืช ืืืจืืช ืืขืืืื ืขื CephFS.
ืืืื ื ืงืื ืืช ืืขืจืืื ืืชืจืฉืื Helm ืืืืฉ ืฉืื ืื ื ืฆืจืืืื:
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 (Prometheus ืืืืข ืืฉื ืื ืืืืจ ืืืืื) ืื ืฉืืื ืื ืชืชื ืืฉ ืขื nginx-proxy, ืฉืืืชืงื ืขื ืืื Kubespray. ืืืชืื ืฉืื ืชืืืงืง ืืื.
ืืชืงื ืืช ืชืจืฉืื ืืืื ืืืฉืืื Kubernetes:
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
ืืืื ื ืืฆืืจ ืกืื ื- StorageClass ื ืคืจืืื.
ืฉืื ืืืจ ืืืฉ, ืืืจ ืจืืื ื ืืช ืื ืืืืืื ืฉื RBD:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-cephfs-secret
namespace: ceph-csi-cephfs
stringData:
# ะะตะพะฑั
ะพะดะธะผะพ ะดะปั ะดะธะฝะฐะผะธัะตัะบะธ ัะพะทะดะฐะฒะฐะตะผัั
ัะพะผะพะฒ
adminID: fs
adminKey: <ะฒัะฒะพะด ะฟัะตะดัะดััะตะน ะบะพะผะฐะฝะดั>
ืืืฉืื ืืื ืืคืกื:
kubectl apply -f secret.yaml
ืืขืืฉืื - 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
ืืื ื ืืื ืืช ืื ืืื ืืืื ืืฉืืื ืืืฉืื ื-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 ืขื ืฆืืืช Ceph ืืื ืืชืืืื ืจืง ืืืืจืืช ืืืืื, ืืื ืื ืฉืื ืื ื ืขืืฉืื ื-
ืืืืกืืฃ, ืืืื ื ืืืืง ืืื ืืืจืื ืขืืืืื ืขื ืฉืื ืื ืืืื ื ืคืืื ืืืงืจื ืฉื CephFS. ื ืืืืจ ื-Kubernetes ืื ืขืจืื ืืช ืืื ืืคืกื ืฉืื ื ื-PVC - ืืืื ืืช ืืืืื ืฉื, ืืืฉื, ื-7Gi.
ืืื ื ืืื ืืช ืืงืืืฅ ืืขืจืื:
kubectl apply -f pvc.yaml
ืืืื ื ืกืชืื ืขื ืืกืคืจืืื ืืืืชืงื ืช ืืื ืืจืืืช ืืืฆื ืืฉืชื ืชื ืืืืกื:
getfattr -n ceph.quota.max_bytes <ะบะฐัะฐะปะพะณ-ั-ะดะฐะฝะฝัะผะธ>
ืืื ืฉืืคืงืืื ืืื ืชืขืืื, ืืืชืื ืฉืชืฆืืจื ืืืชืงืื ืืช ืืืืืื ืืืขืจืืช ืฉืื attr.
ืืขืื ืืื ืืคืืืืช, ืืื ืืืืืื ืืกืชืืจืืช
ืื ืืืืฉืื ืืืื ืืืืืืื YAML ืืืจืืืื ื ืจืืื ืืกืืืืื ืขื ืคื ื ืืฉืื, ืืื ืืคืืขื, ืชืืืืื Slurm ืืืื ืื ืืืชื ืื ืืืจ.
ืืืืืจ ืื ืื ื ืื ืกื ื ืืขืืืง ืื'ืื ืื - ืืฉ ืชืืขืื ืจืฉืื ืืื. ืื ืืชื ืืขืื ืืื ืืคืจืืื ืฉื ืืืืจืช ืืืกืื Ceph ืขื ืืฉืืื Kubernetes, ืงืืฉืืจืื ืืื ืืขืืจื:
ืืงืืจืก Slurm
ืืื ืืชื ืืชืขื ืืื ืืืชืจ ืืืืกืื ื ืชืื ืื, ืืืจืฉื
ืืืืจ ืืืืืจ: ืืืืกื ืืจ ืฉืืืืืื, ืืื ืืก ืืคืืขื
ืืงืืจ: www.habr.com