云原生:使用Rook安装Ceph

云原生:使用Rook安装Ceph

tk_sky 97 2023-02-14

使用Rook安装Ceph


Ceph是一种开源的分布式存储解决方案;Rook是一个开源的云原生存储编排,可以使得分布式集群更加适应云原生环境。

1. 准备安装环境

为保证集群的高可用,最好至少准备一个三主三从的k8集群。

Ceph安装的前提条件是需要一个空的硬盘(或分区),且无格式化文件系统。所以为每个node节点均挂载一个空磁盘,且不安装任何文件系统。

如果使用minikube安装:

需要先配置好kvm驱动,参考CubeUniverse文档“安装minikube集群”。

使用minikube start -n 5 --driver=kvm2来启动包含五个节点的minikube集群。

接下来使用qemu-img 为四个虚拟节点加上磁盘空间:

 sudo qemu-img create -f qcow2 /var/lib/libvirt/images/minikube-m02.qcow2 20480M -o preallocation=full
 sudo qemu-img create -f qcow2 /var/lib/libvirt/images/minikube-m03.qcow2 20480M -o preallocation=full
 sudo qemu-img create -f qcow2 /var/lib/libvirt/images/minikube-m04.qcow2 20480M -o preallocation=full
 sudo qemu-img create -f qcow2 /var/lib/libvirt/images/minikube-m05.qcow2 20480M -o preallocation=full

这里每个节点留20G空间,可以自由调整。

然后给kvm挂在上刚刚创建的磁盘镜像:

 sudo virsh attach-disk --domain minikube-m02 /var/lib/libvirt/images/minikube-m02.qcow2 --target vdb --persistent --config --live
 sudo virsh attach-disk --domain minikube-m03 /var/lib/libvirt/images/minikube-m03.qcow2 --target vdb --persistent --config --live
 sudo virsh attach-disk --domain minikube-m04 /var/lib/libvirt/images/minikube-m04.qcow2 --target vdb --persistent --config --live
 sudo virsh attach-disk --domain minikube-m05 /var/lib/libvirt/images/minikube-m05.qcow2 --target vdb --persistent --config --live

挂载完成后重启minikube:

 minikube stop && minikube start

2. 安装rook-ceph

在k8s的主节点执行:

 git clone --single-branch --branch v1.6.3 https://github.com/rook/rook.git
 cd rook/cluster/examples/kubernetes/ceph/

由于在部署过程中可能因网络问题导致镜像拉取错误,所以先修改operator.yaml的下述字段:

  ROOK_CSI_REGISTRAR_IMAGE: "registry.cn-beijing.aliyuncs.com/dotbalo/csi-node-driver-registrar:v2.0.1"
  ROOK_CSI_RESIZER_IMAGE: "registry.cn-beijing.aliyuncs.com/dotbalo/csi-resizer:v1.0.1"
  ROOK_CSI_PROVISIONER_IMAGE: "registry.cn-beijing.aliyuncs.com/dotbalo/csi-provisioner:v2.0.4"
  ROOK_CSI_SNAPSHOTTER_IMAGE: "registry.cn-beijing.aliyuncs.com/dotbalo/csi-snapshotter:v4.0.0"
  ROOK_CSI_ATTACHER_IMAGE: "registry.cn-beijing.aliyuncs.com/dotbalo/csi-attacher:v3.0.2"

同时修改cluster.yaml

 image: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/ceph-ceph:v15.2.11

下载接下来在主节点让k8s执行operator完成ceph部署:

 kubectl create -f crds.yaml -f common.yaml -f operator.yaml
 kubectl create -f cluster.yaml

之后rook-ceph的operator就会依次操作自动创建ceph所需要的pod。可能会需要一定时间。

3. 查看安装情况

查看ceph的pod运行情况:

 kubectl -n rook-ceph get pod

预计整个集群的安装过程需要几十分钟,时间受网速和节点配置影响。

当看到osd相关pod成功运行,说明集群已经成功启动:

常见问题

rook-ceph-operator 长时间处于Creating状态

检查k8s基础pod和网络插件是否运行正常,检查各节点ip-forward:

 echo "echo 1 > /proc/sys/net/ipv4/ip_forward" >> /etc/rc.d/rc.local \
 && echo 1 > /proc/sys/net/ipv4/ip_forward \
 && chmod +x /etc/rc.d/rc.local \
 && ll /etc/rc.d/rc.local \
 && cat /proc/sys/net/ipv4/ip_forward

rook-ceph-operator 处于ImagePullBackOff 或 CrashLoop状态

检查docker kubectl是否运行正常;

检查是否给docker分配了国内镜像/检查网络、防火墙;

删除所有防火墙规则:

 iptables -F