计算节点关闭后,Pod 停留在“正在终止”状态

问题描述 投票:0回答:2

我正在运行带有 RHEL7.8 BareMetal 计算节点的 OCP4.6。 我们正在集群上运行功能和 HA 测试。 我们在这个集群上的主要应用程序是一个包含大约 250 个 Pod 的 StatefulSet。

关闭节点后,该节点上运行的 Pod 进入

Terminating
状态,并卡在那里。 由于这是一个 StatefulSet,因此在原始 Pod 完成终止之前,Pod 无法在另一个节点上重新启动。

我可以使用

--force --grace-period=0
删除 Pod,但这并不能解决我的问题。

这些 Pod 仅在关闭的服务器返回到

Ready
状态后才会终止。

有什么想法吗??

更新:

查看 k8s 的文档 - 我发现 StatefulSet pod 在节点关闭后不会终止这一事实实际上是一种安全机制,并且实际上是一个功能:https://kubernetes.io/docs/tasks/运行应用程序/强制删除-stateful-set-pod/

kubernetes openshift kubernetes-statefulset
2个回答
0
投票

如果您想避免 Pod 在击落节点时被卡住,您应该尝试安全地耗尽节点

您可以使用

kubectl drain
安全地从 pod 中驱逐所有 pod 在节点上执行维护之前(例如内核升级, 硬件维护等)。安全驱逐允许 Pod 的容器 优雅地终止并尊重
PodDisruptionBudgets
您已指定。

kubectl drain
成功返回时,表明所有 豆荚已被安全驱逐(尊重所需的优雅 终止期,并尊重您所拥有的
PodDisruptionBudget
定义)。然后可以安全地通过断电来关闭节点 物理机,或者,如果在云平台上运行,则删除其 虚拟机。

另请注意,如果发生驱逐被困

  • 中止或暂停自动化操作。调查应用程序卡住的原因,然后重新启动自动化。

  • 经过适当长时间的等待后,

    DELETE
    Pod 从集群的控制平面中退出,而不是使用驱逐 API。

Kubernetes 没有指定在这种情况下应该采取什么行为; 由应用程序所有者和集群所有者建立一个 就这些情况下的行为达成一致。

为了调查卡住的 Pod,您可以:

更多详细信息可以在链接文档中找到。


0
投票

也许您可以检查您的 pod 是否定义了“终结器”。有时,pod 不会“终止”,因为它正在等待“终结器”操作完成,但情况是终结器因任何原因都无法运行

如果是这样,您可以尝试编辑 pod 并删除“finalizer”部分,看看您的 pod 是否真的消失了

当然,这样做可能会让您的应用程序处于不良状态,具体取决于终结器应该做什么

一些链接:

© www.soinside.com 2019 - 2024. All rights reserved.