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 升级不会拉新容器的主要内容,如果未能解决你的问题,请参考以下文章

Helm 升级引发 YAML 解析器错误

k8s中helm安装部署,升级和回滚(chart,helm,tiller,StorageClass)

kubernetes-helm程序包管理器

从 Helm stable/cert-manager 升级到 jetstack/cert-manager

# IT明星不是梦 # 一文教你一次性完成Helm 3迁移

Helm常用用法和遇到的一些问题