【问题标题】:How respawn a pod with persistent volume which stuck on failed node in Kubernetes如何重生具有持久卷的 pod,该卷卡在 Kubernetes 中的故障节点上
【发布时间】:2018-10-01 05:01:01
【问题描述】:

我有一个简单的 k8s 安装,只有几个节点和 ceph (kubernetes.io/rbd) 作为存储类。我有一个带有单个 pod 的部署,该 pod 使用来自该存储类的持久卷声明 (ReadWriteOnce) 中的持久卷。

具有此 pod 的节点发生故障(get nodes 输出中的 NotReady 很长时间,并且它在物理上已经死了)。

K8s 无法为我的部署创建新 pod,因为“卷“pvc-...”的多连接错误卷已经独占连接到一个节点,无法连接到另一个节点。

我看到 pv 绑定到故障节点:“Status: Bound”。

如何强制 kubernetes 忘记旧 pod 以允许新 pod 绑定到持久卷?

【问题讨论】:

  • 你找到解决办法了吗?
  • 我相信没有,这不是实际限制,而是理论上的限制。不可能从死节点“强制分离”卷而不会导致文件系统上的双重写入(意味着“死 fs”)。

标签: kubernetes ceph


【解决方案1】:

这是一个复杂的问题。

管理卷挂载的 Kubelet 守护进程应设置有关卷的新状态的信息,以使调度程序能够在其他节点上生成 Pod。

但是,您处于“未就绪”状态,这意味着 Kubernetes 无法与 Kubelet 通信以检查卷的当前状态。在 Kubernetes 中,Volume 的状态是最后一个收到的——“Bound”。在不更改节点状态的情况下,无法以某种方式重置该状态。

我在这里只看到 2 个解决方法:

  1. ReadWriteManymode 中使用PVC 而不是ReadWriteOnce。 CephFS 可以在该模式下工作,但 RBD 不能。该模式允许 Kubernetes 同时在多个节点上声明相同的卷。
  2. 从集群中删除失败的节点。它将删除链接到该节点的所有对象,并且调度程序将能够再次声明您的卷。

【讨论】:

  • 我能够移除旧的 PV,并为相同的部署重新生成一个新的 pod。现在我的 PVC 处于“丢失”状态,但挂载中的数据在新容器中完好无损。我觉得我发现了一些讨厌的错误..
  • 是的。这就是为什么我写道,我只看到两种不会破坏任何东西的方式:)
  • Ceph RBD 卷无法在 RWX 模式下工作。 Ceph FS 可以,但有所不同。有时不允许多个写入 pod,尤其是在数据库的情况下。
  • 是的,你是对的,RBD 不支持 RWM。我编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
相关资源
最近更新 更多