【问题标题】:k8s HPA change inits new pods when reducing max to above current pod count?k8s HPA 在将最大值减少到当前 pod 数量以上时更改了新的 pod?
【发布时间】:2022-01-04 17:42:25
【问题描述】:

假设我有 100 个正在运行的 Pod,其 HPA 设置为 min=100max=150。然后我将 HPA 更改为 min=50max=105(例如,最大值仍高于当前的 pod 数量)。当我更改 HPA 时,k8s 是否应该立即初始化新的 Pod?我认为不会,但我今天似乎观察到了这一点。

【问题讨论】:

  • 为什么在减少 min 后会初始化新的 Pod?它应该只终止 pod。
  • 如果您现有 pod 的使用指标不能证明您的 HPA 中的副本数量超过了最小副本数:最终,kubernetes 会删除 pod。虽然这不会是“立即的”。

标签: kubernetes


【解决方案1】:

首先,如 cmets 中所述,在您的特定情况下,如果使用指标低于利用率目标,一些 pod 将被终止,不会创建新的 pod。

第二件事是缩小副本需要一些时间是绝对正常的 - it's because the stabilizationWindowSeconds parameter is by default set to 300:

behavior:
scaleDown:
   stabilizationWindowSeconds: 300
   policies:
   - type: Percent
     value: 100
     periodSeconds: 15

因此,如果您长时间使用配置 (min=100, max=150) 运行 HPA,并且您已更改为 min=50, max=105,那么在 300 秒(5 分钟)后,您的副本将缩小到 50 个副本。

stabilizationWindowSeconds 的工作原理在 this document 中有很好的解释:

故事 5:缩小规模之前的稳定

当用户预计会有大量抖动或不想过早缩减 Pod 以期待一些后期负载峰值时,使用此模式。

创建具有以下行为的 HPA:

behavior:
 scaleDown:
   stabilizationWindowSeconds: 600
   policies:
   - type: Pods
     value: 5

即算法将:

  • 在 600 秒内收集建议(默认:300 秒)
  • 选择最大的一个
  • 每分钟缩减不超过 5 个 pod

CurReplicas = 10 和 HPA 控制器每分钟循环一次的示例:

  • 前 9 分钟,算法除了收集建议之外什么都不做。假设我们有以下建议

建议 = [10, 9, 8, 9, 9, 8, 9, 8, 9]

  • 在第 10 分钟,我们将再添加一条推荐(让我8):

建议 = [10, 9, 8, 9, 9, 8, 9, 8, 9, 8]

现在算法选择最大的10。因此它不会改变副本的数量

  • 在第 11 分钟,我们将再添加一条建议(设为 7)并删除第一个以保持相同数量的建议:

建议 = [9, 8, 9, 9, 8, 9, 8, 9, 8, 7]

算法选取最大值9并改变副本数10 -> 9

另一件事是,这取决于您使用的是哪个 Kubernetes 版本、哪个apiVersion 用于自动缩放以及您使用的是哪个 Kubernetes 解决方案。行为可能会有所不同 - 请检查 this topic on GitHub 并提交错误报告。

如果您想立即进行缩减(不建议在生产中使用),您可以设置以下内容:

behavior:
    scaleDown:
      stabilizationWindowSeconds: 0
      policies:
      - type: Percent
        value: 100
        periodSeconds: 1

同时检查:

【讨论】:

    猜你喜欢
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2021-09-01
    • 2023-02-01
    • 1970-01-01
    • 2021-04-20
    相关资源
    最近更新 更多