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

Pod rollout仅在执行Cordon后成功,kubectl rollout status流水线失败求助

解决思路
  • 检查节点调度约束
    确认Deployment是否配置了nodeSelector、affinity.nodeAffinity或podAffinity,导致新Pod强制或优先调度到原节点。同时查看原节点的污点(Taints)和Pod的容忍度(Tolerations)配置,是否存在只有原节点能调度该Pod的情况。
    执行命令排查:

    kubectl describe deployment <deploy-name> | grep -A 20 "Affinity\|NodeSelector\|Tolerations"
    kubectl describe node <old-node-name> | grep -A 10 "Taints"
    
  • 排查原节点资源瓶颈
    原节点可能存在CPU、内存或存储资源不足的情况,导致新Pod调度后无法启动,卡住rollout流程。cordon原节点后,Pod只能调度到资源充足的新节点,因此更新成功。
    执行命令排查:

    kubectl top node <old-node-name>
    kubectl describe pod <stuck-pod-name> | grep -A 10 "Events"
    

    重点关注事件中的Insufficient CPU、Insufficient Memory类报错。

  • 验证Pod就绪探针配置
    原节点上的Pod可能因网络限制、应用依赖缺失等问题,导致就绪探针(Readiness Probe)持续失败。Deployment默认需要旧Pod就绪或满足滚动更新策略条件才会继续推进更新,探针失败会卡住流程。cordon后新Pod在正常节点启动,探针正常通过,rollout完成。
    执行命令排查:

    kubectl logs <old-node-pod-name>
    kubectl describe pod <old-node-pod-name> | grep -A 15 "Readiness"
    
  • 检查滚动更新策略配置
    查看Deployment的rollingUpdate参数(maxSurge和maxUnavailable)是否过于保守,比如设置maxUnavailable=0时,若原节点的旧Pod无法正常终止或新Pod无法启动,会导致更新卡住。cordon原节点后,旧Pod被驱逐,新Pod在其他节点启动,满足更新条件。
    执行命令查看配置:

    kubectl get deployment <deploy-name> -o yaml | grep -A 10 "strategy"
    
  • 排查节点运行时与网络问题
    原节点的容器运行时(docker/containerd)可能存在镜像拉取失败、容器启动异常,或网络插件(如Calico、Flannel)存在网络连通性问题,导致Pod无法正常运行。cordon后Pod调度到正常节点即可恢复。
    查看节点级日志排查:

    # 查看kubelet日志(以systemd为例)
    journalctl -u kubelet -f
    # 查看containerd日志
    journalctl -u containerd -f
    
  • 检查持久化存储绑定问题
    如果Pod使用了本地存储类型的PV,原节点的存储挂载可能存在异常,导致新Pod调度到原节点后无法挂载存储启动。cordon后Pod调度到其他配置正常的存储节点,即可完成部署。
    执行命令排查:

    kubectl describe pod <stuck-pod-name> | grep -A 10 "Volumes"
    kubectl describe pv <pv-name>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:32:42