专栏首页容器计算Rook Operator 源码分析(1) - osd 启动的流程
原创

Rook Operator 源码分析(1) - osd 启动的流程

阅读本文可能需要有手动部署 Ceph 集群的经验。

Rook 本身很复杂,包含很多 Controller,而 Rook 的复杂不仅体现在这里,并且 Ceph 也非常复杂,在部署和运维上有很多需要注意的地方。本文主要剖析 Rook 启动 osd 的流程,如果有部署过 Ceph 的经验,应该知道加入 osd 大概有两个步骤,1是先 prepare,也就是检查节点上的一些设备是否符合安装 osd,2是激活,也就是 activate。这个过程在 Rook 里也同样需要。

下面是部署完毕后的 Operator 和 osd 相关的 pod 的情况,测试条件下,部署了 3 个 osd,每个节点有 11 块盘。

# kubectl get pod -n rook-ceph
NAME                                                      READY   STATUS             RESTARTS   AGE
rook-ceph-operator-7658565d97-ptw5n                       1/1     Running            0          20h
rook-ceph-osd-0-78b77dc8d7-xbxhz                          1/1     Running            0          20h
rook-ceph-osd-1-b59bcd696-pz9ml                           1/1     Running            0          20h
rook-ceph-osd-10-5df9b68f95-lfpnd                         1/1     Running            0          20h
rook-ceph-osd-11-5cf6b4bcc5-9cllt                         1/1     Running            0          20h
rook-ceph-osd-12-f9f8cb486-4sdts                          1/1     Running            0          20h
rook-ceph-osd-13-778bdd8db8-qn6t8                         1/1     Running            0          20h
rook-ceph-osd-14-86bc4cd79f-svv92                         1/1     Running            0          20h
rook-ceph-osd-15-bd699f59d-txmbx                          1/1     Running            0          20h
rook-ceph-osd-16-c68c76f8f-bgl7l                          1/1     Running            0          20h
rook-ceph-osd-17-544f7bcf47-xq7dn                         1/1     Running            0          20h
rook-ceph-osd-18-6f75c97cdd-lw8xl                         1/1     Running            0          20h
rook-ceph-osd-19-99f8f8c6f-7drdz                          1/1     Running            0          20h
rook-ceph-osd-2-864c77cc6f-zctcr                          1/1     Running            0          20h
rook-ceph-osd-20-7b76984897-g29zj                         1/1     Running            0          20h
rook-ceph-osd-21-545fd69888-sbfhl                         1/1     Running            0          20h
rook-ceph-osd-22-579897959d-5bff6                         1/1     Running            0          20h
rook-ceph-osd-23-57555ffd8d-2jhwt                         1/1     Running            0          20h
rook-ceph-osd-24-74457df8fd-vrbnt                         1/1     Running            0          20h
rook-ceph-osd-25-799f5bc7d5-sdktc                         1/1     Running            0          20h
rook-ceph-osd-26-5c7fb9dc6c-8vrg9                         1/1     Running            0          20h
rook-ceph-osd-27-74ff56f958-ndjlx                         1/1     Running            0          20h
rook-ceph-osd-28-564dc76999-fzf28                         1/1     Running            0          20h
rook-ceph-osd-29-56dd458d4c-76hm6                         1/1     Running            0          20h
rook-ceph-osd-3-74d7b78fdf-jxll6                          1/1     Running            0          20h
rook-ceph-osd-30-86bf9b4b86-9bxlg                         1/1     Running            0          20h
rook-ceph-osd-31-cb6f96589-29pkb                          1/1     Running            0          20h
rook-ceph-osd-32-6687876667-6zt6g                         1/1     Running            0          20h
rook-ceph-osd-4-c7766fb54-lfcbp                           1/1     Running            0          20h
rook-ceph-osd-5-79f8c8f87c-pk85b                          1/1     Running            0          20h
rook-ceph-osd-6-88cb5ffd7-h59cl                           1/1     Running            0          20h
rook-ceph-osd-7-65697c96-xcgtt                            1/1     Running            0          20h
rook-ceph-osd-8-868475d68b-vk5sl                          1/1     Running            0          20h
rook-ceph-osd-9-5bf449b4c9-75qwc                          1/1     Running            0          20h
rook-ceph-osd-prepare-9.51.1.105-xp2cn                    0/1     Completed          0          152m
rook-ceph-osd-prepare-9.51.1.107-4lgqx                    0/1     Completed          0          152m
rook-ceph-osd-prepare-9.51.2.164-hqj2f                    0/1     Completed          0          152m
rook-discover-7m26q                                       1/1     Running            0          20h
rook-discover-cxcbw                                       1/1     Running            0          20h
rook-discover-slncz                                       1/1     Running            0          20h

