kubernetes hpa 请求 cpu 和目标 cpu 值

kubernetes hpa request cpu and target cpu values

我正在阅读 kubernetes hpa example. In this example they run with: kubectl run php-apache --image=k8s.gcr.io/hpa-example --requests=cpu=200m --expose --port=80. So the pod will ask for 200m of cpu (0.2 of each core). After that they run hpa with a target cpu of 50%: kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10. Which mean that the desired milli-core is 200m * 0.5 = 100m. They make a load test and put up a 305% load. Which mean auto scale up to: ceil((3.05 * 200m) / 100m) = 7 pods according to: hpa scaling algorith 上的示例。

一切都很好,但我们正在尝试不同的值,我想知道这是否是一个好方法。

我们选择了 500% 的目标 cpu(第二个选项)。对我来说, target cpu >= 100% 是一个奇怪的概念(也许我也理解错了,请纠正我,因为我对整个概念不太熟悉),但与倒置的(第一个选项)。

第一种方法是正确的。

第二个不好有几个原因:

  1. 当第一个 Pod 已经过载时,关于扩展集群的必要性的决定为时已晚。如果你只给一个 Pod100 毫核的 CPU,但你允许它可以使用可用资源的 5 倍的情况,在决定扩展集群之前被带走。这样的系统效率不高,平均负载约为每个内核 5 个,这意味着在给定时间内为 1 个进程提供服务时,还有另外 4 个进程在等待 CPU 时间。
  2. 与缩减集群相同。它也不是很有效。 假设您的集群中的一般 CPU 使用量减少了 400 多毫核,但仍然不足以删除一个副本并缩减集群。在第一种情况下,已经删除了 4 个副本并且集群缩小了。

还有一个很重要的事情。在规划 Horizo​​ntal Pod Autoscaler 时,请考虑集群中的可用资源总量,这样您就不会遇到 运行 资源不足的情况。

示例:您有一个带有 2 核处理器的系统,从集群的角度来看,这相当于有 2000 毫核可用。假设您决定创建以下部署:

kubectl run php-apache --image=k8s.gcr.io/hpa-example --requests=cpu=500m --expose --port=80

然后 Horizo​​ntal Pod Autoscaler

kubectl autoscale deployment php-apache --cpu-percent=100 --min=1 --max=5

这意味着您允许请求的资源多于集群中实际可用的资源,因此在这种情况下永远不会创建第 5 个副本。