Helm 升级不会拉新容器
Posted
技术标签:
【中文标题】Helm 升级不会拉新容器【英文标题】:Helm upgrade doesn't pull new container 【发布时间】:2018-03-02 09:19:13 【问题描述】:我构建了一个简单的 NodeJS API,将 Docker 镜像推送到一个仓库,并使用 Helm install 将其部署到我的 k8s(运行良好)。
pullPolicy 是Always
。
现在我想更新源代码并部署我的应用程序的更新版本。我在所有文件中调整了版本,构建并推送了新的 Docker 映像并尝试了helm upgrade
,但似乎什么也没发生。
使用helm list
,我可以看到已部署修订版,但未部署对源代码的更改。
watch kubectl get pods
还表明,kubectl --apply...
没有按照您期望的方式创建新的 pod
我做错了什么?
【问题讨论】:
查看***.com/a/55974926中提出的解决方案 【参考方案1】:Helm 仅在需要推出更改时才会推出对 Kubernetes 对象的更改。如果您使用:latest
,则无需对部署文件进行任何更改,因此没有 Pod 将滚动更新。要继续使用latest
,您需要添加一些内容(即带有 sha / 版本的标签),这些内容会更改并导致部署由 helm 更新。另外请记住,您通常也需要ImagePullPolicy: Always
。
【讨论】:
【参考方案2】:我在 .gitlab.yaml 的部署脚本中解决了这个问题,您可以在任何部署脚本中执行类似操作。
export SAME_SHA=$(helm get values service-name | grep SHA | wc -l)
if [ SAME_SHA -eq 1] then helm uninstall service-name; fi
helm upgrade --install service-name -f service-values.yml .
这可能不是生产的最佳方法,因为您最终可能会卸载实时服务,但对我来说,生产 sha 永远不会相同,所以这是可行的。
【讨论】:
以上是关于Helm 升级不会拉新容器的主要内容,如果未能解决你的问题,请参考以下文章
k8s中helm安装部署,升级和回滚(chart,helm,tiller,StorageClass)