Kubernetes Deployment缩容Pod选择逻辑及指定终止方法问询
Kubernetes缩容Pod选择逻辑及指定Pod终止方法
一、缩容时Pod的选择逻辑
Kubernetes缩容Deployment时,不是随机选择Pod终止,而是基于一套优先级排序算法决定淘汰对象,核心考量因素包括:
- Pod优先级(PriorityClass):优先级数值越低的Pod越先被终止
- 节点Pod分布:运行在Pod数量更多的节点上的Pod优先终止(尽量平衡节点负载)
- QoS等级:按
BestEffort > Burstable > Guaranteed的顺序优先终止(Guaranteed级别的Pod最后被淘汰) - 本地存储依赖:没有挂载本地存储卷的Pod优先终止(避免本地数据丢失风险)
- 副本唯一性:若节点上只有这一个Deployment的Pod,会尽量避免终止它(保证服务在该节点的存在性)
你的场景中,node1上的Pod总是被终止,大概率是上述某几个因素共同作用的结果(比如node1的Pod优先级更低、QoS等级更低,或者节点上原本Pod数量更多等)。
二、不重启节点/新增标签前提下,主动终止node2上的Pod2
可以通过以下两种方法精准实现需求:
方法1:暂停Deployment后手动删除目标Pod,再缩容
- 暂停Deployment的滚动更新,避免删除Pod后自动重建:
kubectl rollout pause deployment my-spboot-deployment - 手动删除node2上的Pod2(替换
<pod2-name>为实际Pod名称):kubectl delete pod <pod2-name> - 将Deployment缩容至1个副本:
kubectl scale deployment my-spboot-deployment --replicas=1 - (可选)恢复Deployment的滚动更新,方便后续版本迭代:
kubectl rollout resume deployment my-spboot-deployment
方法2:临时降低Pod2优先级,触发缩容时优先淘汰
- 创建一个低优先级的PriorityClass(若集群中无类似资源):
kubectl apply -f - <<EOF apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: low-priority value: 100 globalDefault: false description: "Low priority class for targeted pod termination" EOF - 给Pod2打上低优先级标记(替换
<pod2-name>):kubectl patch pod <pod2-name> -p '{"spec":{"priorityClassName":"low-priority"}}' - 执行缩容命令,此时Kubernetes会优先终止低优先级的Pod2:
kubectl scale deployment my-spboot-deployment --replicas=1 - (可选)删除临时创建的PriorityClass:
kubectl delete priorityclass low-priority
内容的提问来源于stack exchange,提问作者Kasun Wimaladarma
相关产品推荐
相关产品推荐

