水平Pod自动缩放器不遵守Kubernetes Pod中断预算

时间:2020-11-03 09:39:23

标签: kubernetes kubernetes-pod

我有一个具有多个部署的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的限制。

文档列出了非自愿中断的示例:

  • 物理机支持节点的硬件故障
  • 集群管理员误删除VM(实例)
  • 云提供商或虚拟机管理程序故障使虚拟机消失
  • 内核恐慌
  • 该节点由于群集网络分区而从群集中消失
  • 由于节点资源不足而将Pod逐出。

部署1的HPA导致部署2扩展为0,因为群集资源不足。我的问题是,为什么k8s调度程序允许部署1扩展到其目标,杀死所有部署2吊舱,而不是将部署1扩展到target-1并留下一个部署2吊舱?

部署配置中是否缺少某些内容?

0 个答案:

没有答案