news 2026/11/4 6:09:36

Rook 部署前 8 项前置条件自查:从 4 类典型故障倒推 Kubernetes Ceph 部署条件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Rook 部署前 8 项前置条件自查:从 4 类典型故障倒推 Kubernetes Ceph 部署条件

Rook 部署前 8 项前置条件自查:从 4 类典型故障倒推 Kubernetes Ceph 部署条件

【免费下载链接】rookStorage Orchestration for Kubernetes项目地址: https://gitcode.com/gh_mirrors/roo/rook

Rook 是以 Operator 形式在 Kubernetes 上交付 Ceph 存储集群的云原生存储编排器。本文不讲安装步骤,而是从部署之后最容易出现的四类故障场景倒推,逐项列出部署前必须在既有集群上确认好的前置条件:集群版本、节点本地存储设备、lvm2 包、udev 守护进程、内核 rbd 模块、CephFS 内核下限,共 8 项,全部确认后再动手部署。

部署前的第一道门:确认集群版本与节点架构

用 kubectl 核对 Kubernetes 版本是否在 v1.32 到 v1.37 之间

Rook 支持 Kubernetes 版本v1.32 至 v1.37,这个数字在 prerequisites.md 和 quickstart.md 中同时出现。部署前先确认现状:

$ kubectl version --short

版本低于 v1.32 或高于 v1.37 时,建议先升级集群,或核对当前 Rook 版本的官方支持矩阵后再执行部署。

用 kubectl get nodes 确认 CPU 架构是 amd64 还是 arm64

Rook 只支持两种 CPU 架构(见 quickstart.md):

  • amd64 / x86_64
  • arm64
$ kubectl get nodes -o wide

只要镜像仓库提供对应架构的镜像,x86 裸金属、云虚拟机、ARM 边缘节点都能部署。

