openEuler kubesphere kubekey 安装 ceph csi 及使用实例

按照官方文档,很轻松就可以进行安装, 安装过程中遇到一些疑问, 在安装后也得到清晰的理解

1.  /root/ceph-csi-rbd.yaml

这里面的clusterId 按理说应该是ceph的clusterId, 不过官方文档并没有首重强调修改,暂时保持默认

下面6789端口就是我们在物理机上安装的ceph mon的主机ip,端口

csiConfig:
  - clusterID: "e17a4906-5e5f-4935-b9c0-bc6ae4e53b28" # 切记这里是你的ceph集群fsid
    monitors:
      - "192.168.0.14:6789"
      - "192.168.0.15:6789"
      - "192.168.0.16:6789"

切记 clusterID 这里是你的ceph集群fsid, 写错会导致报错

resize volume "pvc-493171e0-fa52-4e8d-9362-869bfd3d162a" by resizer "rbd.csi.ceph.com" failed: rpc error: code = Internal desc = failed to fetch monitor list using clusterID (cluster1): missing configuration for cluster ID "cluster1"

2. ceph-csi-rbd-sc.yaml

注意: kind: VolumeSnapshotClass 这段代码, 是在官方教程基础上增加了, 如果不增加这段代码, 直接使用官方教程, 会创建一个快照类名字也叫:csi-rbd-sc , 但是无法执行快照报错

Failed to check and update snapshot content: failed to take snapshot of the volume 0001-0008-cluster1-0000000000000006-ac9915d6-769e-11ed-b99c-aeae15d7c828: "rpc error: code = Internal desc = provided secret is empty" 

也许应该在 StorageClass Parameter下面增加如下快照使用的密钥配置,这块没有仔细研究, 添加了快照类的定义,将原来的快照类删除掉或不用即可成功创建快照

  csi.storage.k8s.io/snapshotter-secret-name: csi-rbd-secret
  csi.storage.k8s.io/snapshotter-secret-namespace: kube-system

apiVersion: v1
kind: Secret
metadata:
  name: csi-rbd-secret
  namespace: kube-system
stringData:
  userID: admin
  userKey: "AQCyCIhjBE7QCRAALS6vAj4WyaPAj6Y+dac0oQ=="
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: csi-rbd-sc
   annotations:
     storageclass.beta.kubernetes.io/is-default-class: "true"
     storageclass.kubesphere.io/supported-access-modes: '["ReadWriteOnce","ReadOnlyMany","ReadWriteMany"]'
provisioner: rbd.csi.ceph.com
parameters:
   clusterID: "e17a4906-5e5f-4935-b9c0-bc6ae4e53b28"  # 切记这里是你的ceph集群fsid
   pool: "rbd"
   imageFeatures: layering
   csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
   csi.storage.k8s.io/provisioner-secret-namespace: kube-system
   csi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secret
   csi.storage.k8s.io/controller-expand-secret-namespace: kube-system
   csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
   csi.storage.k8s.io/node-stage-secret-namespace: kube-system
   csi.storage.k8s.io/fstype: ext4
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
   - discard
---
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
  name: csi-rbd-snapclass
driver: rbd.csi.ceph.com
parameters:
  # String representing a Ceph cluster to provision storage snapshot from.
  # Should be unique across all Ceph clusters in use for provisioning,
  # cannot be greater than 36 bytes in length, and should remain immutable for
  # the lifetime of the StorageClass in use.
  # Ensure to create an entry in the configmap named ceph-csi-config, based on
  # csi-config-map-sample.yaml, to accompany the string chosen to
  # represent the Ceph cluster in clusterID below
  clusterID: "e17a4906-5e5f-4935-b9c0-bc6ae4e53b28"

  # Prefix to use for naming RBD snapshots.
  # If omitted, defaults to "csi-snap-".
  # snapshotNamePrefix: "foo-bar-"

  csi.storage.k8s.io/snapshotter-secret-name: csi-rbd-secret
  csi.storage.k8s.io/snapshotter-secret-namespace: kube-system
deletionPolicy: Delete

这里面的 userId,userKey可以保持使用adimin,其中 userKey通过ceph节点获取 

cat /etc/ceph/ceph.client.admin.keyring 

我看到网上有些要求需要k8s各个节点配置文件 /etc/ceph/ceph.client.admin.keyring , 感觉不需要吧, 因为这里面已经配置key了, 为什么还需要额外在节点配置呢, 不过我的机器跟k8s机器是重叠的,所以跳过这个步骤的核实了 pool: "rbd" 这里面我使用的默认的rbd池了, 可以自己创建替换 rbd为如下的 kubernetes, 命令如下

