使用 Horizo​​ntal Pod Autoscaling 以及资源请求和限制

mit*_*nia 6 horizontal-scaling kubernetes

假设我们有以下部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  ...
spec:
  replicas: 2
  template:
    spec:
      containers:
        - image: ...
          ...
          resources:
            requests:
              cpu: 100m
              memory: 50Mi
            limits:
              cpu: 500m
              memory: 300Mi
Run Code Online (Sandbox Code Playgroud)

我们还创建了一个HorizontalPodAutoscaler对象,它根据 CPU 平均利用率自动增加/减少 pod 的数量。我知道 HPA 将根据资源请求计算 Pod 的数量,但是如果我希望容器能够在水平扩展之前请求更多资源怎么办?

我有两个问题:

1)在定义 HPA 时,K8s是否甚至使用资源限制

2) 我可以告诉 HPA 根据资源限制而不是请求进行扩展吗?或者作为实现这种控制的一种方式,我可以将targetUtilization值设置为100% 以上吗?

Vas*_*pov 11

不,HPA 根本不考虑限制。您可以将目标利用率指定为甚至高于 100% 的任何值。


Mar*_*ark 6

嗨,在部署中,我们有资源请求和限制。根据此处的文档这些参数在 HPA 成为自动缩放器的主要角色之前起作用:

  1. 创建 Pod 时,Kubernetes 调度程序会选择一个节点供 Pod 运行。每个节点对每种资源类型都有一个最大容量它可以为 Pod 提供的 CPU 和内存量
  2. 然后kubelet启动一个 Pod 的容器,它将 CPU 和内存限制传递给容器运行时。
  3. 如果Container 超过其内存限制,它可能会被终止。如果它是可重启的,kubelet 将重启它,就像任何其他类型的运行时故障一样。

如果 Container 超过其内存请求,则每当节点内存不足时,它的 Pod 很可能会被驱逐。

另一方面:

Horizo​​ntal Pod Autoscaler 实现为一个控制循环,其周期由控制器管理器控制(默认值为 15 秒)。控制器管理器根据每个 Horizo​​ntalPodAutoscaler 定义中指定的指标查询资源利用率。

注意:请注意,如果 pod 的某些容器没有设置相关的资源请求,则不会定义 pod 的 CPU 利用率,并且自动缩放器不会针对该指标采取任何操作。

希望这有帮助