超详细的k8s对接ceph RBD存储

24 篇文章 1 订阅

前期准备

对接方式

有两种方式可以使用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
      
  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes (k8s) 是一个容器编排平台,而 Ceph 是一个分布式存储系统。将 k8s 对接 Ceph 可以实现在 k8s 上部署有状态的应用程序,并将其数据存储Ceph 中。 在 k8s 对接 Ceph 的过程中,主要涉及以下几个方面的原理: 1. Ceph RBD 存储卷的使用:k8s 可以使用 Ceph RBD 存储卷作为容器的持久化存储卷。这需要在 k8s 集群中创建 RBD 存储类,然后创建 PVC(Persistent Volume Claim)请求并将其绑定到 RBD 存储类。在容器中使用 PVC 就可以自动挂载 RBD 存储卷。 2. Ceph CSI 插件的使用:k8s 还支持使用 Ceph CSI(Container Storage Interface)插件来使用 Ceph 存储。CSI 插件可以管理 Ceph 存储集群,并提供标准的存储接口供 k8s 使用。通过 CSI 插件,k8s 可以将 Ceph 存储卷作为 PV(Persistent Volume)来使用,并将 PV 与 PVC 进行绑定。 3. Ceph RGW 对象存储的使用:除了使用 Ceph 存储卷,k8s 还可以使用 Ceph RGW(RADOS Gateway)对象存储存储容器数据。RGW 是 Ceph 的一部分,它提供了 S3 和 Swift 接口,可以直接在 k8s 中使用。在 k8s 中使用 RGW 时需要先创建一个 secret 对象,然后在容器中以环境变量或者配置文件的形式引用该 secret 对象,以访问 RGW。 总的来说,k8s 对接 Ceph 主要是通过使用 Ceph 存储卷和 CSI 插件,或者使用 Ceph RGW 对象存储来实现的。这样可以将 k8s 中的有状态应用程序的数据存储Ceph 中,实现高可用和可扩展的存储方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值