使用相同Chart版本但不同Docker镜像标签的Helm升级问题
解决Helm升级后Pod镜像未更新的问题
嘿,我之前也碰到过一模一样的情况,马上给你捋清楚问题出在哪以及怎么解决!
问题根源
你执行helm upgrade myrelease repo/foo --version 1.0.0的时候,Helm会从你指定的repo仓库拉取官方的foo-1.0.0 Chart,而不是你本地修改过镜像配置的那个Chart版本!虽然你在本地改了Chart里的镜像标签,但没把修改后的Chart推送到仓库,所以仓库里的foo-1.0.0还是原来的配置(镜像bar:4.5.1),自然升级后Pod不会更新。
几种可行的解决方案
根据你的需求(不想升级Chart版本),可以选下面任意一种方法:
1. 直接用本地修改后的Chart升级
如果你的修改只是本地临时用,不需要推送到仓库,直接指定本地Chart的路径执行升级就行:
helm upgrade myrelease ./path/to/your/local/foo-chart
这样Helm会直接使用你本地改好的配置,镜像会更新为bar:4.5.2。
2. 用--set参数临时覆盖镜像版本
如果你还是想从仓库拉取foo-1.0.0,但临时替换镜像标签,不需要修改Chart文件,直接在upgrade命令里加--set参数:
helm upgrade myrelease repo/foo --version 1.0.0 --set image.tag=4.5.2
⚠️ 注意:这里的image.tag要和你Chart的values.yaml里的镜像配置路径对应,如果你的Chart里镜像配置是bar.image.tag,那就要改成--set bar.image.tag=4.5.2。
3. 补充:规范的长期解决方案(可选)
如果之后需要多次使用这个修改后的配置,更规范的做法是:
- 把Chart的
Chart.yaml里的版本号改成1.0.1(或者其他新的版本号) - 重新打包Chart:
helm package ./foo-chart - 把打包好的
foo-1.0.1.tgz推送到你的仓库 - 然后执行升级:
helm upgrade myrelease repo/foo --version 1.0.1
虽然你说不想升级Chart版本,但同一个版本号覆盖仓库里的Chart通常是不推荐的(大部分仓库不允许),所以这个方法适合长期维护的场景。
验证升级是否成功
执行完升级命令后,可以用以下命令确认镜像是否更新:
# 查看Release的当前配置 helm get values myrelease # 查看Pod使用的镜像 kubectl describe pod <your-pod-name> | grep Image
内容的提问来源于stack exchange,提问作者Fred Mériot
相关产品推荐
相关产品推荐

