首页/云/Kubernetes 速查/kubectl set image 更新容器镜像
kubectl 基础56 条

kubectl set image 更新容器镜像

不用手改 YAML 直接替换 Deployment/StatefulSet 等模板中的容器镜像,更新即触发滚动发布,是发布流水线的常用一步。

Kubernetes 速查云更新于 2026-10-13

更新镜像是什么

这个命令直接替换工作负载模板中某个容器的镜像引用,不用手工编辑清单。修改模板即等价于一次新发布,控制器会按更新策略滚动替换实例。它在发布脚本里很常见:只改版本号这一件事,用一条命令比维护整份清单更直接。

代价是清单与现网脱钩

它的副作用是把集群里的对象改成了与版本库中的清单不一致的状态。下次提交清单时,镜像字段会被重置回清单里的值。因此它更适合应急调整或验证,长期使用应把版本号改回清单并重新提交,保持声明与现网一致。

基本信息

适用环境任何 Kubernetes 发行版,支持工作负载类资源
语法kubectl set image <资源>/<名称> <容器名>=<镜像>
容器名来源模板中容器列表里的名称,写错会报找不到容器
是否触发发布会,等价于修改模板
观察方式配合发布状态查看命令确认结果
与清单的关系会与版本库中的清单产生差异

典型使用场景

  • 应急修复:线上问题需要快速切到修复版本
  • 版本切换:验证阶段在不同版本之间来回切换
  • 灰度验证:先在一个负载上验证新镜像能否正常运行
  • 生成草稿:配合演练模式导出修改后的清单作为模板
  • 回退镜像:切回已知可用的标签而不用重写清单
  • 批量调整:对多个命名空间中的同名负载统一更新

常用示例

常用示例
kubectl set image deploy/web web=registry.example.com/app:1.25.3   # 更新镜像
kubectl set image sts/db db=registry.example.com/postgres:16.2 -n prod
kubectl set image deploy/web web=app:1.25.3 --dry-run=client -o yaml > web.yaml   # 导出草稿
kubectl rollout status deploy/web --timeout=180s                    # 观察发布
kubectl describe deploy web | grep -i image                         # 核对当前镜像

与相关命令的分工

命令修改内容适用场景
更新镜像只改镜像引用快速切换版本
提交清单按清单整体对齐常规发布,保持声明一致
编辑对象交互式修改任意字段临时验证单个字段
调整副本数只改副本数量容量调整
镜像引用建议使用明确版本标签而不是浮动标签,否则无法通过版本号判断现网实际运行的是哪一个构建。
用该命令改动现网后,版本库中的清单已与集群不一致,忘记同步会导致下一次发布把镜像回退到旧版本。

易错点

  • 容器名写错:直接报找不到容器并列出可用名称,脚本里未做校验时后续步骤会继续执行造成半成品状态
  • 使用浮动标签:多个版本的实例混跑,回滚与定位都失去依据
  • 改完不同步清单:下一次提交把镜像改回旧版本,出现难以解释的回退
  • 不观察发布结果:新镜像可能启动失败,命令本身返回成功但不代表发布可用

数据来源与参考

  • Kubernetes 官方文档 · kubectl set image
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