Kubernetes PodDisruption预算是否优先于HorizontalPodAutoScaler?

Kubernetes PodDisruption预算是否优先于HorizontalPodAutoScaler?,kubernetes,horizontal-pod-autoscaling,Kubernetes,Horizontal Pod Autoscaling,如果您的PDB指定的可用性minReplicas高于HPA的minReplicas,POD的数量是否会达到较低的minReplicas 示例配置: PDB apiVersion:policy/v1beta1 种类:POD预算 元数据: 名称:前端pdb 规格: 可获得:3#在这里 选择器: 火柴标签: 应用程序:前端 HPA apiVersion:autoscaling/v2beta2 种类:水平足自动秤 元数据: 名称:前端hpa 规格: scaleTargetRef: apiVersion

如果您的PDB指定的可用性
minReplicas
高于HPA的
minReplicas
,POD的数量是否会达到较低的
minReplicas

示例配置:

PDB

apiVersion:policy/v1beta1 种类:POD预算 元数据: 名称:前端pdb 规格: 可获得:3#在这里 选择器: 火柴标签: 应用程序:前端 HPA

apiVersion:autoscaling/v2beta2 种类:水平足自动秤 元数据: 名称:前端hpa 规格: scaleTargetRef: apiVersion:apps/v1 种类:部署 名称:前端部署 敏:2#这里呢 马克斯:20 韵律学: -类型:资源 资源: 名称:中央处理器 目标: 类型:利用率 平均利用率:65
我认为将PDB设置为a%而不是绝对值可以解决这一潜在冲突,但我很好奇这两者如何相互作用。

在您的情况下,这两个对象都将被创建并具有价值 PodDisruptionBudget中定义的
minAvailable:3
的优先级将高于部署中定义的
minReplicas:2
。 PDB中定义的条件更为重要。在这种情况下,满足PDB的条件,但如果autoscaler将尝试减少复制副本的数量,它将被阻止,因为PDB中不满足minAvailable值的条件。 您写道,您已经注意到,当您更新部署时,并且您的PDB
minAvailable
小于HPA中的
minReplicas
,可用POD的数量永远不会低于HPA。这是正常的,因为autoscaler正在考虑PDB和if

minReplicas > minAvailable
因此,满足PDB的条件(minAvailable是临界线,因此更高的值也是合适的),这样HPA就可以考虑他的条件,并且最多可以达到minAvailable

定义的总体思想是确保最少的副本始终有效

当节点运行时,排水管将停止并等待在执行pod逐出时遵守所有PDB条件。如果被逐出的POD将导致PDB无效,则将等待条件生效

注意:

具有单个副本的部署的PDB很可能会导致节点操作永远不会成功


阅读更多:,。

你看过官方文件吗?在官方文档中,“PDB无法防止非自愿中断的发生,但它们计入预算。由于应用程序的滚动升级而删除或不可用的POD计入中断预算,但工作负载资源(如部署和状态集)除外。”在执行滚动升级时不受PDB的限制。相反,应用程序更新期间的故障处理在特定工作负载资源的规范中配置。“@Malgorzata我想我对这一部分感到困惑:“由于应用程序的滚动升级而被删除或不可用的POD不计入中断预算,但在执行滚动升级时,工作负载资源(如部署和状态集)不受PDB的限制。“我不确定HPA滚动更新将属于哪一个。我个人注意到,当我更新部署时,PDB小于HPA,可用节点的数量永远不会低于HPA。