igozhang

——

    Rook Ceph 故障排查

    面向 Rook 部署的 Ceph 集群常见问题与处理办法。


    1. 新部署 Rook 报 mon 时钟偏移

    现象

    health: HEALTH_WARN
        clock skew detected on mon.b, mon.c
    

    集群健康状态为 HEALTH_WARN,提示 monitor 之间存在 clock skew(时钟偏移)

    原因简述

    Ceph mon 对节点间时间同步较敏感;默认允许的时钟漂移阈值(常见约 0.05 秒)在 Kubernetes / 虚拟化环境中容易触发告警。可适当放宽 mon clock drift allowed,或结合 NTP/chrony 保证节点时间一致。


    解决方法 A:修改 ConfigMap 后重建 mon

    1)编辑 Rook 配置覆盖 ConfigMap

    kubectl -n rook-ceph edit cm rook-config-override
    

    将内容调整为类似(保留原有 metadata 等字段,重点改 data.config):

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: rook-config-override
      namespace: rook-ceph
    data:
      config: |
        [global]
        mon clock drift allowed = 0.5
    

    2)删除 mon Pod,触发重建(通常约 1 分钟内恢复)

    kubectl -n rook-ceph delete pod $(
      kubectl -n rook-ceph get pods -o custom-columns=NAME:.metadata.name --no-headers | grep mon
    )
    

    3)再次查看集群状态

    预期类似:

    cluster:
      id:     f3d157d0-77d5-4648-96d0-6e7e56552767
      health: HEALTH_OK
    

    可用例如:

    kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph -s
    

    说明: 0.5(秒)相对宽松,适合先消除告警;长期仍建议用 chrony/NTP 校准节点时钟,再视情况收紧该值。


    解决方法 B:通过 Dashboard 改 ConfigMap

    在 Dashboard 中编辑对应 ConfigMap(或同等配置入口),[global] 示例:

    [global]
    # 默认 0.05 对本集群过严(单位:秒)
    mon clock drift allowed = 0.1
    
    # K8s image-gc-low-threshold 多为 80%,告警过早意义不大(单位:百分比)
    mon data avail warn = 20
    
    参数 含义
    mon clock drift allowed mon 间允许的最大时钟偏差(秒)
    mon data avail warn mon 数据盘可用空间过低告警阈值(百分比)

    方法 B 将时钟阈值设为 0.1,比方法 A 的 0.5 更保守;可按环境选择。修改后若未自动生效,同样可重建 mon Pod。


    2. 集群全体宕机后 OSD 一直无法 Running

    现象

    • 整集群关机 / 掉电重启后,OSD 始终起不来(Pod 非 Running)
    • 日志或事件类似:
      • OSD pod permissions broken, unable to open OSD superblock after node restart
      • mount 错误

    原因

    加盘时使用了自动发现 / 按当时盘符绑定的方式。节点重启后 磁盘设备名变化(如 /dev/sdb/dev/sdc),原 OSD 找不到正确块设备或 superblock,导致挂载与启动失败。

    解决思路

    在集群 / 节点的磁盘配置中(如 Libvirt 虚拟机 XML、或 Rook CephCluster 的 device 声明里)固定磁盘标识,避免依赖易变的盘符。

    常见做法:

    1. 虚拟机场景: 在 domain XML 中为磁盘指定稳定配置(如固定 target dev、使用 WWN/serialdisk 的稳定地址等),保证重启后对客设备名一致。
    2. Rook 场景: 优先按 by-id / by-path / device name 稳定路径deviceFilter / 显式 devices 列表声明磁盘,避免仅依赖重启后可能漂移的 /dev/sdX
    3. 修复配置并确保盘符(或 ID)与原 OSD 一致后,再删 Pod 重建或按 Rook 文档做 OSD 恢复。

    建议: 生产环境加盘时尽量使用 /dev/disk/by-id/... 等持久设备名,从源头降低重启后 OSD 失效风险。


    速查

    序号 问题 处理要点
    1 clock skew detected on mon.* 放宽 mon clock drift allowed,重建 mon;并做好节点时间同步
    2 宕机后 OSD 无法 Running / mount 失败 重启后盘符变化;用 XML 或 by-id 等方式固定磁盘

    MP3