名词介绍
  • Rook:一个自我管理的分布式存储编排系统,它本身不是存储系统,在存储和k8s之间搭建桥梁使存储系统搭建活维护变得很简单。Rook支持CSI,CSI做一些PVC快照、扩容等操作。
  • Operator:主要用于有状态服务,或者用于比较复杂应用的管理
  • Helm:主要用于无状态的服务,配置分离
  • Rook-agent:在每个存储节点上运行,用于配置一个FlexVolume插件,和k8s存储卷进行集成。挂载网络存储、加载存储卷、格式化文件系统。
  • Rook-discover:主要用于检测连接到存储节点上的存储设备。
  • Ceph-OSD:直接连接每一个集群节点的物理磁盘或者是目录,集群的副本数、高可用性和容错性。
  • Ceph-MON:集群监控,所有集群的节点都会向Mon汇报,记录集群的拓扑以及数据存储位置信息。
  • Ceph-MDS:元数据服务器,负责跟踪文件层次结构并存储ceph元数据。
  • Ceph-RGW:Restful API接口
  • Ceph-MGR:提供额外的监控和界面。
安装
# 首先需有挂载未分区使用的硬盘,以及在对应node上安装lvm2,yum install lvm2 -y

$ git clone --single-branch --branch v1.9.6 https://github.com/rook/rook.git
cd rook/deploy/examples
kubectl create -f crds.yaml -f common.yaml -f operator.yaml # 等待几分钟后相关pod起来再创建集群
kubectl create -f cluster.yaml
$ kubectl -n rook-ceph get pod
NAME READY STATUS RESTARTS AGE
csi-cephfsplugin-provisioner-d77bb49c6-n5tgs 5/5 Running 0 140s
csi-cephfsplugin-provisioner-d77bb49c6-v9rvn 5/5 Running 0 140s
csi-cephfsplugin-rthrp 3/3 Running 0 140s
csi-rbdplugin-hbsm7 3/3 Running 0 140s
csi-rbdplugin-provisioner-5b5cd64fd-nvk6c 6/6 Running 0 140s
csi-rbdplugin-provisioner-5b5cd64fd-q7bxl 6/6 Running 0 140s
rook-ceph-crashcollector-minikube-5b57b7c5d4-hfldl 1/1 Running 0 105s
rook-ceph-mgr-a-64cd7cdf54-j8b5p 1/1 Running 0 77s
rook-ceph-mon-a-694bb7987d-fp9w7 1/1 Running 0 105s
rook-ceph-mon-b-856fdd5cb9-5h2qk 1/1 Running 0 94s
rook-ceph-mon-c-57545897fc-j576h 1/1 Running 0 85s
rook-ceph-operator-85f5b946bd-s8grz 1/1 Running 0 92m
rook-ceph-osd-0-6bb747b6c5-lnvb6 1/1 Running 0 23s
rook-ceph-osd-1-7f67f9646d-44p7v 1/1 Running 0 24s
rook-ceph-osd-2-6cd4b776ff-v4d68 1/1 Running 0 25s
rook-ceph-osd-prepare-node1-vx2rz 0/2 Completed 0 60s
rook-ceph-osd-prepare-node2-ab3fd 0/2 Completed 0 60s
rook-ceph-osd-prepare-node3-w4xyz 0/2 Completed 0 60s
  • 部署ceph Toolbox
# 安装toolbox,用来查看ceph状态等
kubectl create -f deploy/examples/toolbox.yaml

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
# 常规命令
ceph status
ceph osd status
ceph df
rados df
PVC快照和扩容
# 开启pvc快照和扩容
vim /etc/kubernetes/kubelet-conf.yml
featuraGates:
EphemeralContainers: true
VolumeSnapshotDataSource: true
ExpandCSIVolumes: true

指定sc为默认
kubectl patch storageclasses.storage.k8s.io ceph -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

[root@master ~]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
ceph (default) rook-ceph.cephfs.csi.ceph.com Delete Immediate true 2m2s

卸载删除
kubectl delete -f cluster.yaml
kubectl delete -f crds.yaml -f common.yaml -f operator.yaml

# 如遇到无法删除的资源
# 查询当前没删除掉的资源列表
[root@master ~]# kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n rook-ceph
NAME DATA AGE
configmap/rook-ceph-mon-endpoints 4 8d
NAME TYPE DATA AGE
secret/rook-ceph-mon kubernetes.io/rook 4 8d
NAME DATADIRHOSTPATH MONCOUNT AGE PHASE MESSAGE HEALTH EXTERNAL
cephcluster.ceph.rook.io/rook-ceph /var/lib/rook 3 8d Deleting Deleting the CephCluster HEALTH_ERR

# 强制删除
[root@master ~]# kubectl -n rook-ceph patch configmap rook-ceph-mon-endpoints --type merge -p '{"metadata":{"finalizers": []}}'
configmap/rook-ceph-mon-endpoints patched
[root@master ~]# kubectl -n rook-ceph patch secrets rook-ceph-mon --type merge -p '{"metadata":{"finalizers": []}}'
secret/rook-ceph-mon patched

# 删除CRD
for CRD in $(kubectl get crd -n rook-ceph | awk '/ceph.rook.io/ {print $1}'); do kubectl get -n rook-ceph "$CRD" -o name | xargs -I {} kubectl patch -n rook-ceph {} --type merge -p '{"metadata":{"finalizers": []}}'; done