普通网友 2025-12-06 10:00 采纳率: 98.3%
浏览 3
已采纳

Ceph 14.2.22 与 CSI 驱动兼容性问题

在使用 Ceph 14.2.22 集群对接 CSI(如 RBD 或 CephFS)驱动时,常见问题是 CSI 插件无法正常创建卷或挂载失败。该问题通常源于 Ceph CSI 版本与 Ceph Pacific/Nautilus 版本不兼容,尤其是 CSI 3.4+ 开始逐步弃用对旧版 Ceph 的支持。此外,Ceph 14.2.22 缺少某些客户端特性标识(如 `krbd` 支持不足),导致内核态挂载失败。同时,CSI 节点插件在调用 `librbd` 时可能因权限、密钥环配置错误或 Monitor 地址变更而连接超时。需确保 CSI 驱动、Kubernetes 版本与 Ceph Luminous/Ceph CSI 兼容矩阵匹配,并启用正确的 Ceph 配置参数(如 `rbd_default_features`)。
  • 写回答

1条回答 默认 最新

  • 希芙Sif 2025-12-06 10:02
    关注

    一、问题背景与现象分析

    在使用 Ceph 14.2.22 集群对接 CSI(如 RBD 或 CephFS)驱动时,常见的故障表现为:CSI 插件无法正常创建持久卷(Persistent Volume),或 Pod 挂载 PVC 时出现 MountVolume.SetUp failed 错误。这类问题往往出现在 Kubernetes 环境中集成外部存储系统的过程中。

    典型日志信息包括:

          E0320 10:15:22.123456   12345 rbd_util.go:978] rbd: create volume failed, err: failed to create rbd image: exit status 1, output: rbd: error adding image feature 'layering': (2) No such file or directory
          Warning  FailedMount  3m10s (x8 over 12m)  kubelet            MountVolume.SetUp failed for volume "pvc-xxxx" : rpc error: code = Internal desc = mount failed: exit status 32
        

    从表象上看是挂载失败,但深层次原因可能涉及版本兼容性、内核模块支持、权限配置等多个层面。

    二、版本兼容性矩阵解析

    Ceph CSI 自 v3.4 开始逐步弃用对 Ceph Luminous 和早期 Nautilus 版本的支持。Ceph 14.2.22 属于 Nautilus 系列末期版本,虽然功能完整,但在某些特性上已落后于现代 CSI 驱动的需求。

    Ceph 版本Ceph CSI 版本Kubernetes 支持版本rbd 命令层兼容性krbd 内核支持情况
    Ceph 14.2.22 (Nautilus)<= v3.3.xv1.17 - v1.21支持 layering需手动启用
    Ceph 15.2.x (Octopus)v3.4+v1.19+默认启用全部特性良好
    Ceph 16.2.x (Pacific)v3.5+v1.20+完全支持推荐使用

    因此,在选择 Ceph CSI 驱动版本时必须严格对照官方发布的 兼容性矩阵

    三、核心特性缺失与解决方案

    Ceph 14.2.22 默认创建的 RBD 镜像不具备完整的特性集,尤其是 krbd 所需的关键特性如 layeringdeep-flattenfast-diff 等未被自动激活,导致内核态挂载失败。

    可通过以下方式检查并修复:

    1. 查看当前镜像特性:
      rbd info replicapool/pvc-xxxx --format json | jq '.features'
    2. 若输出为 1(仅 layering),说明其他特性未开启。
    3. 修改 Ceph 配置文件 ceph.conf,添加:
    [client]
    rbd_default_features = 37  # 启用 layering(1), deep-flatten(32), exclusive-lock(4), object-map(8)
        

    此参数确保新创建的 RBD 镜像具备 CSI 所需的所有基础特性。

    四、身份认证与连接超时排查流程

    CSI 节点插件通过 librbd 访问 Ceph 集群,依赖 Monitor 地址列表和密钥环(keyring)进行认证。常见错误包括:

    • Monitor 地址变更后未同步更新 ConfigMap
    • Secret 中的 admin 密钥编码错误(非 base64 正确编码)
    • 防火墙阻止了 6789 端口通信

    以下是典型的诊断流程图:

    graph TD
        A[Pod挂载失败] --> B{检查kubelet日志}
        B --> C[是否报connect timeout?]
        C -->|Yes| D[验证Monitor地址可达性]
        C -->|No| E[检查RBD镜像是否存在]
        D --> F[使用telnet测试6789端口]
        F --> G[确认ceph-csi-config ConfigMap中mon列表正确]
        E --> H[执行rbd info命令验证权限]
        H --> I[检查K8s Secret中key是否base64解码正确]
        I --> J[使用rbd map测试本地映射]
        J --> K[成功则CSI环境正常]
        

    五、CSI 插件部署优化建议

    针对 Ceph 14.2.22 这类旧版本集群,建议采取如下实践:

    • 锁定使用 Ceph CSI v3.3.0,避免升级到 v3.4+ 引入不兼容变更
    • 在 DaemonSet 中显式设置环境变量:
      CEPH_FSID, MONITOR, ROOK_CEPH_MON_DATA
    • 确保所有节点加载 rbd 内核模块:
      modprobe rbd && echo "rbd" >> /etc/modules-load.d/rbd.conf
    • 启用 udev 规则以正确处理设备映射事件

    此外,可通过 Prometheus + Grafana 监控 CSI 插件的 gRPC 调用延迟与失败率,提前发现潜在问题。

    六、实际案例:某金融客户生产环境故障复盘

    某银行私有云平台在升级 Kubernetes 至 v1.21 后,原有基于 Ceph 14.2.22 的 RBD-CSI 挂载大面积失败。经排查发现:

    问题层级具体表现根本原因
    CSI DriverCreateVolume 成功但 NodeStage 失败krbd 不支持未启用 exclusive-lock 的镜像
    Kerneldmesg 出现 "Invalid feature bit" 警告rbd_default_features 配置缺失
    Network部分节点 connect to mon: timeoutiptables 规则误封 6789 端口

    最终解决方案为:统一配置 rbd_default_features=37,重建设备映射,并调整网络策略。

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

报告相同问题?

问题事件

  • 已采纳回答 12月7日
  • 创建了问题 12月6日