Kubernetes中的Pod优先级和抢占

作者:Bobby Salamat

Kubernetes以运行可扩展工作负载而闻名。它根据资源的使用量来扩展您的工作负载。扩大工作负荷后,将创建更多应用程序实例。当应用程序对您的产品至关重要时,即使群集处于资源压力下,您也要确保已安排这些新实例。解决此问题的一个显而易见的解决方案是过度配置群集资源,以使某些松弛资源可用于放大情况。这种方法通常可行,但是成本更高,因为您必须支付大部分时间都是空闲的资源。

窗格优先级和抢占 是Kubernetes 1.14中普遍提供的调度程序功能,它使您可以为关键工作负载实现高级别的调度置信度,而无需过度配置集群。它还提供了一种在不牺牲基本工作负载的可靠性的情况下提高群集中资源利用率的方法。

成本控制可控的计划

Kubernetes集群自动缩放器 是生态系统中的出色工具,可在您的应用程序需要它们时将更多节点添加到群集中。但是,群集自动缩放器有一些限制,可能不适用于所有用户:

  • 它不适用于物理群集。
  • 向群集添加更多节点的成本更高。
  • 添加节点不是瞬时的,可能要花几分钟才能使这些节点可用于调度。

另一种选择是Pod优先级和抢占。通过这种方法,您可以将多个工作负载合并到一个群集中。例如,您可以在同一群集中运行CI / CD管道,ML工作负载和关键服务。当多个工作负载在同一个集群中运行时,集群的大小大于仅用于运行关键服务的集群。如果您为关键服务赋予最高优先级,而CI / CD和ML工作负载则具有较低的优先级,则当您的服务需要更多计算资源时,调度程序会抢占(逐出)您优先级较低的工作负载(例如ML工作负载)足够的容器,以允许您要安排的优先级较高的广告连播。

借助Pod优先级和抢占,您可以在Autoscaler配置中为群集设置最大大小,以确保在不牺牲服务可用性的情况下控制成本。而且,抢占比向集群添加新节点要快得多。您可以在几秒钟内安排好高优先级Pod,这对于延迟敏感的服务至关重要。

提高集群资源利用率

运行关键服务的集群运营商会随着时间的流逝大致了解他们在集群中为实现高服务可用性所需的节点数。估计通常是保守的。这样的估计会考虑流量突发,以找到所需的节点数。可以将群集自动缩放器配置为从不将群集的大小减小到低于此级别。唯一的问题是,这样的估计通常是保守的,群集资源在大多数时间可能仍未得到充分利用。 Pod优先级和抢占可通过在群集中运行非关键工作负载来显着提高资源利用率。

非关键工作负载可能具有更多可以容纳在集群中的Pod。如果您将非关键工作负载的优先级设置为负,则当非关键Pod处于挂起状态时,Cluster Autoscaler不会向集群添加更多节点。因此,您不会产生更高的费用。当关键工作负载需要更多计算资源时,调度程序会抢占非关键Pod并调度关键Pod。

非关键Pod填补了群集资源中的“漏洞”,从而提高了资源利用率,而又不增加成本。

参与其中

如果您对此功能有反馈,或者有兴趣参与设计和开发,请加入 安排特殊兴趣小组.