前期准备

对接方式

有两种方式可以使用k8s对接ceph

  • 使用第三方的rbd provisioner,但是由于官方已经不再进行维护因此随着版本越来越高,其对应的rbd provisioner内置的ceph-common版本已经跟不上ceph的版本了,现在其内置的ceph-common版本是m版,如果集群是m版可以考虑使用
  • 使用官方的ceph csi,一直在更新,推荐使用,本文使用的就是该种方法

ceph-csi版本选择

一定要记得k8s的版本与ceph-csi对应!否则会有很多bug

现阶段对应ceph csi与k8s版本对应如下:

在这里插入图片描述

对于ceph集群最好是N版以及更高的版本

选择对应版本之后,仓库版本也要进行选择,比如我此次选择的是3.5.1版本,那么仓库版本需要选择3.5版本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rjrEVAuF-1648912578117)(https://raw.githubusercontent.com/CooperXJ/ImageBed/master/img/20220402225936.png)]

不要git clone代码,我们用到的就是deploy目录下的内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-acWEJW86-1648912578123)(https://raw.githubusercontent.com/CooperXJ/ImageBed/master/img/20220402230052.png)]

镜像源

国内的推荐:

搭建环境(以RBD为例)

  1. ceph-csi/deploy/rbd/kubernetes/下的所有yaml文件拷贝到本地

  2. 创建csi-config-map.yaml

    clusterID就是集群ID,ceph -s即可获得

    ---
    apiVersion: v1
    kind: ConfigMap
    data:
      config.json: |-
        [
          {
            "clusterID": "2a5306a8-885f-40b7-91f6-ec9410b53d3c",
            "monitors": [
              "10.20.20.103:6789",
              "10.20.20.104:6789",
              "10.20.20.105:6789"
            ]
          }
        ]
    metadata:
      name: ceph-csi-config
    
  3. 创建csi-kms-config-map.yaml,也可以不创建,但是需要将csi-rbdplugin-provisioner.yamlcsi-rbdplugin.yaml中kms有关内容注释掉

    ---
    apiVersion: v1
    kind: ConfigMap
    data:
      config.json: |-
        {}
    metadata:
      name: ceph-csi-encryption-kms-config
    
  4. 创建ceph-config-map.yaml

    ceph.conf就是复制ceph集群的配置文件,也就是/ect/ceph/ceph.conf文件中的对应内容

    ---
    apiVersion: v1
    kind: ConfigMap
    data:
      ceph.conf: |
        [global]
        fsid = 2a5306a8-885f-40b7-91f6-ec9410b53d3c
        public_network = 10.20.20.0/24
        mon_initial_members = server103
        mon_host = 10.20.20.103
        auth_cluster_required = cephx
        auth_service_required = cephx
        auth_client_required = cephx
      # keyring is a required key and its value should be empty
      keyring: |
    metadata:
      name: ceph-config
    
  5. 创建csi-rbd-secret.yaml

    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: csi-rbd-secret
      namespace: default
    stringData:
      userID: kubernetes
      userKey: AQA18kdi+4iYHhAAbRmfkKJ/XvB1PdYTTBEdwA== 
      encryptionPassphrase: test_passphrase
    

    其中的userID与userKey通过以下方式获取

    1. 创建存储池

      ceph osd pool create k8s 128 128
      rbd pool init k8s
      
    2. 创建并授权认证用户

      ceph auth get-or-create client.kubernetes mon 'profile rbd' osd 'profile rbd pool=k8s' mgr 'profile rbd pool=k8s'
      

      这里的kubernetes就是userID,对应的key为userKey

    3. apply以上的所有文件

      一共如下:

      • ceph-csi/deploy/rbd/kubernetes/ (github上的文件)
      • csi-config-map.yaml
      • csi-kms-config-map.yaml (可有可无)
      • ceph-config-map.yaml
      • csi-rbd-secret.yaml
    4. 创建storageclass

      ---
      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
         name: csi-rbd-sc
      provisioner: rbd.csi.ceph.com
      parameters:
         clusterID: 2a5306a8-885f-40b7-91f6-ec9410b53d3c
         pool: k8s #之前创建pool的名称
         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
      
    5. 创建pvc

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

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