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

无需kubectl drain,如何测试Kubernetes的Pod Disruption Budget(PDB)

验证Pod Disruption Budget(PDB)的替代方法

以下是几种无需使用kubectl drain的PDB验证方案:

1. 手动触发Pod驱逐(调用Eviction API)

直接通过Kubernetes的Eviction API模拟节点维护场景下的Pod驱逐,不会影响节点上的其他共享资源:

  • 准备驱逐请求的JSON文件(例如eviction-request.json):
{
  "apiVersion": "policy/v1",
  "kind": "Eviction",
  "metadata": {
    "name": "<目标Pod名称>",
    "namespace": "<目标命名空间>"
  }
}
  • 执行命令触发驱逐:kubectl create -f eviction-request.json
  • 观察结果:若PDB不允许本次中断,会返回429 Too Many Requests错误,Pod不会被删除;若符合PDB规则,Pod会被驱逐并自动重建。

2. 标记节点不可调度后手动删除Pod

先将目标节点设为不可调度(避免新Pod调度干扰测试),再手动删除Pod验证PDB限制:

  • 标记节点不可调度:kubectl cordon <节点名称>
  • 删除目标应用的Pod:kubectl delete pod <Pod名称> -n <命名空间>
  • 验证规则:用kubectl get pdb <PDB名称> -n <命名空间>查看DisruptionsAllowed字段,同时观察Pod重建数量是否符合PDB的minAvailable或maxUnavailable配置。
  • 测试完成后恢复节点调度:kubectl uncordon <节点名称>

3. 批量删除Pod验证PDB阈值

针对多副本应用,通过批量删除Pod验证PDB的限制阈值:

  • 假设PDB配置为minAvailable: 2,当前应用副本数为3
  • 先删除1个Pod:kubectl delete pod <Pod1名称> -n <命名空间>,此时剩余2个可用Pod,符合PDB规则,操作会成功
  • 尝试删除第2个Pod:kubectl delete pod <Pod2名称> -n <命名空间>,此时可用Pod数会低于minAvailable阈值,PDB会阻止该操作并返回错误提示。

4. 检查PDB状态与关联关系

通过查看PDB的详细状态,确认它是否正确关联目标应用的Pod:

  • 执行命令:kubectl describe pdb <PDB名称> -n <命名空间>
  • 查看Status部分的CurrentHealthy、DesiredHealthy和DisruptionsAllowed字段,确认数值是否符合预期;同时检查Selector是否正确匹配目标应用的Pod标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:42:24