如何使用kubectl模拟Kubernetes多Pod同时故障与重启测试
Kubernetes Pod故障模拟操作指南
首先明确核心前提:只要管控Pod的ReplicaSet资源本身未被删除,手动执行kubectl delete pod删除下属副本的操作,只会触发Pod的销毁重建流程,ReplicaSet始终会将运行的Pod副本数维持在配置值(你的场景中为2个),不会永久删除对应工作负载。
1. 单Pod故障/重启场景模拟方式
常用测试方式按影响范围从小到大排序:
- 模拟容器内服务崩溃重启:不需要销毁整个Pod,执行
kubectl exec -it <目标Pod名> -n <服务所在命名空间> -- kill 1即可。容器内PID为1的进程是服务主进程,被杀掉后会触发kubelet按照配置的重启策略重启容器,Pod本身的网络标识、所在节点都不会变化,适合模拟服务进程假死、崩溃类的软故障。 - 模拟Pod彻底销毁重建:先执行
kubectl get pods -n <服务所在命名空间>拿到目标Pod名称,执行kubectl delete pod <目标Pod名> -n <服务所在命名空间>即可,ReplicaSet会立刻调度创建一个全新的同配置Pod替代被删除的实例,适合模拟Pod被驱逐、节点故障导致的Pod漂移类硬故障。
2. 双Pod同时故障/重启的实现方式
你推测的删除两个Pod的方案是可行的,不需要逐个删除Pod,有更简便的批量操作方式:
- 按标签批量删除服务关联的所有Pod:先执行
kubectl describe rs <对应ReplicaSet名称> -n <服务所在命名空间>,查看Selector字段拿到服务关联的Pod标签,再执行kubectl delete pod -n <服务所在命名空间> -l <匹配到的标签键=标签值>,命令执行后该ReplicaSet下的2个Pod会被同时删除,立刻触发两个新Pod的重建,中间会出现短暂的服务全量不可用窗口,完全匹配双副本同时故障的测试需求。 - 注意不要直接用
kubectl rollout restart rs <ReplicaSet名称> -n <服务所在命名空间>模拟同时故障:该命令默认触发滚动更新,会先创建新Pod、等待新Pod就绪后再删除旧Pod,全程至少有1个可用副本,不会出现双副本同时不可用的情况,不符合你的测试场景。
操作提示:执行删除操作前可以先执行
kubectl get rs <ReplicaSet名称> -n <服务所在命名空间>确认ReplicaSet状态正常,DESIRED和CURRENT字段值均为2,避免因控制器本身异常导致Pod无法正常拉起。
内容的提问来源于stack exchange,提问作者oikonomiyaki
相关产品推荐
相关产品推荐

