手动解除k8s对ceph rbd的挂载

本文详细介绍了当Kubernetes中Pod因节点故障漂移时,遇到Ceph RBD存储卷导致的Multi-Attach错误问题及解决方法。包括手动解除挂载和重启节点两种方案,以及如何避免此类问题的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pod漂移失败:

在 kubernetes 中,如果某个节点出现问题(比如 kubelet 服务不可用), 集群会自动把这个节点上的pod 飘到其他节点.但是,如果一个pod挂载了ceph rbd类型的存储卷(pv),那么这个pod在新节点上是无法正常启动的.会提示如下错误:

Multi-Attach errorforvolume"pvc-4f91d1a6-fcec-11e8-bd06-6c92bf74374a"Volumeisalready exclusively attached to one nodeandcan't be attached to another。

原因如下:

kubelet 服务是与集群通信的.如果这个服务出现问题,集群就会与这个节点失联,而这个节点上的容器是正常在运行的,所以这个容器还会占用这个pv的挂载.而集群并不能删掉这个容器,也不能控制这个节点取消挂载.

所以.这个时候,需要手动进行干预

方法一:手动解除挂载

首先看一下卷是如何挂载的.

1. 强制删除有问题的pod:

kubectl delete pod -n <namespace> <pod name> --grace-period=0 –force

2.查看新建pod的状态:

kubectl describe pod -n <namespace> <pod name>

在event中发现 Multi-Attach 的异常.

3. 查看这个pv的信息:

kubectl describe pv <pv name>

可以Source.RBDImage获取相关的rbd name

rbd status <rbd name>

可以看到.这个rbd的image正在被某个node使用

4. 到这个node上去查看 rbd的使用情况,可以看到rbd挂载到node的设备名

rbd showmapped|grep <rbd name>

5.找到之前pod产生的容器.手动将它停止:

6.解除设备到容器(pod)的挂载.(第四步的获取设备)

umount /dev/rbd0

7.解除node对ceph-rbd 的映射:

rbd unmap <rbd name>

8.重启新的pod:

kubectl delete po -n <namespace name> <pod name>

9.到这,新的pod就可以正常启动了.

方法二:重启

重启这个有问题的节点

使用cephfs的方式:

出现这个问题的一个重要原因是ceph-rbd只能支持单读写(RWO).而cephfs支持多读写(RWX),就不会有这个问题了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值