rook简介
Rook是一款云原生环境下的开源分布式存储编排系统,目前支持 Ceph、NFS、Edegefs、Cassandra、CockroachDB等存储系统。它实现了一个自动管理的、自动扩容的、自动修复的分布式存储服务。Rook 支持自动部署、启动、配置、分配、扩容/缩容、升级、迁移、灾难恢复、监控以及资源管理。
Rook依赖底于编排平台kubernetes的operate提供服务。
当前,Rook是CNCF的incubating project项目。
rook部署ceph实例
为了让大家先感受下rook,这里先利用rook来部署一个ceph集群。
应该来说rook的部署还是非常方便容易的,即使不懂ceph的朋友,也可以利用rook为kubernetes快速搭建一个ceph后端存储基座。
// clone rook代码
git clone --single-branch --branch release-1.3 https://github.com/rook/rook.git
cd rook/cluster/examples/kubernetes/cephkubectl create -f common.yaml
kubectl create -f operator.yaml// 该条命令执行前可用"kubectl -n rook-ceph get pod"命令查看""rook-ceph-operator "是否已经是running状态了
kubectl create -f cluster.yaml// 为ceph集群创建一个工具pod,有了该工具pod就可以在该pod里基于该ceoh集群执行ceph相关命令了
kubectl create -f toolbox.yaml
以下便是本次创建成功的所有pod:
usrname@hostname:~$ kubectl get pods -n rook-ceph
NAME READY STATUS RESTARTS AGE
rook-ceph-mgr-a-76c494c8c-mmcb9 1/1 Running 0 47h
rook-ceph-mon-a-59899574c-bph5d 1/1 Running 0 47h
rook-ceph-mon-b-5c8467b4b8-kwzhn 1/1 Running 1 46h
rook-ceph-mon-c-77c9b7987c-s924g 1/1 Running 0 47h
rook-ceph-osd-1-5dcf569f54-s9m2b 1/1 Running 0 46h
rook-ceph-osd-2-69f59fd7db-6nrkl 1/1 Running 0 46h
rook-ceph-osd-3-79d856fbdc-vlrq6 1/1 Running 0 46h
// 工具pod,通过进入工具pod后便可以对该ceph集群执行ceph命令了
rook-ceph-tools-686b8cdf49-56jl9 1/1 Running 1 46hrook-ceph-operator-564464fc86-2j664 1/1 Running 0 47h
rook-ceph-agent-4bzh2 1/1 Running 0 47h
rook-ceph-agent-5gplk 1/1 Running 0 47h
rook-ceph-agent-lx8sl 1/1 Running 1 47h
rook-discover-hdb62 1/1 Running 1 47h
rook-discover-l4n4h 1/1 Running 0 47h
rook-discover-wf47r 1/1 Running 0 47h
通过查看上述pod信息,我们发现ceph中的元素,比如osd,mon以及mgr都是通过pod的形式存在的(更准确来说应该是deployment),每个osd和mon都对应着一个pod。
除了ceph相关的pod,我们发现还有3个agent,3个discover以及1个operate相关pod。这几类pod就是rook的核心,agent和discovery是以daemonset形式部署在所有的存储机上的,operater是rook的大脑,以deployment形式存在。
rook架构
通过上一小节用rook部署ceph,我们知道了rook有3个核心概念,也即operate,discover以及agent。在rook这幅架构图中我们便能发现他们的踪迹。
1)Rook Operator
Rook Operater是rook的大脑,以deployment形式存在
- 其利用k8s的controller-runtime框架实现了CRD,并进而接受k8s创建资源的请求并创建相关资源(集群,pool,块存储服务,文件存储服务等)。
- Rook Operate监控存储守护进程,来确保存储集群的健康。
- 监听Rook Discovers收集到的存储磁盘设备,并创建相应服务(ceph的话就是osd了)。
可以通过修改operate.yaml中的replicas的副本数来保证Operate的高可用(默认为1)。
2)Rook Discover
Rook Discover是以daemonset形式部署在所有的存储机上的,其检测挂接到存储节点上的存储设备。把符合要求的存储设备记录下来,这样Rook Operate感知到以后就可以基于该存储设备创建相应服务了。
3)Rook Agent
Rook Agent是以daemonset形式部署在所有的存储机上的,其处理所有的存储操作,例如挂卸载存储卷以及格式化文件系统等。
最近开始接触到Rook源码相关工作,因为觉得Rook确实挺好用的,所以后面希望能逐步聊聊自己的理解。
接下来应该会从以下几方面展开:
- rook源码分析之2:rook源码目录架构以及框架浅析
- rook源码分析之3:operate源码浅析
- rook源码分析之4:discover源码浅析
- rook源码分析之5:agent源码浅析