我有一个机器类型为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以让旧节点耗尽,所以我无法迁移我的工作负载(至少在没有中断的情况下不能迁移,这是我无法做到的)。
我错过了什么?
1条答案
按热度按时间goqiplq21#
日志
Cannot evict pod as it would violate the pod's disruption budget
确认根本原因是pod的中断预算(PDB)配置。PDB的主要组件是minavailable和maxunavailable。
spec.minAvailable
:这是在没有被逐出的pod的情况下,在逐出之后必须可用的pod的总数。spec.maxUnavailable
:这是在驱逐期间可以变为不可用的Pod的最大数量。根据官方文档,应用程序的PodDisruptionBudget也可以防止自动缩放;如果删除节点会导致超出预算,则群集不会缩小。
当缩减时,集群自动缩放器会遵守Pod上设置的调度和驱逐规则。这些限制可以防止自动缩放器删除节点。如果节点包含满足以下任何条件的Pod,则可以阻止节点的删除:
您能否检查上述阻止节点在部署中与PDB一起删除的条件。
希望上面提到的信息对你有用。