首页 > 解决方案 > 在启动新 Pod 之前强制关闭 Kubernetes Pod,以防中断

问题描述

我正在尝试在 Kubernetes 中设置有状态的 Apache Flink 应用程序,我需要保存当前状态以防出现中断,例如有人删除 pod 或由于集群调整大小而重新安排它。

我向完成此行为的容器添加了一个 preStop 钩子,但是当我使用kubectl delete pod它删除一个 pod 时,会在旧的 Pod 终止之前启动一个新的 Pod。

这样的指南使用重新创建更新策略来确保一次只运行一个 pod。这在更新部署的情况下可以正常工作,但它不包括我上面描述的中断。我也尝试设置spec.strategy.rollingUpdate.maxSurge为 0 但这没有任何区别。

是否可以将我的部署配置为在另一个 pod 终止之前不会启动任何 pod ,或者我是否需要切换到 StatefulSets?

标签: kubernetes

解决方案


我同意 @Cosmic Ossifrage 的观点,因为StatefulSets可以轻松实现您的目标。每个 PodStatefulSets都由 Kubernetes Engine 维护的唯一、持久的身份和稳定的主机名表示,无论它们被安排在哪里。

因此,StatefulSets按顺序部署并以相反的顺序终止,假设 Kubernetes StatefulSet 控制器在完全删除前一个 Pod 后每次删除一个 Pod。


推荐阅读