无需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
相关产品推荐
相关产品推荐

