5.5 Kubernetes使用Ceph作为Pod存储

ceph-csi版本 kubernetes版本 ceph版本 cephcsi:v3.2.2 v1.20.4 15.2.15 octopus (stable)

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 {}

相关文章:

  • 2021-10-22
  • 2021-11-10
  • 2022-12-23
  • 2021-10-19
  • 2021-10-19
  • 2021-06-24
  • 2021-11-12
  • 2021-04-22
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-12-16
  • 2022-01-12
  • 2021-11-20
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案