首页/云/云与容器速查/kubectl set image 更新镜像
Kubernetes68 条

kubectl set image 更新镜像

命令式触发镜像更新,常用于应急发版与演练:格式 容器名=新镜像。变更同样应尽快回写 YAML;用 get 确认镜像是否真的变了。

云与容器速查云更新于 2026-10-13

kubectl set image 是什么

set image 直接修改工作负载中容器的镜像,Pod 模板一变就自动触发滚动更新,是应急发版与演练时最快的更新方式。格式是「容器名=镜像:标签」,容器名必须与 Pod 模板中定义的一致,写错会报找不到容器。命令式变更容易遗忘,改完之后应尽快把新镜像回写到 YAML 与代码仓库,避免下次 apply 时被覆盖。

基本信息

语法kubectl set image deploy/web 容器名=镜像:标签
容器名来源kubectl get deploy web -o jsonpath 取 containers 的 name
触发效果更新 Pod 模板后自动滚动发布,可用性通常不中断
回滚能力rollout undo 可按 revision 回退到上一版本
回写要求改完导出 YAML 回仓库,避免下次 apply 时被覆盖

典型使用场景

  • 应急修复:线上问题需要立刻换一个已构建好的修复镜像
  • 灰度验证:先把部分工作负载的镜像换到新版本观察
  • 演练环境:快速切换版本验证回滚流程是否可用
  • 私有仓库切换:镜像仓库地址迁移后批量更新镜像字段
  • 临时降级:新版本异常时先切回上一个已知可用镜像

使用示例

使用示例
kubectl get deploy web -o jsonpath='{.spec.template.spec.containers[*].name}'
# 先用上面命令核对容器名,写错会报找不到容器
kubectl set image deploy/web web=registry.example.com/team/web:1.2.4
kubectl rollout status deploy/web          # 确认滚动更新完成
kubectl rollout history deploy/web         # 查看 revision 记录
kubectl rollout undo deploy/web            # 需要时回滚

更新方式对照

方式可追溯性是否回写仓库适用
set image有 revision 记录需手动回写应急发版、演练
改 YAML 后 apply有 revision 记录天然在仓库中常规发布流程
直接编辑对象有 revision 记录容易遗漏临时排查
删除后重建记录断档需重写不推荐
版本标签策略在这里很关键:用不可变版本号或摘要更新才能稳定触发滚动并支持精确回滚;用滚动标签会让 revision 记录失去参考价值。
更新到与当前完全相同的镜像标签不会触发滚动:Pod 模板没有实际变化,命令执行成功但服务并未更新。使用滚动标签时尤其容易出现这种「发出去了却没生效」。

易错点

  • 容器名写错,报找不到容器,应先核对模板中的容器名
  • 用同一个滚动标签更新,模板无变化不触发滚动,以为已经发版
  • 命令式改了镜像没回写 YAML,下一次 apply 把版本退回旧镜像
  • 更新后没有观察滚动状态,发布实际卡在中途却当作已完成

数据来源与参考

  • Kubernetes Docs:kubectl set image

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