20

我构建了一个简单的 NodeJS API,将 Docker Image 推送到一个 repo 并使用 Helm install 将其部署到我的 k8s(工作得很好)。

pullPolicy 是Always.

现在我想更新源代码并部署我的应用程序的更新版本。我在所有文件中调整了版本,构建并推送了新的 Docker 映像并尝试过helm upgrade,但似乎什么也没发生。我helm list可以看到已部署修订版,但未部署对源代码的更改。 watch kubectl get pods还表明没有按照您期望的方式创建新的 podkubectl --apply...

我做错什么了?

4

3 回答 3

35

仅当有更改要推出时,Helm 才会推出对 kubernetes 对象的更改。如果您使用:latest没有更改应用到部署文件,ergo no pods 将滚动更新。要继续使用latest,您需要添加一些内容(即带有 sha / 版本的标签),这些内容会发生变化并导致部署由 helm 更新。还要记住,您通常也需要ImagePullPolicy: Always

于 2017-09-21T07:53:24.047 回答
1

可能的解决方法:

 spec:
  template:
    metadata:
      labels:
        date: "{{ now | unixEpoch }}"

将其添加到您的 Deployment 或 StatefulSet yaml

于 2022-02-07T10:25:32.243 回答
0

我在 .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 永远不会相同,所以这是可行的。

于 2020-09-26T18:07:29.237 回答