首页 > 解决方案 > Kubernetes PodDisruptionBudget、Horizo​​ntalPodAutoscaler 和 RollingUpdate 交互?

问题描述

如果我有以下 Kubernetes 对象:

如果集群负载不足并且正在扩展,会发生什么:

  1. 在滚动更新期间?Pod由于扩大规模而添加的新版本是否使用新版本Pod
  2. 何时需要重新启动或更换节点?是否PodDisruptionBudget完全停止重新启动?HorizontalPodAutoscaler在关闭另一个节点之前是否会增加节​​点数量?
  3. Pod关联性设置为避免将Pod来自同一节点的两个 's放置Deployment在同一节点上时。

标签: kubernetesautoscalingkubernetes-podkubernetes-deployment

解决方案


  1. 文档中所示:

由于滚动升级应用程序而被删除或不可用的 Pod 确实计入中断预算,但控制器(如部署和状态集)在滚动升级时不受 PDB 的限制——配置了应用程序更新期间的故障处理在控制器规范中。

所以它部分取决于控制器的配置和实现。我相信自动缩放器添加的新 Pod 将使用新版本的 Pod,因为那是当时部署定义中存在的版本。

  1. 这取决于您执行节点重启的方式。如果您只是切断电源,则无济于事;)如果您drain在关闭节点之前正确执行,那么PodDisruptionBudget将考虑到并且排水程序不会违反它。Eviction API 遵守中断预算,但可能会违反手动删除 pod 等低级别操作。这更像是一些 API 尊重的建议,而不是整个 Kubernetes 强制执行的强制限制。

  2. 根据官方文档,如果将亲和性设置为“软”,则 pod 无论如何都将被安排在同一个节点上。如果它是“困难的”,那么部署将被卡住,无法安排所需数量的 pod。滚动更新仍然是可能的,但 HPA 将无法再增加 pod 池。


推荐阅读