ceph csi的安装使用

首要条件

  • 你得先有一个Ceph存储,单节点安装Ceph
  • ceph版本信息
    # ceph version
    ceph version 10.2.11 (e4b061b47f07f583c92a050d9e84b1813a35671e)
    

参考

ceph官方文档

ceph集群上的操作

pool

  • 创建pool
    ceph osd pool create kubernetes
    
  • 初始化pool
    rbd pool init kubernetes
    
  • 检查

    应该看到kubernetes这个pool

    root@ceph:~# ceph osd lspools
    1 device_health_metrics
    4 pool-01
    5 cephfs_data
    6 cephfs_metadata
    7 kubernetes
    

用户

  • 在Ceph上创建用于CSI的用户
    $ ceph auth get-or-create client.kubernetes mon 'profile rbd' osd 'profile rbd pool=kubernetes' mgr 'profile rbd pool=kubernetes'
    [client.kubernetes]
        key = AQD9o0Fd6hQRChAAt7fMaSZXduT3NWEqylNpmg==
    
  • 发生错误,可能是我用的Ceph版本的原因:
    # ceph auth get-or-create client.kubernetes-for-csi mon 'profile rbd' osd 'profile rbd pool=kubernetes' mgr 'profile rbd pool=kubernetes'
    Error EINVAL: moncap parse failed, stopped at 'profile rbd' of 'profile rbd'
    
  • 更正为如下的语句,参考設定 StorageClass (以 Ceph RBD 為例)
    ceph auth get-or-create client.kubernetes mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=kubernetes' -o ceph.client.kubernetes.keyring
    
  • 检查创建的用户并获取
    root@ceph:~# ceph auth get client.kubernetes
    [client.kubernetes]
    key = AQDG6dVg8pfmGRAA2vPkmr3sesTo+2PVrfcN+A==
    caps mon = "allow r"
    caps osd = "allow class-read object_prefix rbd_children, allow rwx pool=kubernetes"
    exported keyring for client.kubernetes
    

获取Ceph信息

# ceph mon dump
dumped monmap epoch 1
epoch 1
fsid 63d60969-7dd4-46f4-bada-de9a2ded0e10
last_changed 2021-05-18 15:46:41.007169
created 2021-05-18 15:46:41.007169
0: 192.168.11.231:6789/0 mon.zmysql231

在K8s集群上的操作

创建新的namespace

接下来的所有操作都在这个namesapce里进行

kubectl create namespace csi-ceph

生成secret

  • userID: 就是在ceph集群上创建的用户名
  • userKey: 就是在ceph集群上创建的用户的key
  • kubectl apply -f csi-rbd-secret.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: csi-rbd-secret
      namespace: default
    stringData:
      userID: kubernetes
      userKey: AQDG6dVg8pfmGRAA2vPkmr3sesTo+2PVrfcN+A== # 这里填入原始值就ok,不用base64转换
    

生成Ceph-CSI的ConfigMap

  • ceph集群上的操作.获取Ceph信息fsid后面的那块换成下面的clusterID
  • ceph集群上的操作.获取Ceph信息mon.xxx前面的ip地址和端口替换为下面的montiors里面的东西
  • kubectl apply -f csi-config-map.yaml
    ---
    apiVersion: v1
    kind: ConfigMap
    data:
      config.json: |-
        [
          {
            "clusterID": "63d60969-7dd4-46f4-bada-de9a2ded0e10",
            "monitors": ["192.168.11.231:678"] # 这里如果是单个的话,写成一行,不要多行
          }
        ]
    metadata:
      name: ceph-csi-config
      namespace: csi-ceph
    

生成KMS

这个里面没啥数据,可以参看官方文档

  • k apply -f csi-kms-config-map.yaml
    apiVersion: v1
    kind: ConfigMap
    data:
      config.json: |-
        {}
    metadata:
      name: ceph-csi-encryption-kms-config
    

配置plugin

RBAC

在附件的压缩包的rbac目录里已经有这2个文件了,直接执行就可以了

kubectl apply -f https://raw.githubusercontent.com/ceph/ceph-csi/master/deploy/rbd/kubernetes/csi-provisioner-rbac.yaml

kubectl apply -f https://raw.githubusercontent.com/ceph/ceph-csi/master/deploy/rbd/kubernetes/csi-nodeplugin-rbac.yaml
provisioner and node plugins

在附件的压缩包的rbdplugin目录里已经有这2个文件了,直接执行就可以了

wget https://raw.githubusercontent.com/ceph/ceph-csi/master/deploy/rbd/kubernetes/csi-rbdplugin-provisioner.yaml

kubectl apply -f csi-rbdplugin-provisioner.yaml

