K8S—cephfs的使用(ceph-csi)

概述

在应用kubernetes集群的时候,我们通常会使用ceph来为持久卷提供底层存储功能。ceph有两种提供存储的方式——RBD及cephfs。当分别使用它们为pv(Persistent Volumes——持久卷)提供底层存储的时候要注意,RBD本身只支持ReadWriteOnce的访问模式。如果你的k8s集群只有一个节点可以使用它,在多个节点的k8s集群中,RBD是不可用的,这个时候只能使用cephfs来作为底层存储。

安装条件

集群及软件版本

  • kubernetes集群 版本v1.23.8,四个节点(k8s1、k8s2、k8s3、k8s4)
  • ceph集群 版本v15.2.17 octopus (stable)
  • ceph-csi 版本v3.6.2

注意,上述的版本是通过测试的,如果你需要更换kubernetes或ceph版本,那么ceph-csi的版本也需要进行变更。具体支持列表可以查看官方首页。

cephfs的创建

在使用ceph-csi的时候,我们需要先在ceph集群中创建好文件系统(Filesystems),创建方式如下:

ceph osd pool create k8s-cephfs-pools 64
ceph osd pool create k8s-cephfs-metadata 64
ceph osd pool ls
  k8s-cephfs-pools
  k8s-cephfs-metadata


#如果你的ceph集群中已经存在其他的文件系统,需要设置集群支持多文件系统
ceph fs flag set enable_multiple true
#创建一个名为k8s-cephfs的文件系统
ceph fs new k8s-cephfs k8s-cephfs-metadata k8s-cephfs-pools
ceph fs ls
  name: k8s-cephfs, metadata pool: k8s-cephfs-metadata, data pools: [k8s-cephfs-pools ]

查看集群相关信息

1、fsid(ceph-csi中称为ClusterID)

ceph fsid

2、获取用户的密钥

本实例由于是内部测试环境,直接使用admin用户进行管理。

ceph auth get-key client.admin

配置ceph-csi

1、拷贝插件配置文件

在github中下载ceph-csi-3.6.2.tar.gz文件,解压后拷贝出需要用到的配置文件到指定目录。

tar zxvf ceph-csi-3.6.2.tar.gz

mkdir cephfs-csi
cp ceph-csi-3.6.2/deploy/cephfs/kubernetes/* ./

其目录结构如下:

2、修改csi-config-map.yaml配置文件

---
apiVersion: v1
kind: ConfigMap
data:
  config.json: |-
    [
      {
        "clusterID": "64406cb4-75fd-11ed-a77b-bff23c982581",
        "monitors": [
          "192.168.3.51:6789",
          "192.168.3.52:6789",
          "192.168.3.53:6789"
        ]
      }
    ]
metadata:
  name: ceph-csi-config
  • clusterID:上面操作中获取到的fsid
  • monitors:ceph集群中的所有mon节点的ip地址及端口号

3、添加文件:ceph-config-map.yaml

---
apiVersion: v1
kind: ConfigMap
data:
  ceph.conf: |
    [global]
    auth_cluster_required = cephx
    auth_service_required = cephx
    auth_client_required = cephx

    fuse_set_user_groups = false
    fuse_big_writes = true

    fsid = 64406cb4-75fd-11ed-a77b-bff23c982581
    mon_host = 192.168.3.51,192.168.3.52,192.168.3.53

  keyring: |
metadata:
  name: ceph-config
  • fsid:上面操作获取的fsid
  • mon_host:ceph集群的所有mon节点的ip地址

4、添加csi-secret.yaml文件

---
apiVersion: v1
kind: Secret
metadata:
  name: csi-cephfs-secret
  namespace: default
stringData:
  userID: admin
  userKey: AQA7O5Bjoyy6KRAAIZOKOmiHPY8RwNHRNW2e0Q==

  adminID: admin
  adminKey: AQA7O5Bjoyy6KRAAIZOKOmiHPY8RwNHRNW2e0Q==
  • userID:ceph下的用户
  • userKey:用户对应的key

5、创建storageclass的配置文件(sc-csi-cephfs.yaml)

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: csi-cephfs-sc
provisioner: cephfs.csi.ceph.com
parameters:
   clusterID: 64406cb4-75fd-11ed-a77b-bff23c982581
   fsName: k8s-cephfs
   csi.storage.k8s.io/provisioner-secret-name: csi-cephfs-secret
   csi.storage.k8s.io/provisioner-secret-namespace: default
   csi.storage.k8s.io/controller-expand-secret-name: csi-cephfs-secret
   csi.storage.k8s.io/controller-expand-secret-namespace: default
   csi.storage.k8s.io/node-stage-secret-name: csi-cephfs-secret
   csi.storage.k8s.io/node-stage-secret-namespace: default
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
   - discard
  • clusterID:上面操作中获取的fsid
  • fsName:上面操作中创建的cephfs文件系统的名称
  • csi-cephfs-secret:csi-secret.yaml文件中配置的secret名称

6、创建pvc(pvc-test.yaml)

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cephfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  storageClassName: csi-cephfs-sc
  • storageClassName:storageclass的名称

7、创建并测试

cd cephfs
kubectl create -f .

注意:首次创建的过程中,由于需要拉取镜像,过程会很慢。pvc会在sc创建之前完成,导致pvc创建的过程中报找不到storageclass的错误,需要手动删除pvc后再单独创建一次pv即可。

kubectl delete -f pvc-test.yaml
kubectl create -f pvc-test.yaml
kubectl get pv

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注