当我们执行“ kubectl规模部署”时,Kubernetes是否不遵守HPA配置?

时间:2019-02-01 06:22:36

标签: kubernetes kubectl

场景: 我已经使用舵图部署了服务,可以看到我的服务,hpa,部署,pod等。 在我的hpa设置中:最小pod数量设置为1。 我可以看到我的Pod正在运行,并且能够处理服务请求。

过一会儿- 我执行了-“ kubectl规模部署--replicas = 0” 一旦运行上面的命令,我可以看到我的Pod被删除(尽管hpa min Pod设置被设置为1),但我期待过一会儿hpa会扩展到最小Pod计数即1。 但是我看不到这种情况发生,我已经等待了一个多小时,并且hpa没有创建新的pod。 我还尝试过向我的Kubernetes服务发送请求,我当时想hpa会扩展pod,因为没有为请求提供服务的pod,但是hp似乎没有这样做,我得到了答复我的服务不可用。

这是我在kubectl get hpa中看到的内容 名称参考目标MINPODS MAXPODS REPLICAS年龄** 测试部署/ xxxx / 1000%1 4 0 1h

有趣的是,我发现hpa迅速缩小:当我执行“ kubectl scale deploy --replicas = 2”(请注意,在hpa中的计数为1)时,我可以看到2个容器快速创建,但是在5分钟内,HPA移除了1个吊舱。

这是Kubernetes(特别是hpa)的预期行为吗? 例如,如果我们通过执行-“ kubectl scale deploy --replicas = 0”删除所有pod, a)hpa不会阻止将副本数减少到少于配置的pod数(在hpa配置中),并且 b)hpa不会根据配置的(根据hpa旋转周期)扩展到最小吊舱数。 基本上是c)在我们重新部署或执行另一轮“ kubectl规模部署”以更新副本计数之前,此服务将没有容器。

这是Kubernetes代码库中的这种预期行为还是(可能)错误? 我正在使用Kubernetes 1.8版本。

1 个答案:

答案 0 :(得分:2)

那是一个很好的观察。我正在查看HPA的文档,并遇到了HPA用于缩放吊舱的数学公式。它看起来像

TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)

在您的情况下,当前豆荚利用率为零,因为您的豆荚数量为零。因此,数学上该方程式的结果为零。因此,这就是如果Pod计数为零,则HPA无法正常工作的原因。

a: HPA不应阻止Pod的手动缩放,因为它仅从资源(CPU,内存等)中触发。一旦使用“ kubectl标度”或任何其他方式进行标度,则HPA将根据最小,最大副本和平均利用率值出现。

b:如果当前计数不为零,则HPA最多可扩展到最小副本数。我试过了,它工作得很好。

c:是,除非您将副本数设为非零值,否则HPA将不起作用。因此,您必须扩展到一些非零值。

希望这能回答您对HPA的疑问。