南投县网站建设_网站建设公司_MongoDB_seo优化
2025/12/27 11:33:45 网站建设 项目流程

一、核心用法

这个命令的核心逻辑是:kubectl set image <资源类型>/<资源名> <容器名>=<新镜像地址> [选项]简单说就是 “告诉 K8s,把某个资源里的某个容器,换成新的镜像”。

1. 基础语法(最常用)

bash
 
运行
 
 
 
 
# 更新 Deployment 中的容器镜像
kubectl set image deployment/<deployment名> <容器名>=<新镜像>:<版本># 示例:把名为 nginx-deploy 的 Deployment 里的 nginx 容器,换成 1.25 版本镜像
kubectl set image deployment/nginx-deploy nginx=nginx:1.25
 

2. 进阶用法

bash
 
运行
 
 
 
 
# 一次性更新多个容器的镜像(多个容器用空格分隔)
kubectl set image deployment/app-deploy app=myapp:v2 mysql=mysql:8.0# 更新 DaemonSet/StatefulSet (语法和 Deployment 一致)
kubectl set image daemonset/node-agent agent=node-agent:v1.3
kubectl set image statefulset/redis redis=redis:7.0# 从文件读取镜像更新(适合批量操作)
kubectl set image -f deployment.yaml app=myapp:v3# 查看更新后的镜像(验证用)
kubectl set image deployment/nginx-deploy --list
 

二、关键细节(避坑指南)

  1. 必须匹配容器名<容器名> 要和 Deployment/YAML 里定义的 spec.containers.name 完全一致,否则会报错 “容器不存在”。
  2. 自动触发滚动更新:更新 Deployment 镜像后,K8s 会自动触发滚动更新,逐步替换旧 Pod,不中断服务(前提是配置了合理的副本数和更新策略)。
  3. 支持镜像简写:如果镜像地址和旧镜像一致,只改版本,可简写为 容器名=:新版本(比如 nginx=:1.26)。
  4. 回滚超简单:如果更新后出问题,用 kubectl rollout undo deployment/nginx-deploy 一键回滚到上一个版本。

三、实操示例(新手友好)

假设你有一个名为 todo-app 的 Deployment,里面有两个容器:frontend(前端)和 backend(后端),现在要把后端镜像从 todo-backend:v1 更改为 todo-backend:v2
bash
 
运行
 
 
 
 
# 1. 执行镜像更新
kubectl set image deployment/todo-app backend=todo-backend:v2# 2. 查看更新进度(确认滚动更新是否正常)
kubectl rollout status deployment/todo-app# 3. 验证镜像是否更新成功
kubectl get pods -l app=todo-app -o jsonpath='{range .items[*]}{.spec.containers[1].image}{"\n"}{end}'
# 输出应该是 todo-backend:v2
 

四、和编辑 YAML 的对比

方式 优点 缺点
kubectl set image 无需改文件、一键操作、速度快 仅能改镜像,无法调整其他配置
编辑 YAML + apply 可同时调整镜像和其他配置 步骤多,需编辑 / 保存 / 应用文件

总结

  1. kubectl set image 是 K8s 中免改文件快速更新容器镜像的核心命令,语法为 kubectl set image <资源类型>/<资源名> <容器名>=<新镜像>
  2. 执行后会自动触发 Deployment 滚动更新,更新失败可通过 kubectl rollout undo 快速回滚;
  3. 适合临时、快速的镜像版本切换,若需调整镜像外的配置(如资源限制),建议编辑 YAML 文件。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询