a) 创建

ceph osd pool create kubernetes

b) 初始化

rbd pool init kubernetes

ceph osd pool ls detail 

查看详情,默认是开启 application enable rbd 的
autoscale_mode on 也是开启的
pool 7 'kubernetes' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 812 flags hashpspool,selfmanaged_snaps stripe_width 0 application rbd

网上还有创建用户的, 我这里面就全部使用默认的admin, rbd了, 方便,也少一些麻烦

3.  在创建集群时候使用的文件 config-sample.xml 文件中找到 addons:[], 替换成如下内容, 其它部位内容不用修改, 重新创建集群时不会对集群产生影响, 我本来是希望单独仅创建这个插件的,但是没有成功, 还是按原来的文件,仅增加新的插件

addons: 
- name: ceph-csi-rbd
  namespace: kube-system
  sources:
    chart:
      name: ceph-csi-rbd
      repo: https://ceph.github.io/csi-charts
      valuesFile: /root/ceph-csi-rbd.yaml
- name: ceph-csi-rbd-sc
  sources:
    yaml:
      path:
      - /root/ceph-csi-rbd-sc.yaml

4. 创建命令

./kk create cluster -f config-sample.yaml

5. 检查是否存在

kubectl get sc

可以看到如下图, 说明创建成功了

NAME                   PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
csi-rbd-sc (default)   rbd.csi.ceph.com   Delete          Immediate              true                   50m
local (default)        openebs.io/local   Delete          WaitForFirstConsumer   false                  4d22h

进入系统组件发现 ceph-csi-rbd-provisioner,ceph-csi-rbd-nodeplugin 是异常状态,并没有启动启来

openEuler kubesphere kubekey 安装 ceph csi 及使用实例_第1张图片

进入详情看到 ImagePullBackOff 异常, 得到结论应该是image下载遇到问题

openEuler kubesphere kubekey 安装 ceph csi 及使用实例_第2张图片

通过科学上网进行下载相关镜像并导入各个节点

可以选择香港服务器直接下载, 新机器安装docker可以参考如下文档 

centos 7 安装 docker 记录_gs80140的博客-CSDN博客

涉及的docker镜像及处理过程 如下 我会打包统一放到资源里面供大家免费下载哦

docker pull gcr.io/k8s-staging-sig-storage/csi-provisioner:v3.2.1

docker pull registry.k8s.io/sig-storage/csi-resizer:v1.5.0

docker pull registry.k8s.io/sig-storage/csi-snapshotter:v6.0.1

docker pull registry.k8s.io/sig-storage/csi-attacher:v3.5.0

docker pull registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.5.1



docker save -o csi-provisioner-v3.2.1.tar gcr.io/k8s-staging-sig-storage/csi-provisioner:v3.2.1
docker save -o csi-resizer-v1.5.0.tar registry.k8s.io/sig-storage/csi-resizer:v1.5.0
docker save -o csi-snapshotter-v6.0.1.tar registry.k8s.io/sig-storage/csi-snapshotter:v6.0.1
docker save -o csi-attacher-v3.5.0.tar registry.k8s.io/sig-storage/csi-attacher:v3.5.0
docker save -o csi-node-driver-registrar-v2.5.1.tar registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.5.1


下载到本地并上传到目标机器共享目录 /mnt/test, 此目录是mount到同一个块存储
sz *.tar
各节点执行docker导入镜像
docker load --input /mnt/test/csi-provisioner-v3.2.1.tar
docker load --input /mnt/test/csi-resizer-v1.5.0.tar
docker load --input /mnt/test/csi-snapshotter-v6.0.1.tar
docker load --input /mnt/test/csi-attacher-v3.5.0.tar
docker load --input /mnt/test/csi-node-driver-registrar-v2.5.1.tar

然后所有组件启动正常, 其中遇到 ceph-csi-rbd-nodeplugin->liveness-prometheus启动失败的问题, 原因是 8080 端口冲突了, 将 mgr的dashboard端口修改成 18080 即可 (修改 liveness-prometheus 的 8080 端口比较麻烦, 改服务也没有生效)

修改mgr端口

设置成18080, 防止跟其它端口冲突,  使用 80 导致无法访问
ceph config set mgr mgr/dashboard/njoffice04/server_port 18080

重启mgr
systemctl restart ceph-mgr@njoffice04

此时发现卷创建成功

openEuler kubesphere kubekey 安装 ceph csi 及使用实例_第3张图片

rbd ls

显示 

csi-vol-59b08fac-75f8-11ed-b99c-aeae15d7c828

你可能感兴趣的:(openEuler,ceph,docker,容器)