5.5 Kubernetes使用Ceph作为Pod存储
1 PV 与 PVC 概述
(1) PersistentVolume(PV) 持久卷
较高,所以企业一般使用动态供给。
(2) PersistentVolumeClaim(PVC)持久卷申请
让用户不需要关心具体的Volume实现细节,只需要定义PVC需要多少磁盘容量即可。
(3) PV动态供给工作流程
卷的核心是一个目录,其中可能存有数据,Pod 中的容器可以访问该目录中的数据。
2 ceph-csi 自动供给程序
项目地址: https://github.com/ceph/ceph-csi
3 Pod使用RBD块存储
4) 将 csi-rbdplugin-provisioner.yaml 和 csi-rbdplugin.yaml 中关于 kms 的配置注释掉
(2) 在使用中,还需要根据自己集群环境修改
3) storageclass.yaml 修改集群ID和存储池
(3) 部署
csi [root@k8s-master1 rbd]# ls -l total 36 -rw-rw-r-- 1 root root 331 Jun 18 17:39 csi-config-map.yaml -rw-rw-r-- 1 root root 1711 Jun 18 17:42 csi-nodeplugin-psp.yaml -rw-rw-r-- 1 root root 603 Jun 18 17:41 csi-nodeplugin-rbac.yaml -rw-rw-r-- 1 root root 1337 Jun 18 17:43 csi-provisioner-psp.yaml -rw-rw-r-- 1 root root 2923 Jun 18 17:41 csi-provisioner-rbac.yaml -rw-rw-r-- 1 root root 6876 Jun 18 17:42 csi-rbdplugin-provisioner.yaml -rw-rw-r-- 1 root root 5630 Jun 18 17:42 csi-rbdplugin.yaml 2) 将镜像转存到 docker hub csi-rbdplugin-provisioner.yaml csi-rbdplugin.yaml 3) 增加 secret.yaml 和 storageclass.yaml 文件 [root@k8s-master1 rbd]# cat > secret.yaml << EOF apiVersion: v1 kind: Secret metadata: name: csi-rbd-secret namespace: ceph-csi stringData: userID: admin userKey: AQDwAsxgatvdARAAkf2inKyubNr/IbzgPhJyGg== EOF [root@k8s-master1 rbd]# cat > storageclass.yaml << EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-rbd-sc provisioner: rbd.csi.ceph.com parameters: clusterID: 57026ab3-a596-4c79-a33a-08c37153d462 pool: rbd-k8s imageFeatures: layering csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret csi.storage.k8s.io/provisioner-secret-namespace: ceph-csi csi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secret csi.storage.k8s.io/controller-expand-secret-namespace: ceph-csi csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret csi.storage.k8s.io/node-stage-secret-namespace: ceph-csi csi.storage.k8s.io/fstype: ext4 reclaimPolicy: Delete allowVolumeExpansion: true mountOptions: - discard EOF 4) 将 csi-rbdplugin-provisioner.yaml 和 csi-rbdplugin.yaml 中关于 kms 的配置注释掉 [root@k8s-master1 rbd]# grep kms csi-rbdplugin-provisioner.yaml #- name: ceph-csi-encryption-kms-config # mountPath: /etc/ceph-csi-encryption-kms-config/ #- name: ceph-csi-encryption-kms-config # name: ceph-csi-encryption-kms-config [root@k8s-master1 rbd]# grep kms csi-rbdplugin.yaml #- name: ceph-csi-encryption-kms-config # mountPath: /etc/ceph-csi-encryption-kms-config/ #- name: ceph-csi-encryption-kms-config # name: ceph-csi-encryption-kms-config [root@k8s-master1 rbd]# 5) csi-config-map.yaml 修改连接ceph集群信息 # 修改连接Ceph集群的clusterID和monitors的地址 [root@k8s-master1 rbd]# vim csi-config-map.yaml --- apiVersion: v1 kind: ConfigMap data: config.json: |- [ { "clusterID": "14912382-3d84-4cf2-9fdb-eebab12107d8", "monitors": [ "172.16.1.31:6789", "172.16.1.32:6789", "172.16.1.33:6789" ] } ] metadata: name: ceph-csi-config namespace: ceph-csi 注: 获取ceph集群clusterID的方法为 [root@ceph-deploy ~]# ceph -s | grep id id: 14912382-3d84-4cf2-9fdb-eebab12107d8 6) secret.yaml 修改秘钥 # 修改userKey [root@k8s-master1 rbd]# vim secret.yaml apiVersion: v1 kind: Secret metadata: name: csi-rbd-secret namespace: ceph-csi stringData: userID: admin userKey: AQArL5JhBEiAKRAAymBtomUPKP6M/BSI17oXyg== 注: 获取ceph集群admin密钥的方法为 [root@ceph-deploy ~]# ceph auth list | egrep "admin|key" client.admin key: AQArL5JhBEiAKRAAymBtomUPKP6M/BSI17oXyg== 7) storageclass.yaml 修改集群ID和存储池 # 修改clusterID和pool参数 [root@k8s-master1 rbd]# vim storageclass.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-rbd-sc provisioner: rbd.csi.ceph.com parameters: clusterID: 14912382-3d84-4cf2-9fdb-eebab12107d8 pool: rbd-k8s imageFeatures: layering csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret csi.storage.k8s.io/provisioner-secret-namespace: ceph-csi csi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secret csi.storage.k8s.io/controller-expand-secret-namespace: ceph-csi csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret csi.storage.k8s.io/node-stage-secret-namespace: ceph-csi csi.storage.k8s.io/fstype: ext4 reclaimPolicy: Delete allowVolumeExpansion: true mountOptions: - discard 注: 在ceph集群中创建rbd存储池的方法 [root@ceph-deploy ~]# ceph osd pool create rbd-k8s 64 64 [root@ceph-deploy ~]# ceph osd pool application enable rbd-k8s rbd [root@ceph-deploy ~]# ceph osd pool ls detail [root@ceph-deploy ~]# rbd ls rbd-k8s # 列表中没有创建任何rbd块设备 8) 应用yaml文件 [root@k8s-master1 rbd]# kubectl create namespace ceph-csi # 创建ceph-csi命名空间 [root@k8s-master1 rbd]# ls | xargs -i kubectl apply -f {}