使用Rook安装Ceph时如何将控制节点作为OSD纳入集群
问题解答
原因说明
你配置了useAllNodes: true但控制节点未被纳入Ceph集群,核心原因是Kubernetes控制节点默认带有node-role.kubernetes.io/control-plane:NoSchedule污点,Rook默认的Pod调度容忍规则不包含该污点,Ceph存储相关Pod无法调度到控制节点,因此控制节点不会被识别为Ceph集群的存储节点。
解决方法
方法1:添加容忍规则(更简便,无需显式罗列所有节点)
直接在CephCluster自定义资源的spec字段下新增控制节点污点的容忍配置,原有storage段配置不需要修改,完整配置示例如下:
apiVersion: ceph.rook.io/v1 kind: CephCluster metadata: name: rook-ceph namespace: rook-ceph spec: # 新增以下容忍配置 tolerations: - key: node-role.kubernetes.io/control-plane operator: Exists effect: NoSchedule # 原有其他配置保持不变 cephVersion: image: quay.io/ceph/ceph:v17.2.6 # ... 其他原有配置 storage: useAllNodes: true useAllDevices: true
配置修改完成后重新apply该资源,Rook Operator会自动识别符合要求的控制节点,将其纳入Ceph集群。
方法2:显式罗列存储节点
如果你只需要将部分控制节点纳入Ceph集群,不需要所有节点都加入,可以选择显式指定节点列表,配置示例如下:
storage: useAllNodes: false useAllDevices: true nodes: - name: k8s-control-01 # 替换为你的控制节点主机名 - name: k8s-control-02 - name: k8s-control-03 - name: k8s-worker-01 # 替换为你的工作节点主机名 - name: k8s-worker-02 - name: k8s-worker-03
注意事项
- 确认纳入Ceph集群的控制节点上,用于Ceph存储的磁盘未挂载、未创建文件系统,避免原有数据被清空
- 如果控制节点之前部署过Ceph,需先清理磁盘上的Ceph残留数据,再更新配置
内容的提问来源于stack exchange,提问作者Andreas Florath
相关产品推荐
相关产品推荐

