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 模板没有实际变化,命令执行成功但服务并未更新。使用滚动标签时尤其容易出现这种「发出去了却没生效」。