【问题标题】:Force Kubernetes Pod shutdown before starting a new one in case of disruption在启动新 Pod 之前强制关闭 Kubernetes Pod,以防中断
【发布时间】:2018-09-17 19:10:29
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我会切换到 StatefulSets。您提出的用例是他们很好解决的用例之一。
  • @Sander,如果发生中断,您希望保存什么样的当前状态?
  • @mk_sta Apache Flink 能够创建可以继续的保存点,但是该过程显然应该在另一个 pod 启动之前完成
  • 你是如何在集群中的 Pod 之间共享保存点的?
  • 它们被写入 GCS,为什么?

标签: kubernetes


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2023-02-11
    • 2021-07-23
    相关资源
    最近更新 更多