【问题标题】:Can kubernetes restart pods without outage in case all livenessProbe probes fail?如果所有 livenessProbe 探测都失败,kubernetes 是否可以在不中断的情况下重启 pod?
【发布时间】:2019-06-13 13:25:05
【问题描述】:

在我的部署中,pod 可能处于需要重新创建的情况。在这种情况下,它仍然可以处理流量,但应尽快重新创建。

所以我考虑有一个 livenessProbe,如果需要重新启动 pod,它会报告失败。就绪探测仍会报告 ok。

我知道最终 kubernetes 会重新创建所有 pod,系统会再次正常运行。

我现在的问题是这可以在不中断的情况下完成吗? 因此,让我们假设一个副本集报告的所有 pod 都不是同时处于活动状态。 kubernetes 会全部杀死它们然后替换它们,还是会以滚动更新的方式运行,它启动一个新的 pod,等待它准备好,然后杀死一个不活跃的 pod 并继续这种方式,直到所有的都被替换?

这是 Kubernetes 的默认行为吗?如果不能,是否可以将其配置为这样?

【问题讨论】:

  • 我也有同样的问题,你找到解决办法了吗?定义一个以滚动更新方式执行重启的自定义探针会很棒..
  • 我最终改变了部署(添加了一个随机标签)。所以 k8s 以滚动的方式重启所有的 Pod。这是一个比最低限度必要的更大的变化,但确实有效。
  • 是的,我做了类似的事情,我通过调用 PATCH 端点重新启动部署,将重新启动委托给正在更新数据的服务。

标签: kubernetes


【解决方案1】:

如果由于探测或任何其他原因而失败,K8 将不会使用滚动启动 pod。

关于探针,第一次启动 liveness probe 的时间和频率在 liveness probe 本身中指定。由于您有同一个 pod 的多个副本,因此这些值对于由单个 ReplicaSet 管理的 pod 的所有副本都是相同的。所以是的,这是默认行为。

但您完全想在不中断的情况下执行此操作,您可以创建两个 ReplicaSet 来管理两个不同的相同 pod 集,但以下活动探测参数具有不同的值:

initialDelaySeconds: Number of seconds after the container has started before 
liveness or readiness probes are initiated.

periodSeconds: How often (in seconds) to perform the probe. Default to 10 seconds. 
Minimum value is 1.

timeoutSeconds: Number of seconds after which the probe times out. Defaults to 1 second. 

successThreshold: Minimum consecutive successes for the probe to be considered successful after having failed.

failureThreshold: When a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up.

【讨论】:

  • 感谢您提供有关 k8s 预期行为的信息。我不认为这两个副本集对我有用。例如,我们有 10 个 Pod,其中 5 个被关闭,同时我们仍然会出现中断,因为其他 5 个可能无法单独处理负载。我将根据 helm 和 pod 的属性研究另一种方法。
【解决方案2】:

当一个 pod 应该重新启动时,不是立即从 livenessProbe 返回失败,而是在一段时间后(即延迟)。 如果您对每个 pod 使用不同的延迟,您将滚动重启。 即使是随机延迟也会最大限度地减少中断的可能性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 2021-08-29
    • 1970-01-01
    • 2020-12-24
    • 2019-04-18
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多