kubernetes - Pod 副本缩减在 Kubernetes Horizontal Pod Autoscaler 中是如何工作的?
问题描述
我的理解是,在 Kubernetes 中,使用 Horizontal Pod Autoscaler 时,如果该targetCPUUtilizationPercentage
字段设置为 50%,并且所有 pod 副本的平均 CPU 利用率高于该值,HPA 将创建更多副本。一旦平均 CPU 在一段时间内下降到 50% 以下,它就会降低副本的数量。
这是我不确定的部分:
如果 pod 上的 CPU 利用率为 10%,而不是 0%,会怎样?HPA 是否仍会终止副本?
10% 的 CPU 并不多,但由于它不是 0%,因此某些任务当前正在该 pod 上运行。如果这是一个持续时间很长的任务(几秒钟)并且 HPA 决定终止 pod,则该任务将不会完成。
HPA 是否仅在其 CPU 利用率为 0% 时才终止 Pod,还是在看到该值低于时终止它们targetCPUUtilizationPercentage
?
HPA 如何决定删除哪些 pod?
谢谢!
解决方案
所以你有两个问题,让我一一解决。第一部分 - 如果副本集中的 pod 正在消耗 10%,那么 Kubernetes 会杀死那个 pod 吗?答案是肯定的。Kubernetes 不是查看单个 pod,而是查看该副本集中所有 pod 的该指标的平均值。缩小也是逐渐的,如此处所述
问题的第二部分——当一个 pod 即将被杀死并且它仍在处理一些请求时,你的应用程序如何优雅地运行?这可以通过pod 终止的宽限期来处理,如果你实现一个PreStop
钩子会更好——这将允许你做一些事情,比如停止接收传入的请求,但处理现有的请求。它的实现将根据您使用的语言运行时而有所不同,因此我不会在这里详细介绍。
最后 - 您应该考虑的一种情况是,如果正在运行 pod 的 VM 突然停机怎么办 - 您没有机会执行 PreStop 挂钩!我认为应用程序需要足够强大以处理故障。
推荐阅读
- batch-file - 从批处理中读取字符分隔的属性文件
- visual-studio-code - How can I specify which components of an extension to use
- c# - Filename is getting from a Fileuploader
- android - Android : [Adding Custom framework.jar file] duplicate entry for ConnectTimeoutException
- arcore - Where can I find support for making ARCore compatible Hardware?
- html - Bootstrap - button style not being applied to buttons
- php - 顺序重复数组的索引,直到它与指定的值匹配
- docker - 连接错误:获取服务器 API 版本时出错:Ansible
- arrays - Powershell脚本将列表分解为多个数组
- php - 使用 PHP 或 Bash 查找当前用户的公共 SSH 密钥是否被授权用于远程主机上的 SSH