K8S—RBD的使用(ceph-csi)

概述

在使用k8s部署服务的时候,绝大多数的时候都是需要使用持久卷的。k8s常常会使用存储类(storageclass)来对物理存储(支持nfs、ceph等)进行抽象。由于k8s的ceph内置驱动与实际的ceph版本之间存在版本差,有的时候会无法部署。因此,推荐使用ceph-csi插件来使k8s支持ceph的RBD。

前提

1、ceph集群

ceph版本号为:ceph version 17.2.5 quincy (stable)

  • mon1:192.168.3.51
  • mon2:192.168.3.52
  • mon3:192.168.3.53

2、k8s集群

kubernetes版本号为:Client Version: version.Info{Major:”1″, Minor:”23″, GitVersion:”v1.23.8″

  • k8s1:192.168.3.31
  • k8s2:192.168.3.32
  • k8s3:192.168.3.33
  • k8s4:192.168.3.34

配置ceph-csi

1、所有的k8s节点都需要安装rbd,即ceph-common

curl --silent --remote-name --location https://github.com/ceph/ceph/raw/quincy/src/cephadm/cephadm
chmod u+x cephadm
./cephadm install
cephadm install ceph-common

2、查询ceph集群的一些相关信息

在配置ceph-csi的过程中,需要ceph集群对应的一些信息,这些信息可以通过在mon的节点上执行相关操作获得。

查看ceph集群id

ceph fsid

ceph用户对应的密钥

由于是测试环境,本人直接使用ceph的管理员账号进行操作,获取admin的密钥:

ceph auth get-key client.admin

3、关于ceph的配置文件

(1)、ceph-config-map.yaml

---
apiVersion: v1
kind: ConfigMap
data:
  ceph.conf: |
    [global]
    fsid = 0fa001fa-7029f-11ed-b8da-d9d44tg323aba5
    mon_host = 192.168.3.51,192.168.3.52,192.168.3.53

  keyring: |
metadata:
  name: ceph-config
  • fsid:上面步骤2中获取的fsid
  • mon_host:所有mon的节点地址或主机名

(2)、csi-rbd-secret.yaml

---
apiVersion: v1
kind: Secret
metadata:
  name: csi-rbd-secret
  namespace: default
stringData:
  userID: admin
  userKey: AQCLOYdjGigUERAA54ffhcu6c7DkZOh88Lqvw==
  • userID:ceph的用户名
  • userKey:上面步骤2中获取的ceph用户的密钥

(3)、csi-config-map.yaml

---
apiVersion: v1
kind: ConfigMap
data:
  config.json: |-
    [
      {
        "clusterID": "0fa001fa-7029f-11ed-b8da-d9d44tg323aba5",
        "monitors": [
          "192.168.3.51:6789",
          "192.168.3.52:6789",
          "192.168.3.53:6789"
        ]
      }
    ]
metadata:
  name: ceph-csi-config
                     
  • clusterID:就是步骤2中的fsid
  • monitors:ceph集群中的mon节点ip及端口号

4、关于ceph-csi插件的配置文件

从github中下载与k8s版本对应的ceph-csi源码包,并将其中的一些部署文件拷贝到相关目录。注意:ceph-csi的版本必须与k8s的版本对应,版本对照表参见ceph-csi项目首页。

https://codeload.github.com/ceph/ceph-csi/zip/refs/tags/v3.7.2

将源码包解压后,将相关的内容拷贝到自己的创建的目录(myceph-csi)中。

cd myceph-csi
cp ceph-csi/ceph-csi-3.7.2/deploy/rbd/kubernetes/csi-rbdplugin.yaml ./
cp ceph-csi/ceph-csi-3.7.2/deploy/rbd/kubernetes/csi-rbdplugin-provisioner.yaml ./
cp ceph-csi/ceph-csi-3.7.2/examples/kms/vault/kms-config.yaml ./

5、k8s存储相关的配置

(1)、storageclass的配置文件(sc-csi-rbd.yaml)

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: csi-rbd-sc
provisioner: rbd.csi.ceph.com
parameters:
   clusterID: 0fa001fa-709f-11ed-b8da-d9d40593aba5
   pool: k8s-pools
   imageFeatures: layering
   csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
   csi.storage.k8s.io/provisioner-secret-namespace: default
   csi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secret
   csi.storage.k8s.io/controller-expand-secret-namespace: default
   csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
   csi.storage.k8s.io/node-stage-secret-namespace: default
   csi.storage.k8s.io/fstype: ext4
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
   - discard

(2)、pvc部署文件(pvc-test.yaml)

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rbd-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: csi-rbd-sc

部署ceph-csi

我们把上面所有的配置文件都存放在目录myceph-csi中,通过ls -l的命令我们查看一下该目录下的文件:

注意:在部署的时候,不要使用【kubectl apply -f .】的命令,因为首次安装rbdplugin需要拉取大量的镜像,会使整个安装过程很慢。如果rbdplugin还没有安装成功,而你的storageclass与pvc操作已经开始创建,那结果就一定是失败。

1、先执行

cd myceph-csi
kubectl create -f csi-rbd-secret.yaml
kubectl create -f ceph-config-map.yaml
kubectl create -f csi-config-map.yaml
kubectl create -f kms-config.yaml
kubectl create -f csi-rbdplugin.yaml
kubectl create -f csi-rbdplugin-provisioner.yaml

然后查看所有的pods,看看与rbdplugin相关的pod是否已经创建成功,创建成功以后再创建storageclass与pvc。

kubectl get pods

2、创建sc与pvc

cd myceph-csi
kubectl create -f sc-csi-rbd.yaml
kubectl create -f pvc-test.yaml

3、查看结果

留下评论

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