我有一个简单的 k8s 安装,只有几个节点和 ceph (kubernetes.io/rbd) 作为存储类。我有一个带有单个 pod 的部署,该 pod 使用来自该存储类的持久卷声明 (ReadWriteOnce) 中的持久卷。
带有此 pod 的节点发生故障(get nodes
中的 NotReady 输出很长时间,并且它在物理上已死机)。
K8s 无法为我的部署创建新的 pod,因为“卷“pvc-...”的多附加错误卷已经独占附加到一个节点并且无法附加到另一个节点。
我看到 pv 绑定(bind)到失败的节点:“状态:绑定(bind)”。
如何强制 kubernetes 忘记旧 pod 以允许新 pod 绑定(bind)到持久卷?
最佳答案
这是一个复杂的问题。
管理卷挂载的 Kubelet 守护进程应设置有关卷的新状态的信息,以使调度程序能够在另一个节点上生成 Pod。
但是,您处于“未就绪”状态,这意味着 Kubernetes 无法与 Kubelet 通信以检查卷的当前状态。在 Kubernetes 中,Volume 的状态是最后一个收到的——“Bound”。在不更改节点状态的情况下,无法以某种方式重置该状态。
我在这里只看到 2 个解决方法:
ReadWriteMany
中使用 PVC模式而不是 ReadWriteOnce
. CephFS 可以在该模式下工作,但 RBD 不能。该模式允许 Kubernetes 同时在多个节点上声明相同的卷。 关于kubernetes - 如何重生具有持久卷的 pod,该卷卡在 Kubernetes 中的故障节点上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49942285/