当我们执行 "kubectl scale deploy" 时,Kubernetes 不尊重 HPA 配置吗?



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

过了一段时间---我已经执行了--"kubectl scale deploy-replicas=0"一旦我运行了上面的命令,我可以看到我的pod被删除了(尽管hpa最小pod设置被设置为1),我预计过一段时间后hpa会增加到最小pod计数,即1。然而,我没有看到这种情况发生,我已经等了一个多小时,没有hpa创建新的吊舱。我也尝试过向我的Kubernetes服务发送请求,我想现在hpa会扩大pod的规模,因为没有pod来满足请求,但hps似乎没有这样做,我得到的回复是我的服务不可用。

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

有趣的是,我发现hpa很快就缩小了:当我执行"kubectl scale deploy-replicats=2"(请注意,在hpa中的计数是1)时,我可以看到2个pod很快被创建,但在5分钟内,1个pod被hpa移除。

这是Kubernetes(尤其是hpa)的预期行为吗?如中所示,如果我们通过执行--"kubectl scale deploy-replicas=0"来删除所有pod,a) hpa不会阻止将副本数量减少到配置的pod数量以下(在hpa配置中),并且b) hpa不会按比例(基于hpa旋转周期)增加到配置的最小吊舱数量。本质上是c)在我们重新部署或执行另一轮"kubectl规模部署"以更新副本计数之前,该服务将没有pod。

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

这是一个很好的观察结果。我查阅了HPA的文档,发现HPA用来缩放吊舱的数学公式,它看起来像

TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)

在您的情况下,当前pod利用率为零,因为您的pod计数为零。所以从数学上讲,这个方程的结果为零。所以,如果吊舱数量为零,这就是HPA不工作的原因。

a:HPA不应该阻止pod的手动缩放,因为它只从资源(cpu、内存等)获得触发。一旦您使用"kubectl比例"或任何其他方式进行缩放,HPA将根据最小、最大副本和平均利用率值出现。

b:如果当前计数为非零,HPA将扩展到最小副本数。我试过了,效果很好。

c:/strong>是,除非将副本计数设为非零值,否则HPA将不起作用。所以你必须放大到一些非零值。

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

相关内容

最新更新