在部署 Ceph CSI 驱动时,常见问题为 RBD 镜像创建失败,表现为 Kubernetes 持久卷(PV)处于 Pending 状态,日志提示“failed to create rbd image: executable file not found”。该问题通常源于 CSI 插件容器内未正确安装 `rbd` 命令工具,或宿主机 Ceph 客户端配置缺失。即使 ceph-csi 依赖于宿主机的 Ceph 配置和二进制工具,若未在节点上预装 ceph-common 包或未挂载必要的二进制文件,将导致镜像创建调用失败。此外,Ceph monitor 地址配置错误、认证密钥无效或存储池不存在也会触发同类错误。需确保所有工作节点已正确配置 Ceph 客户端环境,并在 CSI DaemonSet 中正确挂载相关二进制与配置文件。
1条回答 默认 最新
蔡恩泽 2025-11-15 23:51关注1. 问题现象与初步定位
在部署 Ceph CSI 驱动时,最常见的问题是 RBD 镜像创建失败,表现为 Kubernetes 持久卷(PV)长期处于
Pending状态。通过查看 PVC 的事件日志或 CSI 插件 Pod 的日志,通常会发现如下错误信息:failed to create rbd image: executable file not found该提示明确指出,在执行
rbd create命令时,系统无法找到可执行文件。虽然 ceph-csi 组件运行在容器中,但其底层依赖宿主机的 Ceph 客户端工具链(如rbd,rados等),因此问题往往出在容器与宿主机之间的二进制调用链断裂。2. 根本原因分析:由浅入深
- 容器内缺少 rbd 工具:CSI 插件容器未包含 Ceph 客户端二进制,且未正确挂载宿主机的二进制文件。
- 宿主机未安装 ceph-common 包:工作节点上未预装 Ceph 客户端工具,导致即使挂载也无法调用。
- 配置文件路径不一致:ceph.conf 或密钥环(keyring)未正确挂载至容器内部指定路径。
- Ceph 集群连接问题:monitor 地址配置错误、网络不通、认证密钥无效等导致后续操作无法进行。
- 存储池不存在或权限不足:RBD 镜像需写入特定存储池,若池不存在或用户无权限,则创建失败。
3. 排查流程图
graph TD A[RBD镜像创建失败] --> B{检查CSI容器日志} B --> C[是否提示'executable file not found'?] C -->|是| D[检查rbd命令是否存在] C -->|否| E[检查Ceph连接与认证] D --> F[进入CSI插件容器执行:rbd --version] F --> G[命令存在?] G -->|否| H[确认宿主机是否安装ceph-common] G -->|是| I[检查挂载路径是否正确] H --> J[在所有worker节点安装ceph-common] I --> K[验证ceph.conf和keyring挂载] K --> L[测试rbd list -m mon-ip -k keyring]4. 解决方案与最佳实践
问题层级 具体措施 实施方式 宿主机环境 安装 ceph-common 软件包 yum install -y ceph-common或apt-get install -y ceph-common容器挂载 挂载宿主机二进制目录 在 DaemonSet 中添加 hostPath 挂载: /usr/bin/rbd → /host/usr/bin/rbd配置管理 确保 ceph.conf 和 keyring 可访问 使用 ConfigMap 和 Secret 挂载至容器内 /etc/ceph/ 网络连通性 验证 Monitor 连接 在节点执行: ping <mon-ip>和nc -zv <mon-ip> 6789权限验证 测试 RBD 命令行操作 rbd create test-image --size 1G --pool=my-pool -m mon-ip -k /etc/ceph/keyringKubernetes 配置 更新 CSI Driver Helm Chart 或 YAML 设置 driver.mountSecurityMode: Restricted并启用 hostPath 挂载5. 关键配置示例代码
以下是一个典型的 CSI 插件 DaemonSet 中关于二进制挂载的片段:
containers: - name: csi-rbdplugin image: quay.io/cephcsi/cephcsi:v3.9.0 volumeMounts: - name: socket-dir mountPath: /var/lib/kubelet/plugins/csi-rbdplugin - name: host-bin mountPath: /host/sbin readOnly: true volumes: - name: host-bin hostPath: path: /usr/sbin type: Directory同时,必须确保所有工作节点已通过自动化脚本或配置管理工具(如 Ansible、SaltStack)统一部署
ceph-common包,并定期校验版本一致性。6. 扩展思考:生产环境中的稳定性保障
在大规模 Kubernetes 集群中,Ceph CSI 的稳定性直接影响有状态应用的可用性。建议采取以下增强措施:
- 建立节点预检机制,在 Node Startup Script 中自动检测 ceph-common 是否安装。
- 使用 Operator 模式管理 Ceph 集群与 CSI 驱动的协同部署。
- 对 CSI 插件 Pod 设置节点亲和性与资源限制,避免关键组件被调度到异常节点。
- 启用 Ceph 的 MGR Prometheus 模块,监控 RBD I/O 与镜像数量变化。
- 实施灰度发布策略,先在小规模节点组验证 CSI 更新后再全量 rollout。
此外,应将 Ceph 客户端工具的版本与后端 Ceph 集群主版本保持兼容,避免因协议差异引发隐性故障。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报