更新镜像是什么
这个命令直接替换工作负载模板中某个容器的镜像引用,不用手工编辑清单。修改模板即等价于一次新发布,控制器会按更新策略滚动替换实例。它在发布脚本里很常见:只改版本号这一件事,用一条命令比维护整份清单更直接。
代价是清单与现网脱钩
它的副作用是把集群里的对象改成了与版本库中的清单不一致的状态。下次提交清单时,镜像字段会被重置回清单里的值。因此它更适合应急调整或验证,长期使用应把版本号改回清单并重新提交,保持声明与现网一致。
基本信息
| 适用环境 | 任何 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 # 核对当前镜像与相关命令的分工
| 命令 | 修改内容 | 适用场景 |
|---|---|---|
| 更新镜像 | 只改镜像引用 | 快速切换版本 |
| 提交清单 | 按清单整体对齐 | 常规发布,保持声明一致 |
| 编辑对象 | 交互式修改任意字段 | 临时验证单个字段 |
| 调整副本数 | 只改副本数量 | 容量调整 |
镜像引用建议使用明确版本标签而不是浮动标签,否则无法通过版本号判断现网实际运行的是哪一个构建。
用该命令改动现网后,版本库中的清单已与集群不一致,忘记同步会导致下一次发布把镜像回退到旧版本。