首页 > 解决方案 > Kubernetes:如何设置作业 / pod 的最短生命周期?

问题描述

在我的主节点上,我正在运行Kubernetes v1.16.3,用户会不时向我们的服务器提交一些作业,目前正在运行。但是,在我的情况下,我有很多用户,他们不仅应该对他们的工作有优先级,而且还应该有每个工作/pod的最短生命周期。

最短生命周期应保证作业至少运行 5 小时。如果我们的资源被充分利用并且用户提交了比当前正在运行的作业具有更高优先级的作业,那么只有那些已经超过最小生命周期的正在运行的作业才应该被驱逐。

我无法为此找到解决方案。我只能找到一个最长生命周期解决方案(https://medium.com/@ptagr/give-your-kubernetes-pods-a-lifetime-8c039d622faf),它表示作业/ pod 的生命周期持续时间在规定的时间到期后被驱逐。但这不是我想要的。我想创建一个受保护 5 小时运行的作业/吊舱,并且在指定时间过去后,作业/吊舱应该仍在运行,但是当另一个新作业出现时(例如,最短生命周期为3 小时)旧的正在运行的作业/pod 应被驱逐,新创建的作业/pod 应取而代之并运行至少 3 小时,然后才能成为被另一个作业杀死的候选人。

这甚至可以在 Kubernetes 中实现吗?或者是否有解决方法来实现这一目标?

标签: ubuntukuberneteskubernetes-podkubernetes-jobs

解决方案


Kubernetes 的调度器不能直接理解时间。您可以设置控制自愿驱逐的 PriorityClasses 和 PodDisruptionBudgets(在本例中预算为 maxDisruptions 0)。有可能写一些东西在一段时间后改变 PriorityClass 值,但我不知道任何现成的东西,这将是一个自定义运算符。


推荐阅读