wget https://raw.githubusercontent.com/ceph/ceph-csi/master/deploy/rbd/kubernetes/csi-rbdplugin.yaml

kubectl apply -f csi-rbdplugin.yaml
  • 事先下载要用到的镜像,上传到自己的私有仓库并在这两个文件里替换地址(附件里的文件已经替换c成国内可以访问的镜像源了)
    • csi-rbdplugin-provisioner.yaml里涉及镜像:
      • csi-attacher:v3.0.2
      • csi-resizer:v1.0.1
      • csi-snapshotter:v4.0.0
      • csi-provisioner:v2.0.4
      • cephcsi:canary
    • csi-rbdplugin.yaml 里涉及镜像:
      • csi-node-driver-registrar:v2.0.1
  • 如果遇到资源不够,可以把csi-rbdplugin-provisioner.yaml里的replicas改为1
  • 创建出来的po
    root@k8s-master:~/ceph-csi# kubectl get po -n csi-ceph
    NAME                                        READY   STATUS    RESTARTS   AGE
    csi-rbdplugin-kbfl8                         3/3     Running   0          5m42s
    csi-rbdplugin-provisioner-77477bc9b-zgh8m   7/7     Running   0          5m50s
    

创建sc

上一步的po都ok了,才进行这一步

  • kubectl apply -f csi-rbd-sc.yaml
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
       name: csi-rbd-sc
       namespace: csi-ceph
    provisioner: rbd.csi.ceph.com
    parameters:
       clusterID: 8f6553be-c686-11eb-bb57-000c29e37ba8
       pool: kubernetes
       imageFeatures: layering
       csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
       csi.storage.k8s.io/provisioner-secret-namespace: csi-ceph
       csi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secret
       csi.storage.k8s.io/controller-expand-secret-namespace: csi-ceph
       csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
       csi.storage.k8s.io/node-stage-secret-namespace: csi-ceph
    reclaimPolicy: Delete
    allowVolumeExpansion: true
    mountOptions:
       - discard
    
  • 检查
    root@k8s-master:~/ceph-csi# kubectl get sc -n csi-ceph
    NAME         PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    csi-rbd-sc   rbd.csi.ceph.com   Delete          Immediate           true                   21s
    

测试

创建pvc
  • 对应的文件在附件的test/raw-block-pvc.yaml
  • 注意:
    • volumeModeBlock,下面pod的就是volumeDevices
    • volumeModeFilesystem,那么下面pod就是我们常见的volumeMount
  • kubectl apply -f raw-block-pvc.yaml
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: raw-block-pvc
      namespace: csi-ceph
    spec:
      accessModes:
        - ReadWriteOnce
      volumeMode: Block # 注意这里Block与下面pod的volumeDevices是对应的
      # volumeMode: Filesystem
      resources:
        requests:
          storage: 1Gi
      storageClassName: csi-rbd-sc
    
  • 错误,检查前面的用户和secret
    在这里插入图片描述
  • 成功的pvc,注意:STATUSBound
    root@k8s-master:~/ceph-csi/test# kubectl get pvc -n csi-ceph
    NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    raw-block-pvc   Bound    pvc-2f6d5c0f-d073-4b7b-99e1-95b962ee4e14   1Gi        RWO            csi-rbd-sc     12s
    
  • 检查pv
    root@k8s-master:~/ceph-csi/test# kubectl get pv -n csi-ceph
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS   REASON   AGE
    pvc-2f6d5c0f-d073-4b7b-99e1-95b962ee4e14   1Gi        RWO            Delete           Bound    csi-ceph/raw-block-pvc   csi-rbd-sc              8m21s
    
创建pod
  • 对应的文件在附件的test/raw-block-pod.yaml
  • kubectl apply -f raw-block-pod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-with-raw-block-volume
      namespace: csi-ceph
    spec:
      containers:
        - name: fc-container
          image: fedora:26
          command: ["/bin/sh", "-c"]
          args: ["tail -f /dev/null"]
          #volumeDevices:   # 与上面的volumeMode: Filesystem对应
          #  - name: data
          #    devicePath: /dev/xvda
          volumeDevices:
            - name: data
              devicePath: /dev/xvda
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: raw-block-pvc
    
  • 检查

    前2个pod是配置plugin这一步生成的,最后一个pod才是这次生成的

    root@k8s-master:~/ceph-csi/test# kubectl get po -n csi-ceph
    NAME                                        READY   STATUS    RESTARTS   AGE
    csi-rbdplugin-kbfl8                         3/3     Running   0          29m
    csi-rbdplugin-provisioner-77477bc9b-zgh8m   7/7     Running   0          29m
    pod-with-raw-block-volume                   1/1     Running   0          2m43s
    

用到的附件

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值