使用kuberntes storageclass动态提供ceph rbd存储

概述

1)ceph集群:nautilus版,monitoring为192.168.39.19-21
2)kuberntes集群环境:v1.14.2
3)集成方式:storageclass动态提供存储
4)k8s集群的节点已安装ceph-common包。

1)步骤1:在ceph集群中创建一个用户ceph rbd块的pool和一个普通用户

1ceph osd pool create ceph-demo 16 16 2ceph osd pool application enable ceph-demo rbd 3ceph auth get-or-create client.kubernetes mon 'profile rbd' osd 'profile rbd pool=ceph-demo' mgr 'profile rbd pool=ceph-demo' 4 5

此时ceph集群中存在admin用户和kubernetes用户,如图所示:
在这里插入图片描述

2)步骤2:在k8s中创建存放ceph用户的secret

1#创建secret对象保存ceph admin用户的key 2kubectl create secret generic ceph-admin --type="kubernetes.io/rbd" --from-literal=key=AQAyTvhe+Q/SKBAAP/DtVX154cxmGn7z+P6aGg== --namespace=kube-system 3#创建secret对象保存ceph kubernetes用户的key 4kubectl create secret generic ceph-kubernetes --type="kubernetes.io/rbd" --from-literal=key=AQCR+vpeAt2NIRAAAdaRw6c3LHBWMiS/ws5okw== --namespace=kube-system 5 6

3)步骤3:在k8s中部署csi插件

1git clone https://github.com/kubernetes-incubator/external-storage.git 2cd external-storage/ceph/rbd/deploy 3export NAMESPACE=kube-system 4sed -r -i "s/namespace: [^ ]+/namespace: $NAMESPACE/g" ./rbac/clusterrolebinding.yaml ./rbac/rolebinding.yaml 5kubectl -n $NAMESPACE apply -f ./rbac 6 7

csi插件部署成功,如图所示:
在这里插入图片描述

4)步骤4:在k8s中创建storageclass

1[root@master deploy]# cat storageclass-ceph-rbd.yaml 2kind: StorageClass 3apiVersion: storage.k8s.io/v1 4metadata: 5 name: ceph-rbd 6provisioner: ceph.com/rbd 7parameters: 8 monitors: 192.168.39.19:6789,192.168.39.20:6789,192.168.39.21:6789 9 adminId: admin 10 adminSecretName: ceph-admin 11 adminSecretNamespace: kube-system 12 #userId字段会变成插件创建的pv的spec.rbd.user字段 13 userId: kubernetes 14 userSecretName: ceph-kubernetes 15 userSecretNamespace: kube-system 16 pool: ceph-demo 17 fsType: xfs 18 imageFormat: "2" 19 imageFeatures: "layering" 20 21

步骤5:在k8s中创建指定storageclass的pvc

1[root@master deploy]# cat ceph-rbd-pvc-test.yaml 2kind: PersistentVolumeClaim 3apiVersion: v1 4metadata: 5 name: ceph-rbd-claim 6spec: 7 accessModes: 8 - ReadWriteOnce 9 storageClassName: ceph-rbd 10 resources: 11 requests: 12 storage: 32Mi 13 14

此时查看pvc和pv的详细信息,如图所示:
在这里插入图片描述
在这里插入图片描述

6)步骤6:在k8s中创建指定pvc的pod

1[root@master deploy]# cat ceph-busybox-pod.yaml 2apiVersion: v1 3kind: Pod 4metadata: 5 name: ceph-rbd-busybox 6spec: 7 containers: 8 - name: ceph-busybox 9 image: busybox:1.27 10 command: ["sleep", "60000"] 11 volumeMounts: 12 - name: ceph-vol1 13 mountPath: /usr/share/busybox 14 readOnly: false 15 volumes: 16 - name: ceph-vol1 17 persistentVolumeClaim: 18 claimName: ceph-rbd-claim 19 20

7)步骤7:查看pod的挂载情况以及ceph rbd的信息。

pod正确启动,事件如图所示:
在这里插入图片描述

pod中正确挂载rbd块,进入pod中使用mount命令查看:
在这里插入图片描述
在ceph集群中的ceph-demo pool中存在csi插件创建的rbd块:
在这里插入图片描述在这里插入图片描述

代码交流 2021