限制一组 Pod 的 CPU

时间:2021-03-27 20:24:02

标签: kubernetes cpu-usage scheduling

我有一个基于 Java 的应用程序,它由几个 pod(假设为 4 个)组成,这些应用程序以毫核总数获得许可(假设我们已经购买了 2000mC 的许可)。该应用程序在具有 4000mC 的集群主机上运行,​​以支持应用程序所需的内存。应用程序是突发的,因此每个 pod 都希望在某个时间点使用 2000mC,但不是同时使用。如果 cpu 限制设置为每个 pod 2000mC,那么超过 4 个 pod,我们的许可责任将是 8000mC,尽管实际上主机容量会将其限制为 4000mC。这仍然是我们支付的许可证的两倍。如果我们将每个 pod 限制在 500mC 以确保我们不会超过 2000mC 并保持在我们的许可限制内,那么 pod 就会资源不足。

有没有办法限制一组 Pod 的 CPU,允许任何单个 Pod 爆发到最大限制,而集体不允许它们超过最大值?

2 个答案:

答案 0 :(得分:2)

这里的一个好策略是同时使用请求限制资源参数。

以您的情况为例,您可以使用以下配置

  • const login = () => setFormVisible(true); - 750mC
  • resources.requests.cpu - 2000mC

这将在节点中分配 3000m (740 x 4) CPU,允许额外的 1000mC CPU 突发。

参考 - https://kubernetes.io/docs/tasks/configure-pod-container/assign-cpu-resource/#motivation-for-cpu-requests-and-limits

答案 1 :(得分:0)

我的建议是启用 pod 自动缩放。它有两种类型:

  1. Horizo​​ntal Pod Autoscaler (HPA) - 如果您的 Pod 是相同的,并且您不需要同时需要所有 4 个,则为 Pod 实施 HPA。有了这个,您可以保留所需的最小数量的 pod,然后根据 CPU、内存利用率等指标将它们扩展到您想要的最大数量。HPA

  2. 垂直 Pod 自动缩放 (VPA) - 您可以利用 Kubernetes 提供的资源管理来实现 VPA。您可以添加参数 resources.requests.cpu 来启动您的 pod,如果利用率增加,您可以使用参数 resources.limits.cpu 对其进行限制。 Resource management

以上两种方法的组合将是您的理想选择。