k8s部署的应用镜像发生变化更新应用

举报
Rui@localhost 发表于 2024/10/18 09:59:25 2024/10/18
【摘要】 在 Kubernetes (K8s) 中,如果你使用的是带有 latest 标签的容器镜像,并且该镜像发生了更新,默认情况下 K8s 不会自动拉取最新的镜像来更新应用。为了强制更新 latest 镜像,你可以通过以下几种方式来触发更新: 1. 修改 imagePullPolicy 选项确保 imagePullPolicy 设置为 Always,这样每次 Pod 启动时都会从镜像仓库拉取最新的...

在 Kubernetes (K8s) 中,如果你使用的是带有 latest 标签的容器镜像,并且该镜像发生了更新,默认情况下 K8s 不会自动拉取最新的镜像来更新应用。为了强制更新 latest 镜像,你可以通过以下几种方式来触发更新:

1. 修改 imagePullPolicy 选项

确保 imagePullPolicy 设置为 Always,这样每次 Pod 启动时都会从镜像仓库拉取最新的镜像:

spec:
  containers:
  - name: my-app
    image: my-app-image:latest
    imagePullPolicy: Always

2. 通过更新 Deployment 的方式

Kubernetes 使用的是声明式部署模型,如果需要更新正在运行的 Pod,可以通过以下方式让 K8s 重新拉取并部署最新的镜像:

  • 手动更新 Deployment:即使你使用了 latest 镜像标签,K8s 默认不会察觉到镜像变化,因此你可以手动触发 Deployment 的更新。可以通过更新镜像名来做到这一点,即使是简单的重新设置同一个镜像名称:
kubectl set image deployment/my-app my-app=my-app-image:latest

这将强制 K8s 拉取最新的镜像并重新部署。

  • 更新 Deployment 的注释:通过更新 Deployment 的某些字段(比如增加或修改注释),也可以强制重新部署 Pod。
kubectl patch deployment my-app -p \
  "{\"spec\": {\"template\": {\"metadata\": {\"annotations\": {\"date\": \"`date +'%s'`\"}}}}}"

3. 删除并重建 Pod

如果你想手动删除旧的 Pod 并让 Kubernetes 自动重新创建新的 Pod 来拉取最新镜像,可以使用以下命令:

kubectl rollout restart deployment my-app

这将重启 my-app 部署的所有 Pod,从而拉取最新的 latest 镜像。

总结

为了确保 Kubernetes 始终使用最新的 latest 镜像,最好的做法是:

  • 使用 imagePullPolicy: Always
  • 通过 kubectl set image 或 kubectl rollout restart 触发应用更新。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。