如果我具有以下Kubernetes对象:
Deployment
,其中rollingUpdate.maxUnavailable
设置为1
。PodDisruptionBudget
,其中maxUnavailable
设置为1
。HorizontalPodAutoscaler
设置为允许自动缩放。如果集群处于负载状态并且处于扩展中间,则会发生什么情况:
Pod
是否使用新版本的Pod
?PodDisruptionBudget
是否完全停止重新启动? HorizontalPodAutoscaler
是否可以在删除另一个节点之前扩大节点数量?Pod
相似性以避免将来自同一Pod
的两个Deployment
放在同一节点上。答案 0 :(得分:1)
由于滚动升级到应用程序而导致删除或不可用的Pod确实计入了中断预算,但是控制器(如部署和有状态集)在滚动升级时不受PDB的限制–处理应用程序中的故障更新已在控制器规范中配置。
因此,它部分取决于控制器的配置和实现。我相信自动缩放器添加的新Pod将使用Pod的新版本,因为那是当时部署定义中存在的版本。
这取决于您执行节点重新启动的方式。如果仅切断电源,则无法执行任何操作;)如果在关闭节点之前执行正确的drain
,则将考虑PodDisruptionBudget
,并且耗尽过程不会违反它。驱逐预算受Eviction API的尊重,但可以通过低级操作(如手动吊舱删除)来违反。比起整个Kubernetes强制使用的强制限制,这更像是一些API的建议。
根据official documentation,如果将相似性设置为“软”相似性,则无论如何都将在相同的节点上调度Pod。如果“困难”,则部署将陷入困境,无法安排所需数量的Pod。滚动更新仍将是可能的,但是HPA将不再能够增加Pod池。