![Rook 云原生 Ceph 存储架构图中 Operator、CephCluster CR 与 OSD Pod 的协作关系](https://raw.gitcode.com/gh_mirrors/roo/rook/raw/aaf6f2113761bde8021888600f3da093ef5cb298/Documentation/Getting-Started/ceph-storage/Rook High-Level Architecture.png?utm_source=gitcode_repo_files)

集群层的门过了,Operator 就能部署。开篇提到的四类故障都出在节点与内核层,每一类都对应一项前置检查。

故障一:节点重启后 OSD Pod 起不来

哪些场景下 Ceph OSD 依赖 LVM

CephCluster CR 命中以下任一条件时,OSD 就依赖 LVM(注释示例见 cluster.yaml):

  • 启用加密:encryptedDevice: "true"(该选项默认值为"false");
  • 指定了metadata设备(为 OSD 单独配置 WAL/DB 元数据设备);
  • osdsPerDevice大于 1(同一块设备上创建多个 OSD,需 LVM 管理子卷)。

反过来,OSD 直接建在裸设备或裸分区上、或通过storageClassDeviceSets建在 PVC 上时,不需要 LVM,这个故障不会出现。

安装 lvm2,RancherOS 上额外激活逻辑卷

需要 LVM 时,所有将运行 OSD 的主机都必须安装lvm2。部分 Linux 发行版默认不带这个包,而它缺少时的表现是一颗延时炸弹:Rook 仍能正常创建 OSD,但节点重启后,重启节点上的 OSD Pod 会启动失败。⚠️ 这一步跳过,重启后你会在 Pod 里看到 OSD 卷无法被正确激活。

# CentOS $ sudo yum install -y lvm2 # Ubuntu $ sudo apt-get install -y lvm2

RancherOS 自 1.5.0 起支持 LVM,但启动过程中逻辑卷不会被自动激活,需在 cloud-config 的runcmd里手动激活:

runcmd: - [ "vgchange", "-ay" ]

LVM 决定了 OSD 能否扛住重启;下一个检查点发生在应用第一次挂载块卷的时刻。

故障二:RBD 卷挂载失败

用 modprobe rbd 验证内核模块是否可加载

Ceph 要求 Linux 内核编译并加载 RBD 模块。多数发行版自带,但并非全部——GKE 的 Container-Optimised OS(COS)就没有 RBD 模块。在节点上验证:

$ modprobe rbd

提示 rbd 模块 'not found' 时,三条出路:重新编译内核以包含rbd模块、安装更新的内核、或更换 Linux 发行版。

内核 5.4 及以上时在 StorageClass 中启用更多 RBD 特性

默认的 RBD 配置只启用layering特性,为的是兼容较老的内核。若节点运行 5.4 或更高版本的内核,可在 StorageClass 中启用更多特性,其中fast-diff与object-map对快照/克隆和差异计算的性能提升尤其有用:

imageFeatures: layering,fast-diff,object-map,deep-flatten,exclusive-lock

开启前务必确认节点内核版本支持,别只凭文档照抄。

块这边挂载链路通了,共享文件系统那边还有一个内核下限,它不报错,只决定"配额"生不生效。

故障三:CephFS PVC 配额不生效

用 uname -r 确认内核是否达到 4.17

通过 CephFS 创建 RWX 卷时,推荐的最低内核版本是4.17。低于 4.17 时,请求的 PVC 大小不会被强制执行;存储配额只会在更新的内核上生效。这是最容易漏查的一项:集群健康度一切正常,应用却可以无限写超限额。

$ uname -r

这一项只看了版本号;第四类故障发生得更早——OSD 还没建出来,盘就已经被排除了。

故障四:OSD 准备阶段静默跳过磁盘

用 lsblk 判断磁盘能不能给 Ceph 用

节点上至少要有 prerequisites.md 列出的下列一种本地存储:

  • 裸设备:没有分区、没有格式化文件系统的整块磁盘;
  • 裸分区:没有格式化文件系统的磁盘分区;
  • LVM 逻辑卷:未格式化文件系统的逻辑卷;
  • 存储类(StorageClass)提供的block模式持久卷。

quickstart.md 的存储清单还额外提到加密设备与多路径设备。设备是否"干净"看FSTYPE字段:

$ lsblk -f NAME FSTYPE vda └─vda1 LVM2_member ├─ubuntu--vg-root ext4 └─ubuntu--vg-swap_1 swap vdb

FSTYPE非空就说明设备上有文件系统,OSD 准备逻辑会跳过它,避免误格式化已有数据。上例中vdb可用,vda及其分区均不可用。设备选择时 rbd、nbd、drbd、zram 设备也会被跳过。quickstart.md 对此有一句明确的提醒:永远在虚拟机中测试 Rook,绝不要在可能误用本地设备的主机系统上操作。

确认 udev 守护进程在所有存储节点上运行

另一个静默的元凶是 udev。所有存储节点上必须运行 udev 守护进程——Rook 会把宿主机/run/udev挂载进 OSD Pod,ceph-volume依赖 udev 提供的设备信息做设备识别:

$ systemctl status systemd-udevd

大多数发行版默认已运行;没有的话,先安装并启动 udev 再部署。

前四项都是创建前的检查;如果节点是 NixOS,还要多做两处专项配置。

NixOS 专项:内核模块路径与 containerd 限制

把非标准内核模块路径 bind-mount 进 CSI 插件 Pod

NixOS 的内核模块位于非标准路径/run/current-system/kernel-modules/lib/modules/,并符号链接到同样非标准的/nix路径下。容器需要读取这两个位置才能加载所需模块,因此必须把它们作为卷 bind-mount 进 CephFS 与 RBD 插件 Pod。

Helm 安装:在values.yaml中取消注释以下示例配置项——

  • csi.csiCephFSPluginVolume
  • csi.csiCephFSPluginVolumeMount
  • csi.csiRBDPluginVolume
  • csi.csiRBDPluginVolumeMount

非 Helm(裸 manifest)安装:把同样的值写入 operator.yaml 中定义的rook-ceph-operator-configConfigMap——

  • CSI_CEPHFS_PLUGIN_VOLUME
  • CSI_CEPHFS_PLUGIN_VOLUME_MOUNT
  • CSI_RBD_PLUGIN_VOLUME
  • CSI_RBD_PLUGIN_VOLUME_MOUNT

移除 containerd 服务配置中的 LimitNOFILE

NixOS 上使用 containerd 时,建议从 containerd 服务配置中移除LimitNOFILE,以避免 ceph 命令执行缓慢、mon 掉出 quorum 等与文件描述符耗尽相关的问题:

systemd.services.containerd.serviceConfig = { LimitNOFILE = lib.mkForce null; };

部署前最后一遍自检

8 项检查各对应一类真实故障:K8s 版本不在 v1.32~v1.37 区间或节点架构非 amd64/arm64,集群层前置条件不满足;目标磁盘FSTYPE非空,OSD 准备阶段会直接跳过该盘;启用了加密、metadata 设备或osdsPerDevice > 1却没装 lvm2,节点重启后该节点的 OSD Pod 会启动失败;modprobe rbd报 not found,RBD 卷完全无法挂载;内核低于 4.17,CephFS 的 RWX 卷不会强制执行 PVC 大小与配额。逐项确认完毕,即可按 quickstart.md 部署 Rook Operator 与 Ceph 集群。

【免费下载链接】rookStorage Orchestration for Kubernetes项目地址: https://gitcode.com/gh_mirrors/roo/rook

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/4 6:07:14

FaceFusion 模型下载与离线部署实战:一条命令到跑通的 5 步闭环

FaceFusion 模型下载与离线部署实战:一条命令到跑通的 5 步闭环 【免费下载链接】facefusion Industry leading face manipulation platform 项目地址: https://gitcode.com/GitHub_Trending/fa/facefusion FaceFusion 是一套命令行驱动的人脸处理平台&#…

作者头像 李华
网站建设 2026/11/4 6:07:07

Hermes Agent终极指南:打造随你成长的AI智能助手

Hermes Agent终极指南:打造随你成长的AI智能助手 你是否厌倦了每次都需要重新训练AI助手?是否希望有一个能够真正理解你、记住你偏好、并随着时间推移变得越来越聪明的AI伙伴?今天,我将为你介绍Hermes Agent——一款能够自我进化…

作者头像 李华