我的理解是,在 Kubernetes 中,使用 Horizontal Pod Autoscaler 时,如果targetCPUUtilizationPercentage
字段设置为 50%,并且所有 Pod 副本的平均 CPU 利用率高于该值,HPA 将创建更多副本。一旦平均CPU在一段时间内下降到50%以下,就会降低副本数量。
这是我不确定的部分:
如果 Pod 上的 CPU 利用率是 10%,而不是 0%,会怎么样?HPA 是否仍会终止副本?
10% CPU 并不算多,但由于它不是 0%,因此该 pod 上当前正在运行某些任务。如果这是一项长期任务(几秒钟)并且 HPA 决定终止 pod,则该任务将不会完成。
HPA 是否仅在 Pod 的 CPU 利用率为 0% 时才终止 Pod,还是在发现该值低于 0% 时才终止 PodtargetCPUUtilizationPercentage
?
HPA 如何决定删除哪些 Pod?
谢谢你!
所以你有两个问题,让我一一解答。第一部分 - 如果副本集中的某个 pod 消耗了 10%,那么 Kubernetes 会杀死该 pod 吗?答案是肯定的。 Kubernetes 关注的不是单个 Pod,而是该副本集中所有 Pod 的指标平均值。而且缩小规模也是渐进的正如这里所解释的 https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-cooldown-delay
问题的第二部分 - 当 pod 即将被杀死并且仍在处理某些请求时,您的应用程序如何优雅地运行?这可以通过以下方式处理Pod 终止的宽限期 https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination如果你实施的话就更好了a PreStop hook https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks- 这将允许您执行诸如停止接受传入请求但处理现有请求之类的操作。其实现将根据您使用的语言运行时而有所不同,因此我不会在这里详细介绍。
最后 - 您应该考虑的一种情况是,如果运行 pod 的 VM 突然停机,您将没有机会执行 PreStop 挂钩!我认为应用程序需要足够强大才能处理故障。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)