我有一个具有多个部署的k8s集群。工作负载变化由Horizontal Pod Autoscalers
(HPA)处理,并且部署具有不同的Priority Classes
以允许或阻止Pod抢占。某些部署具有Pod Disruption Budget
(PDB)。
我有两个具有相同优先级的类似部署,当部署1扩展时(例如,扩展到5个Pod),部署2被抢占并最终以0个Pod结束,据我所知,这违反了其PDB。被抢占的Pod具有以下PDB。
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: <APP NAME>-pdb
spec:
minAvailable: 1
selector:
matchLabels:
app: <APP NAME>
对我来说,此PDB中的关键元素是minAvailable: 1
。
按照k8s PDB documentation:
PDB无法阻止非自愿中断的发生,但是它们确实计入了预算。 由于滚动升级到应用程序而导致删除或不可用的Pod确实计入了中断预算,但是工作负载资源(例如Deployment和StatefulSet)在进行滚动升级时不受PDB的限制。
文档列出了非自愿中断的示例:
部署1的HPA导致部署2扩展为0,因为群集资源不足。我的问题是,为什么k8s调度程序允许部署1扩展到其目标,杀死所有部署2吊舱,而不是将部署1扩展到target-1
并留下一个部署2吊舱?
部署配置中是否缺少某些内容?