【问题标题】:configuring kubernetes restart policy配置 Kubernetes 重启策略
【发布时间】:2017-04-27 18:47:24
【问题描述】:

根据docs-

由 Kubelet 重新启动的失败容器将使用 指数退避延迟,延迟是的倍数 同步频率 0、1x、2x、4x、8x … 上限为 5 分钟并重置 成功执行 10 分钟后。

有没有办法定义自定义的 RestartPolicy?我想尽可能减少退避延迟并降低指数行为。

据我所知,你连 RestartPoilcy 都不能配置,更别说做一个新的了……

【问题讨论】:

    标签: kubernetes kubernetes-health-check


    【解决方案1】:

    退避延迟不可调整,因为它会严重影响 kubelet 的可靠性。想象一下,你有一些 Pod 在节点上不断崩溃,kubelet 会不断重启所有这些 Pod/容器而不会中断,消耗大量资源。

    为什么要更改重启退避延迟?

    【讨论】:

    • 因为你刚才描述的行为正是我想要实现的。我处于一个不必担心资源的环境中,因此有时我可以让自己以更快的重新启动时间为代价,而代价是我需要的任何资源。我有一些模块要配置为尽可能快的重启时间(即使它们会在循环中再次失败),因为它们在应用程序中的作用至关重要。
    • 如果应用容器不断崩溃,还有其他问题(例如,错误的配置)并且重新启动并没有真正的帮助。如果您的容器仅偶尔崩溃一次,则退避不会被重置,kubelet 应该立即重新启动它。为什么你会期望你的应用容器会经常失败?此外,即使您不关心资源,这也可能使容器运行时(例如 docker)不堪重负,并导致整个节点的可靠性降低。您拥有资源这一事实并不意味着所有守护进程都可以有效地利用它们。
    • 我们正在将遗留系统迁移到私有云中,由于数据库中的一些垃圾数据而导致应用程序在循环中崩溃的情况并不少见。但是一段时间后删除的数据会被删除,并且应用程序可以安全地重新启动。如果我重新启动同一个容器,我不希望系统使用指数级的资源.. 我希望内存保持几乎不变,可能会出现一些峰值并且 CPU 会疯狂运行,但这是我的一个打击可以采取。这些应用程序至关重要,我们希望尽可能实现最快的重启时间。指数级的重启时间让我们感到害怕。
    • 能够调整策略可能很有意义。想象一下这种情况:您有一个应用程序,它使用队列中的数据,并用它做一些事情。队列是唯一的输入,如果队列不可用(网络中断),则崩溃是有意义的。但是,如果您继续尝试每 5 分钟重新创建一次容器,则不会浪费太多资源,但是一旦队列变得可访问,您的应用程序就会自动重新联机。实际上,您必须手动重新启动或在应用程序中管理重新连接。
    • 这里有一个 GitHub 问题,请务必表达自己的意见,因为我认为 k8s 可以很自然地配置此选项,因为每个应用程序都有不同的用途。 github.com/kubernetes/kubernetes/issues/…
    【解决方案2】:

    关于自定义你的RestartPolicy,根据Kubernetes documentation

    Only a .spec.template.spec.restartPolicy equal to Always is allowed, which is the default if not specified.
    

    你可以看@Rohithere的详细回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      • 2017-03-24
      相关资源
      最近更新 更多