kubernetes GKE Pod迁移到第二个Nodepool被PDB阻止,第二个Nodepool未扩展

vyu0f0g1  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(1)|浏览(307)

我有一个机器类型为X的旧节点池,我正在将它们的工作负载迁移到机器类型为Y的新节点池。两个节点池都启动了,我已经禁用了旧节点池上的自动缩放。我在旧的节点池中添加了一个警戒线,然后使用the GKE doc提供的命令排空节点:

for node in $(kubectl get nodes -l cloud.google.com/gke-nodepool=old-pool -o=name); do
  kubectl drain --force --ignore-daemonsets --delete-emptydir-data --grace-period=300 "$node";
done

字符串
这些节点的Pod中断预算(PDB)为Min 1可用,并且新的节点池具有自动缩放设置,Min 1和Max约为10。
我的问题是排水管没有完成,它卡住了说Cannot evict pod as it would violate the pod's disruption budget.。它不会驱逐pod是有道理的,但同时,它应该触发在新节点池上创建相同的pod吗?
由于没有在新节点池上创建新的pod以让旧节点耗尽,所以我无法迁移我的工作负载(至少在没有中断的情况下不能迁移,这是我无法做到的)。
我错过了什么?

goqiplq2

goqiplq21#

日志Cannot evict pod as it would violate the pod's disruption budget确认根本原因是pod的中断预算(PDB)配置。
PDB的主要组件是minavailablemaxunavailable
spec.minAvailable:这是在没有被逐出的pod的情况下,在逐出之后必须可用的pod的总数。
spec.maxUnavailable:这是在驱逐期间可以变为不可用的Pod的最大数量。
根据官方文档,应用程序的PodDisruptionBudget也可以防止自动缩放;如果删除节点会导致超出预算,则群集不会缩小。
当缩减时,集群自动缩放器会遵守Pod上设置的调度和驱逐规则。这些限制可以防止自动缩放器删除节点。如果节点包含满足以下任何条件的Pod,则可以阻止节点的删除:

  • Pod的亲和性反亲和性规则阻止重新安排。
  • Pod不受Deployment、StatefulSet、Job、ReplicaSet等Controller管理。
  • Pod具有本地存储,GKE控制平面版本低于1.22。在控制平面版本为1.22或更高版本的GKE集群中,具有本地存储的Pod不再阻止缩减。
  • Pod具有**”cluster-autoscaler.kubernetes.io/safe-to-evict“:“false”**注解。
  • 节点的删除将超过配置的PodDisruptionBudget,操作无法完成,因为部署中存在PDB。根据PDB中标识的行为,您可以更改PDBminAvailablemaxUnavailable**值。

您能否检查上述阻止节点在部署中与PDB一起删除的条件。
希望上面提到的信息对你有用。

相关问题