我有一个简单的k8s安装,几个节点和ceph(kubernetes.io/rbd)作为存储类 . 我有一个使用单个pod的部署,它使用来自此存储类的持久卷声明(ReadWriteOnce)中的持久卷 .
具有此pod的节点已失败(很长一段时间 get nodes
输出中的NotReady,它实际上已经死了) .
K8s无法为我的部署创建新的pod,因为“卷的多重附加错误”pvc -...“卷已经专门附加到一个节点,无法连接到另一个节点” .
我看到pv与失败的节点有关:“状态:绑定” .
如何强制kubernetes忘记旧pod以允许新pod绑定到持久卷?
1 回答
这是一个复杂的问题 .
管理卷的安装的Kubelet守护程序应设置有关卷的新状态的信息,以使调度程序能够在另一个节点上生成Pod .
但是,您具有“NotReady”状态,这意味着Kubernetes无法与Kubelet通信以检查Volumes的当前状态 . 在Kubernetes中,卷的状态是最后收到的 - “绑定” . 在不改变节点状态的情况下,无法以某种方式重置该状态 .
我在这里只看到2个解决方法:
在
ReadWriteMany
模式下使用PVC而不是ReadWriteOnce
. CephFS可以在该模式下工作,但RBD不能 . 该模式允许Kubernetes同时在多个节点上声明相同的音量 .从群集中删除失败的节点 . 它将删除链接到该节点的所有对象,并且Scheduler将能够再次声明您的卷 .