Kubernetes PodDisruption预算,Horizo​​ntalPodAutoscaler和RollingUpdate互动吗?

时间:2019-02-27 10:00:19

标签: kubernetes autoscaling kubernetes-pod kubernetes-deployment

如果我具有以下Kubernetes对象:

  • Deployment,其中rollingUpdate.maxUnavailable设置为1
  • PodDisruptionBudget,其中maxUnavailable设置为1
  • HorizontalPodAutoscaler设置为允许自动缩放。
  • 集群自动缩放已启用。

如果集群处于负载状态并且处于扩展中间,则会发生什么情况:

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

1 个答案:

答案 0 :(得分:1)

  1. documentation中一样:
  

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

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

  1. 这取决于您执行节点重新启动的方式。如果仅切断电源,则无法执行任何操作;)如果在关闭节点之前执行正确的drain,则将考虑PodDisruptionBudget,并且耗尽过程不会违反它。驱逐预算受Eviction API的尊重,但可以通过低级操作(如手动吊舱删除)来违反。比起整个Kubernetes强制使用的强制限制,这更像是一些API的建议。

  2. 根据official documentation,如果将相似性设置为“软”相似性,则无论如何都将在相同的节点上调度Pod。如果“困难”,则部署将陷入困境,无法安排所需数量的Pod。滚动更新仍将是可能的,但是HPA将不再能够增加Pod池。