【Rook / CSI】可观测:toolbox、kubectl 插件与 CSI / Exporter 指标语义

💡 原文中文,约10900字,阅读约需26分钟。
📝

内容提要

本文介绍Rook/CSI在K8s上编排Ceph的可观测性方法,强调先选观测层再读字段语义。核心是区分K8s API、CSI sidecar、Ceph数据面等层级,指出csi_liveness仅表示插件存活,不保证供给成功;mgr指标绿不代表CSI健康。排障时需结合PVC Events、sidecar直方图、toolbox命令,避免误判,并建议值班仪表盘同时监控租户面、CSI面和RADOS面三类信号。

🔎

延伸解读

观测层选择:先定层,再读指标

文章强调,排障时先确定问题发生在哪一层:K8s API、CSI sidecar、驱动、Rook控制面还是Ceph数据面。不同层有不同的刷新频率和语义,例如PVC Events近实时但可能被截断,而mgr Prometheus指标有十余秒延迟。先选层再读指标,可避免误判,如用集群容量指标去诊断PVC Pending问题。

csi_liveness的局限:存活不等于供给成功

csi_liveness指标仅表示CSI插件进程能被探针访问,并不保证CreateVolume或NodePublish成功。若csi_liveness为1但PVC仍Pending,问题可能出在Ceph配置、网络或Secret,而非驱动死亡。排障时应优先查看sidecar直方图和PVC Events,而非仅依赖liveness指标。

mgr指标与ceph-exporter的分工

mgr Prometheus模块提供集群级指标如健康状态、PG/OSD状态,而ceph-exporter暴露daemon级性能计数器。两者用途不同:mgr适合容量和健康趋势,ceph-exporter适合OSD内部计数器。注意mgr指标为绿色不代表CSI健康,因为mgr不感知StorageClass Secret等配置错误。

值班仪表盘的三类信号

文章建议值班仪表盘至少监控三类信号:租户面(PVC/快照状态)、CSI面(liveness和sidecar操作失败率)、RADOS面(健康状态、nearfull、延迟)。三者不可互相替代,缺一类可能导致误判。例如,仅看RADOS面可能在HEALTH_OK时对PVC Pending束手无策。

Q&A

Rook/CSI 在 Kubernetes 上编排 Ceph 时,可观测性应该从哪些层面入手?

应从五个层面入手:K8s API 层(PVC/PV/VolumeAttachment 状态与 Events)、Sidecar 层(csi-provisioner 等日志与直方图)、CSI 驱动层(csi-rbdplugin 等及 liveness 指标)、Rook 控制面(Operator reconcile、CR 条件)、Ceph 数据面(toolbox、ceph -s 等)。

csi_liveness 指标为 1 是否代表 CSI 供给一定成功?

不代表。csi_liveness 仅表示 CSI 插件进程存活且能被探针访问,不保证 CreateVolume 成功或 NodePublish 能映射设备。若 liveness 为 1 但 PVC Pending,问题可能在 Ceph、配置或网络,而非驱动死亡。

在 Rook 中,如何通过 toolbox 进入 Ceph 命令行?

通过 kubectl 执行:kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash,然后可运行 ceph -s、ceph health detail、ceph osd df tree、ceph pg dump_stuck 等命令。

kubectl rook-ceph 插件相比 toolbox 有什么优势和边界?

优势:无需 exec 进入 toolbox,可直接运行 ceph 子命令,并支持 Operator 重启、OSD purge、debug 模式等操作,适合脚本化值班。边界:仍依赖集群 RBAC 和 mon 可达,且不能解释 MountFailed 等业务问题,需结合其他观测层。

mgr Prometheus 指标和 ceph-exporter 指标有什么区别?

mgr Prometheus module 暴露集群级指标,如 ceph_health_status、PG/OSD 状态、容量等;ceph-exporter 暴露 Ceph daemon 的 performance counters,更接近 perf dump 的长期序列。两者用途不同:mgr 用于集群健康趋势,exporter 用于 OSD 内部计数器趋势。

PVC Pending 时,应该先看哪些观测信号?

先看 PVC Events 和 csi-provisioner 日志或 CreateVolume 直方图,以确定卡在哪一层;再看 toolbox 的 lspools/fs ls 和 mon 连通性,以确认数据面是否健康。

为什么说 csi_liveness 为 1 但 PVC Pending 时,问题不在驱动死亡?

因为 csi_liveness 只反映插件进程存活,不反映供给逻辑。若 liveness 为 1 但 PVC Pending,说明驱动进程活着,但供给失败可能源于 Ceph 配置、Secret 错误、网络问题或存储池不存在等,需进一步检查 sidecar 日志和 Events。

值班时监控仪表盘至少应包含哪三类信号?

至少应包含:租户面(PVC/VolumeSnapshot 非 Bound/ready 计数,按 StorageClass 分组)、CSI 面(csi_liveness 与 CreateVolume/NodeStage 非 OK 比率)、RADOS 面(ceph_health_status、nearfull 相关序列、commit latency)。三类信号不可互相替代。

🏷️

标签

➡️

继续阅读