You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用kubectl drain node时如何让K8s等新Pod就绪再删旧Pod?

解决kubectl drain时Pod驱逐导致的服务停机问题

Deployment的rollingUpdate策略仅针对版本滚动更新场景生效,而kubectl drain触发的是节点级的Pod驱逐(属于集群维护类中断),这个场景下需要通过**PodDisruptionBudget(PDB,Pod中断预算)**来约束Pod的中断行为,确保新Pod就绪后再删除旧Pod。

具体配置步骤

  1. 创建对应PodDisruptionBudget资源,配置最小可用Pod数量/百分比,保证驱逐过程中服务始终有足够的就绪Pod:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: platform-menu-backend-pdb
spec:
  minAvailable: 100% # 若副本数固定,也可设置具体数值(如4),确保可用Pod数不低于原副本量
  selector:
    matchLabels:
      app: platform-menu-backend # 与Deployment的标签匹配

将上述内容保存为pdb.yaml,执行kubectl apply -f pdb.yaml完成配置。

  1. 执行节点驱逐命令时,需忽略DaemonSet类型的Pod(这类Pod无法被正常驱逐):
kubectl drain <节点名称> --ignore-daemonsets --delete-emptydir-data

原理说明

配置PDB后,Kubernetes在执行Pod驱逐时会检查当前可用Pod数是否满足minAvailable的要求:

  • 若待驱逐节点上的Pod被删除后会导致可用Pod数不达标,Kubernetes会先调度新Pod至其他健康节点
  • 等待新Pod进入**就绪(Ready)**状态后,再删除待驱逐节点上的旧Pod,从而避免服务停机

内容的提问来源于stack exchange,提问作者Lucas Fernandes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:25:14