k8s 会在 HPA 范围内扩展 pod 以驱逐它并满足中断预算吗?

Will k8s scale a pod within HPA range to evict it and meet disruption budget?

对不起,我问的问题与同一知识领域的许多具体问题有很多重叠。我很想知道 kubernetes 是否会缩放 pod 以驱逐它。

给出的是驱逐时的以下事实:

  1. pod 运行宁一个实例。

  2. pod 有一个 HPA 控制它,具有以下参数:

    • 最小计数:1
    • 最大计数:2
  3. 它有一个带参数的 PDB:

    • minAvailable: 1

我希望 k8s 控制器有足够的信息来安全地扩展到 2 个实例以满足 PDB,直到最近我还假设它确实会这样做。

我为什么要问这个? (问题背后的问题;)

好吧,我们 运行 遇到了 AKS 上的自动升级问题,因为它不会如上所述逐出 pods,Azure 团队告诉我更改参数。但是,如果没有发生缩放,这意味着我们必须将 minAvailable 设置为 2,从而有效地增加 pod 数量仅用于未来的驱逐。在我使用 k8s 提交功能请求或使用 AKS 提交错误之前,我想深入了解这个问题。

我相信这两个部分是独立的; pod 中断预算不考虑自动缩放功能,或者以其他方式意识到 pod 运行ning 作为可以临时升级的部署的一部分。

如果您有 replicas: 1 的部署以及 minAvailable: 1 的相应 PDB,这将防止 pod 运行 正在运行的节点停止服务。 (我在我专业工作的系统中看到了这种行为,使用不同的 Kubernetes 环境。)

正常工作的方式(另请参阅 Kubernetes 文档中的 PodDisruptionBudget example):

  1. 某些命令,如 kubectl drain 或集群自动缩放器将节点标记为停止服务。
  2. 该节点上的 pods 已终止。
  3. 复制控制器发现一些副本集太少pods,并创建新的。
  4. 新的 pods 被安排在服务节点上。

pod 中断预算仅影响此序列的第一部分;它会阻止 kubectl drain 实际耗尽一个节点,直到可以满足中断预算,或者导致集群自动缩放器选择一个不同的节点。根本不考虑 HPA,也不认为它在升级期间 运行 个部署管理的 pod 的额外副本是“正常的”。 (也就是说,这是一个非常合理的问题,只是现在不能那样做。)

我对大多数部署的默认设置往往是使用 3 个副本,并且 Pod 中断预算要求其中至少 1 个副本可用。这肯定会增加一些运营服务的成本,但它会让你容忍非自愿的节点故障,并且它确实允许你有意识地轮换节点。对于从消息队列(Kafka 或基于 RabbitMQ 的工作人员)读取的内容,运行 只有 1 个没有 PDB 的副本可能是有意义的,因为工作人员将能够容忍中断。