使用Kubernetes通过StorageClass创建块存储挂载报错。

Lance.Wu 发表于: 2025-10-21   最后更新时间: 2025-10-21 13:35:58   74 游览

Ceph RBD PVC 挂载失败排查与解决方案

挂载错误信息

当 Kubernetes PVC 使用 Ceph RBD 卷挂载失败时,可能会报如下错误:

MountVolume.MountDevice failed for volume "pvc-xxx" : rpc error: code = Internal desc = rbd: map failed with error an error (exit status 95) occurred while running rbd args: [--id kubernetes -m ip:6789,ip:6789,ip:6789 --keyfile=***stripped*** map kubernetes/csi-vol-x --device-type krbd --options noudev], rbd error output: rbd: sysfs write failed rbd: map failed: (95) Operation not supported

原因分析

错误提示:

rbd: map failed: (95) Operation not supported

说明系统 内核不支持 krbd 模块。

在 CentOS 7.9 系统上,如果内核版本为 3.10.x,krbd 模块无法正常工作,因此使用 --device-type krbd 会失败。

解决方案

方案一:升级内核

将系统内核升级到 5.15.x 或更高版本,即可支持 krbd 内核模块。

安装 ELRepo 的 kernel-ml:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-ml kernel-ml-devel

设置默认启动新内核:

grub2-set-default 0
reboot

加载内核模块:

modprobe rbd
modprobe krbd

方案二:使用 NBD 映射(无需升级内核)

StorageClass中修改参数,将deviceType设置为nbd,使用 用户态映射,兼容老内核:

...
kind: StorageClass
metadata:
  name: ceph-reef-rbd
...
parameters:
...
  deviceType: nbd # 添加内容
provisioner: rbd.csi.ceph.com
...

deviceType: nbd → 使用用户态 NBD 映射,不依赖 krbd 内核模块。
兼容性好 → 在 CentOS 7.9 内核 3.10.x 上可正常挂载 PVC。
支持在线扩容 → 配合 allowVolumeExpansion: true 使用。

总结

方案 内核要求 优缺点
krbd ≥ 4.2 推荐 5.x 性能高,内核直接映射块设备,但需要升级内核
nbd ≥ 3.10 兼容性好,无需升级内核,性能略低

根据实际环境选择方案即可:
如果可以升级内核,推荐使用 krbd。
如果无法升级内核或是生产环境受限,使用nbd是最稳妥方案。

添加评论
你的答案

查看kubernetes相关的其他问题或提一个您自己的问题