超详细的k8s对接ceph RBD存储
前期准备对接方式有两种方式可以使用k8s对接ceph使用第三方的rbd provisioner,但是由于官方已经不再进行维护因此随着版本越来越高,其对应的rbd provisioner内置的ceph-common版本已经跟不上ceph的版本了,现在其内置的ceph-common版本是m版,如果集群是m版可以考虑使用使用官方的ceph csi,一直在更新,推荐使用,本文使用的就是该种方法ceph-c
前期准备
对接方式
有两种方式可以使用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版本
不要git clone代码,我们用到的就是deploy
目录下的内容
镜像源
国内的推荐:
搭建环境(以RBD为例)
-
将
ceph-csi/deploy/rbd/kubernetes/
下的所有yaml文件拷贝到本地 -
创建
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
-
创建
csi-kms-config-map.yaml
,也可以不创建,但是需要将csi-rbdplugin-provisioner.yaml
和csi-rbdplugin.yaml
中kms有关内容注释掉--- apiVersion: v1 kind: ConfigMap data: config.json: |- {} metadata: name: ceph-csi-encryption-kms-config
-
创建
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
-
创建
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通过以下方式获取
-
创建存储池
ceph osd pool create k8s 128 128 rbd pool init k8s
-
创建并授权认证用户
ceph auth get-or-create client.kubernetes mon 'profile rbd' osd 'profile rbd pool=k8s' mgr 'profile rbd pool=k8s'
这里的
kubernetes
就是userID
,对应的key为userKey
-
apply以上的所有文件
一共如下:
ceph-csi/deploy/rbd/kubernetes/
(github上的文件)csi-config-map.yaml
csi-kms-config-map.yaml
(可有可无)ceph-config-map.yaml
csi-rbd-secret.yaml
-
创建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
-
创建pvc
--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: rbd-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: csi-rbd-sc
-
更多推荐
所有评论(0)