rook基本组件:
rook operator: 是一个简单的容器,具有引导和监视存储集群的功能,供提供最基本的RADOS存储。管理CRD,对象存储,文件系统。
Rook agent: 这些代理是在每个Kubernetes节点上部署的pod。每个代理都配置一个Flexvolume插件,该插件与Kubernetes的卷控制器框架集成在一起。处理节点上所需的所有存储操作,例如附加网络存储设备,安装卷和格式化文件系统。
Discover: 定期节点发现新设备
3.rook实现原理描述:
rook 是基于FelixVolume存储插件机制实现。
4.启动流程
5.rook 控制流
1.rook operator运行,并在每台机器上运行一个rook agent的pod
https://pan.baidu.com/s/1J9o_yqzJ_nGMigxKLEkXOA?pwd=v7bu
2.创建一个pvc,并指定storageclass使用rook.io/block provisionor
3.operator provisionr 的provision()函数被调用,用以在集群中创建block image。此时,Provision阶段已完成,pvc/pv被考虑绑定到一起;
4.当使用pvc的pod被创建时,kubelete将调用 rook Felexxvolume的mount函数,用于使用预定存储;
5. 随后,agent将会按照CRD的描述创建一个volume并attach到该物理机上;
6.agent将volume map到本地机器上,并更新CRD的状态以及设备的路径值(例如/dev/rbd0)
7.控制权接着转交给driver,如果mapping能够成功执行,则driver将把指定的设备mount到指定的路径上。若在配置文件中还指明了文件系统的类型,则driver还会对该卷进行文件系统格式化操作。
8.driver将反馈kubelet Mount()操作已成功
6.创建rook,实验环境可以使用: play-with-k8s
# 说在前面的重点,删除重建operator,cluster时,要删除/var/lib/rook.
cd cluster/examples/kubernetes/ceph
kubectl create -f operator.yaml
#主要是一些自定义资源对象的定义CRD有:Cluster、Filesystem、ObjectStore、Pool、Volume;还创建了rook的三种组件Operator、Agent、Discover。
kubectl create -f cluster.yaml
#cluster.yaml中主要创建了一个Cluster(ceph集群)自定义资源对象(CR)
#如果出现如下报错,请参考如下
解决方案参考1:
配置operator.yaml,需要和kubelet的--volume-plugin-dir参数中的保持一致
vim operator.yaml
- name: FLEXVOLUME_DIR_PATH
value: "/usr/libexec/kubernetes/kubelet-plugins/volume/exec"
解决方案参考2
exit status 2. rbd: error opening pool 'replicapool': (2) No such file or directory -- 这个报错,我有遇到类似的问题,解决方法:在 rook-operator.yml 里添加
env:
- name: FLEXVOLUME_DIR_