Kubernetes PodDisruption预算是否优先于HorizontalPodAutoScaler?
如果您的PDB指定的可用性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
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值的条件。
您写道,您已经注意到,当您更新部署时,并且您的PDBminAvailable
小于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。