普通网友 2025-11-15 23:45 采纳率: 98.4%
浏览 0
已采纳

ceph-csi驱动安装时RBD镜像创建失败

在部署 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. 根本原因分析:由浅入深

    1. 容器内缺少 rbd 工具:CSI 插件容器未包含 Ceph 客户端二进制,且未正确挂载宿主机的二进制文件。
    2. 宿主机未安装 ceph-common 包:工作节点上未预装 Ceph 客户端工具,导致即使挂载也无法调用。
    3. 配置文件路径不一致:ceph.conf 或密钥环(keyring)未正确挂载至容器内部指定路径。
    4. Ceph 集群连接问题:monitor 地址配置错误、网络不通、认证密钥无效等导致后续操作无法进行。
    5. 存储池不存在或权限不足: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-commonapt-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/keyring
    Kubernetes 配置更新 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 集群主版本保持兼容,避免因协议差异引发隐性故障。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 11月16日
  • 创建了问题 11月15日