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

K8s CronJob未运行最新代码但手动创建Job可正常运行问题求助

问题根因排查方向

  • 镜像拉取策略与镜像标签覆盖问题
    这是该类问题最常见的诱因:你大概率在构建镜像时,给新镜像复用了旧的标签(即你用到的security/portal:3c62acai标签被新构建的镜像覆盖后重新推送至镜像仓库)。K8s默认镜像拉取策略imagePullPolicy为IfNotPresent,只要节点本地存在对应标签的镜像,就不会主动去仓库拉取最新版本。
    你手动创建Job时,Pod刚好调度到了没有该标签镜像缓存的节点,因此自动拉取了仓库里最新的同标签镜像,运行新代码;而CronJob自动触发的Pod长期调度到存有旧版本同标签镜像的节点,直接使用本地缓存的旧镜像,因此运行的是旧代码。
  • CronJob调度规则限制
    如果你给CronJob配置了节点亲和性、污点容忍或其他调度规则,导致CronJob自动生成的Pod只会被调度到某几个固定节点,而这几个节点的本地镜像缓存一直是旧版本,也会触发该问题。手动创建的Job可能没有继承对应的调度规则,因此可以调度到存有新镜像的节点。
  • CronJob配置更新未实际生效
    虽然你已经删除原有CronJob重新apply配置,但若你使用了helm、kustomize等编排工具,可能存在配置缓存未清理、实际生效的CronJob模板仍为旧配置的情况,可执行kubectl get cronjob severity -o yaml确认CronJob的jobTemplate中镜像配置确实为预期版本。

解决方案

  • 在CronJob的Pod模板中添加imagePullPolicy: Always配置,强制每次Pod启动时都去镜像仓库拉取最新版本镜像,彻底规避节点缓存问题。
  • 规范镜像标签使用规则,每次构建新镜像都使用唯一标签(如完整Git commit hash、构建时间戳等),不要覆盖已存在的镜像标签,从根源上避免同标签镜像内容不一致的问题。
  • 清理集群所有节点上的security/portal:3c62acai旧镜像缓存,确保后续调度的Pod都会重新拉取镜像。
  • 若配置了私有镜像仓库,确认CronJob对应的ServiceAccount持有镜像拉取权限,避免拉取失败降级使用本地旧镜像的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:06:08