【问题标题】:Kubernetes Autoscaler: no downtime for deployments when downscaling is possible?Kubernetes Autoscaler:在可以缩减规模时部署没有停机时间?
【发布时间】:2020-12-04 20:30:59
【问题描述】:

在一个项目中,我从 Kubernetes 启用集群自动缩放功能。

根据文档:How does scale down work,我了解,当一个节点在给定时间内的使用量少于其容量的 50% 时,它会连同它的所有 Pod 一起被删除,这些 Pod 将被复制到一个如果需要,可以使用不同的节点。

但是可能会发生以下问题:如果与特定部署相关的所有 pod 都包含在要删除的节点中怎么办?这意味着用户可能会遇到此部署应用程序的停机时间。

有没有办法避免当部署只包含在该节点上运行的 Pod 时缩减删除节点?

我检查了文档,一个可能(但不是很好)的解决方案是向所有包含应用程序 here 的 pod 添加注释,但这显然不会以最佳方式缩小集群。

【问题讨论】:

    标签: kubernetes autoscaling downtime


    【解决方案1】:

    你提到的同一份文件,有这个:

    集群自动扩缩器与基于 CPU 使用的节点自动扩缩器有何不同? Cluster Autoscaler 确保集群中的所有 pod 集群有运行的地方,无论是否有任何 CPU 负载或 不是。此外,它试图确保没有不需要的节点 集群。

    基于 CPU 使用(或任何基于指标)的集群/节点组自动扩缩器 放大和缩小时不要关心豆荚。结果,他们可能 添加一个没有任何 Pod 的节点,或者删除一个有一些 Pod 的节点 系统关键的 pod,比如 kube-dns。这些自动缩放器的使用 不鼓励使用 Kubernetes。

    【讨论】:

    • Cluster Autoscaler 确保集群中的所有 pod 都有运行的地方,但我所说的停机时间可能仍然会发生。感谢您提供信息,但这并不能回答问题。
    【解决方案2】:

    在同一文档中:

    当一个非空节点被终止时会发生什么?如上所述,所有 pod 都应该迁移到其他地方。 Cluster Autoscaler 通过驱逐它们并污染节点来做到这一点,因此它们不会再次被安排在那里。

    Eviction 是什么?:

    pod 的驱逐子资源可以被认为是对 pod 本身的一种策略控制的 DELETE 操作。

    好的,但是如果节点上的所有 pod 同时被驱逐怎么办? 您可以使用 Pod Disruption Budget 来确保最少的副本始终有效:

    什么是 PDB?:

    PDB 会限制因自愿中断而同时停机的复制应用程序的 Pod 数量。

    k8s docs你也可以阅读:

    PodDisruptionBudget 具有三个字段:

    一个标签选择器 .spec.selector 来指定它适用的一组 pod。此字段为必填项。

    .spec.minAvailable which is a description of the number of pods from that set that must still be available after the eviction,即使没有被驱逐的 pod。 minAvailable 可以是绝对数或百分比。

    .spec.maxUnavailable(在 Kubernetes 1.7 及更高版本中可用)描述了该集合中在驱逐后可能不可用的 pod 数量。它可以是绝对数字或百分比。

    因此,如果您在部署中使用 PDB,则不应一次将其全部删除。

    但请注意,如果节点由于其他原因(例如硬件故障)而失败,您仍然会遇到停机时间。如果您真的关心高可用性,请考虑使用 pod 反亲和性来确保 pod 不会全部调度在一个节点上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-30
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      相关资源
      最近更新 更多