使用 Horizontal Pod Autoscaling 以及资源请求和限制
Posted
技术标签:
【中文标题】使用 Horizontal Pod Autoscaling 以及资源请求和限制【英文标题】:Using Horizontal Pod Autoscaling along with resource requests and limits 【发布时间】:2021-08-14 20:35:06 【问题描述】:假设我们有以下部署:
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
replicas: 2
template:
spec:
containers:
- image: ...
...
resources:
requests:
cpu: 100m
memory: 50Mi
limits:
cpu: 500m
memory: 300Mi
我们还创建了一个 HorizontalPodAutoscaler
对象,它会根据 CPU 平均利用率自动增加/减少 pod 的数量。我知道 HPA 会根据资源 requests 计算 pod 的数量,但是如果我希望容器能够在水平扩展之前请求更多资源怎么办?
我有两个问题:
1) 在定义 HPA 时,K8s 是否会使用资源limits?
2) 我可以告诉 HPA 根据资源限制而不是请求进行扩展吗?或者作为实现这种控制的一种手段,我可以将targetUtilization
的值设置为100% 以上吗?
【问题讨论】:
【参考方案1】:不,HPA 根本不考虑限制。您可以将目标利用率指定为任何甚至高于 100% 的值。
【讨论】:
【参考方案2】:您好,在部署中,我们有资源请求和限制。根据文档here,这些参数在 HPA 成为自动缩放器的主要角色之前起作用:
创建 Pod 时,Kubernetes 调度程序会选择一个节点用于 要运行的 Pod。 每个节点都有一个最大容量对于每个 资源类型:它可以提供的 CPU 和内存量 豆荚。 然后 kubelet 启动 Pod 的容器,它将 CPU 和内存限制传递给容器运行时。 如果容器超过其内存限制,它可能会被终止。如果它是可重新启动的,kubelet 将重新启动它,就像任何其他类型的运行时故障一样。
如果一个 Container 超过了它的内存请求,很可能只要节点内存不足,它的 Pod 就会被驱逐。
另一方面:
Horizontal Pod Autoscaler 实现为一个控制循环,其周期由控制器管理器控制(默认值为 15 秒)。 控制器管理器根据每个 HorizontalPodAutoscaler 定义中指定的指标查询资源利用率。
注意: 请注意,如果 pod 的某些容器没有相关的资源请求集,则不会定义 pod 的 CPU 利用率,并且自动缩放器不会对该指标采取任何操作。
希望有帮助
【讨论】:
以上是关于使用 Horizontal Pod Autoscaling 以及资源请求和限制的主要内容,如果未能解决你的问题,请参考以下文章
Pod 副本缩减在 Kubernetes Horizontal Pod Autoscaler 中是如何工作的?
Kubernetes Horizontal Pod Autoscaler 如何计算多容器 Pod 的 CPU 利用率?
Kubernetes Pod Horizontal Autoscaler pod 和对象选择器字段是字符串吗?
使用 Prometheus 适配器的 Horizontal Pod Autoscaler (HPA) 自定义指标(单位是如何定义的?)
如何在 Kubernetes Horizontal Pod Autoscaling 中排除一些容器的指标
如何在 gke 中将 kube-controller-manager 中的 --horizontal-pod-autoscaler-sync-period 字段更改为 5sec