假设HPA
设置targetCPUUtilizationPercentage
设置为 50,并且minReplicas
设置为 1。
当单个 pod 正在运行时,如果负载增加导致 CPU 使用率达到 60%,HPA
则由于平均 CPU 使用率高于 50%,将产生一个新的 pod。
由于现在有两个 pod 来处理相同的负载,如果负载没有变化,则可以假设单个 pod 将占用 30% 的 CPU,假设负载在两个 pod 之间平均分配。
在这种情况下,会将HPA
平均 CPU 计算为 30% 并删除一个 pod 吗?如果是这样,这看起来是有问题的,因为 CPU 会再次达到 60%,以便剩余的 pod 处理相同的负载,并会导致新的 pod 反复进出。
请参阅Kubernetes HPA 文档中的自动扩缩公式:
现在,您有两种情况。两种情况下
desiredMetricValue
都是 50%。第一种情况下currentReplicas
是 1,currentMetricValue
是 60%;第二种情况下currentReplicas
是 2,currentMetricValue
是 30%。这些结果是也就是说,即使在扩大规模后,公式中乘以当前副本数的部分也会得出与 HPA 公式相同的结果,并且副本数保持稳定。
另一种看待这个问题的方法是明确写出平均值计算
其中
totalMetricValue
是所有副本的度量总和。现在,这两个值currentReplicas
将在公式中抵消,剩下因此,添加一个(到目前为止)利用率为零的新 Pod 的扩展根本不会影响目标副本数量。