首页 > 解决方案 > 当我们执行“kubectl scale deploy”时,Kubernetes 不尊重 HPA 配置吗?

问题描述

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

过了一会儿——我已经执行了——“kubectl scale deploy --replicas=0” 一旦我运行上面的命令,我可以看到我的 pod 被删除了(尽管 hpa min pod 设置被设置为 1),我是期待一段时间后 hpa 将扩大到最小 pod 计数,即 1。但是我没有看到这种情况发生,我已经等了一个多小时并且没有 hpa 创建新的 pod。我也尝试向我的 Kubernetes 服务发送请求,我在想现在 hpa 将扩大 pod,因为没有 pod 来服务请求,但是 hps 似乎没有这样做,我得到了一个响应我的服务不可用。

这是我在 kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE** test Deployment/xxxx /1000% 1 4 0 1h 中看到的

有趣的是,我发现 hpa 快速缩减:当我执行“kubectl scale deploy --replicas=2”(请注意 in hpa 计数为 1)时,我可以看到 2 个 pod 被快速创建,但是在 5 分钟内,1 个 pod 得到被 hpa 删除。

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

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

标签: kuberneteskubectl

解决方案


那是很好的观察。我正在浏览 HPA 的文档,遇到了 HPA 用来缩放 pod 的数学公式。它看起来像

TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)

在您的情况下,当前 pod 利用率为零,因为您的 pod 计数为零。所以从数学上讲,这个等式结果为零。因此,如果 pod 计数为零,这就是 HPA 无法工作的原因。

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

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

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

希望这能解答您对 HPA 的疑虑。


推荐阅读