Rook 代码结构是比较清晰的,关于 osd 的代码可以从 pkg/operator/ceph/cluster/osd 找到。

现在都用ceph-volume来安装ceph集群了,ceph-deploy已经不维护了。不用ceph-volume就用ceph本来的命令。

由于有一个 osd prepare 的过程,在 Rook 里是通过 init-container 来运行一个脚本来实现的。

关于手动部署,一定要看看 ceph 的官方文档

只有当状态为 completed 的时候才会真正的去启动 osd。

osd 的部署就是通过 lsblkudevadm 这些命令来做检查的,下面的命令即使 Rook 里用到的命令,在节点上执行一次看看结果,Rook 会根据一些条件来筛选合适的设备来启动 osd。

lsblk --all --noheadings --list --output KNAME
lsblk /dev/sdc --bytes --nodeps --pairs --paths --output SIZE,ROTA,TYPE,PKNAME,NAME,KNAME
udevadm info --query=property /dev/sdc

通过下面的命令,我们在 osd 的节点上运行一下,ceph-volume 是用 python 写的,基本上就是通过一些磁盘、设备等命令来检查节点上的设备。如果 osd prepare 之后没有启动真正的 osd pod 的话,就需要查一下 osd prepare pod 的日志了,或者看一下 local-device 开头的 ConfigMap,里面会有执行 ceph-volume 的结果,下图的结果明显就是设备因为某些原因被拒绝了,具体尅看 rejected_resons 的结果。

ceph-volume inventory --format json

上面的代码走读比较麻烦,跳转来跳转去,下面是我画的一个图,可以参考这个图来理解 Rook 是如何启动 osd 的。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Ceph RGW】radosgw_usage_exporter监控用户使用量

    Ceph Mgr Prometheus 的模块没有提供用户数据使用量的指标,而在 Ceph 日常运维中,我们希望知道哪个用户用了多少存储容量,或者距离 Quot...

    runzhliu
  • 【Ceph】Rook 中使用 External Cluster 的方式管理外部集群

    现网有好几个 Luminous 的集群,因为指导 Rook 可以用来管理外部集群,所以想尝试一下。外部集群的概念是指,通过部署 Rook,来管理部署在其他集群或...

    runzhliu
  • 【Ceph RGW】Bucket Sharding的设置

    Ceph RGW 会把 bucket 的索引数据存在 index_pool 里,这个索引池,默认叫做 .rgw.buckets.index,如果一个桶有很多对象...

    runzhliu
  • 厚土Go学习笔记 | 31. 错误 通常函数会返回一个error值来判断是否出错

    go程序使用 error 值来表示错误判断。通常函数会返回一个 error 值,我们用来判断程序运行是否出错。所以在 go 程序中,你总是能见到很多 if er...

    李海彬
  • 面试小知识:MySQL索引相关

    如果我们要进行模糊查找,查找name 以“张"开头的所有人的ID,即 sql 语句为

    帅地
  • 为什么 POSTGRESQL 给部分人一种,叫好不叫座的感觉

    最近看到有人说这样一个话题,postgresql 流行不起来,别学,还是某数据库有发展前途,换数据库不如自己加入到开发数据库的行列,改变那个数据库,不就行了。

    AustinDatabases
  • Hbase完全分布式集群搭建

    CoderJed
  • 2019年需要关注的区块链智能合约开发平台

    智能合约开发语言已经被Solidity统治了一段时间,它用于开发可以在以太坊虚拟机EVM上运行的智能合约。不过Solidity有一些严重的问题,包括算术溢出、类...

    用户1408045
  • hibernate for循环执行添加操作出错问题

    hibernate插入对象的时候,对于id唯一,数据库设置为自增的时候执行完操作后会将id赋予该对象

    陈灬大灬海
  • python开发ftp服务器

    七夜安全博客

扫码关注云+社区

领取腾讯云代金券