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

Docker Kubernetes为何出现重复Pod?Deployment副本数设为1仍有多余实例

可能的原因及排查思路
  • 滚动更新残留的过渡Pod
    当Deployment触发滚动更新(比如镜像版本变更、配置修改)时,K8s会遵循"先启新Pod,就绪后删旧Pod"的逻辑。如果新Pod就绪延迟、旧Pod删除卡住(比如容器进程无法正常退出),会暂时出现两个Pod共存的情况。可以通过以下命令排查:

    • kubectl describe deployment <你的Deployment名称>:查看事件日志,确认更新过程是否有异常
    • kubectl get replicasets:检查是否存在未被缩容至0的旧ReplicaSet
  • 存在手动创建的匹配标签Pod
    如果有人通过kubectl run或独立Pod YAML创建了与Deployment标签选择器匹配的Pod,Deployment控制器只会维护自身管理的replicas数量,不会清理手动Pod,导致总数超过1。排查方式:

    • kubectl get pods --show-labels:对比Pod标签是否与Deployment的selector匹配
    • kubectl get pods -o jsonpath='{.items[*].metadata.ownerReferences}':手动创建的Pod没有ownerReferences,而Deployment管理的Pod会关联到对应的ReplicaSet
  • ReplicaSet异常导致多实例
    多次更新Deployment后,可能存在多个ReplicaSet,若某个旧ReplicaSet的replicas被手动修改为非0,或者Deployment控制器未正确同步RS状态,会导致多个RS同时管理Pod。执行kubectl get rs查看所有RS的REPLICAS列,确认是否有多个RS的实例数大于0。

  • 特殊标识Pod来自其他控制器
    带有k8s/k8s_POD标识的Pod,可能不属于当前Deployment,而是由其他控制器(如StatefulSet、DaemonSet、Job)或系统组件创建。通过kubectl describe pod <Pod名称>查看Owner References字段,确认Pod所属的控制器类型,避免误判为Deployment的重复Pod。

  • 控制器或节点故障导致收敛失败
    如果kube-controller-manager出现短暂故障,或Pod所在节点失联导致Pod处于Terminating状态无法被清理,Deployment会认为当前可用实例不足,从而启动新Pod。排查:

    • kubectl get pods -o wide:查看Pod状态是否有Terminating,以及节点状态是否正常
    • 检查kube-controller-manager的日志,确认控制器运行状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:50:23