更新 Kubernetes helm 值

Posted

技术标签:

【中文标题】更新 Kubernetes helm 值【英文标题】:Updating kubernetes helm values 【发布时间】:2018-08-02 07:01:36 【问题描述】:

我想为集群上的 helm 版本更新值配置。

有点像

helm update -f new_values.yml nginx-controller

【问题讨论】:

【参考方案1】:

你可以这样做:

helm upgrade -f new_values.yaml nginx-controller nginx-controller

这将更新图表的修订版本,可以使用以下命令查看:

掌舵

或更具体地:

helm 获取 nginx 控制器

对于舵图升级,请查看文档中的此链接:https://docs.helm.sh/helm/#helm-upgrade

【讨论】:

啊哈,所以也许可以更新答案 - 我的问题出在他们使用 helm upgrade -f ingress-controller/helm-values.yml nginx-ingress ./some/path 的所有 helm 示例中,但您可以在最后一个参数中使用远程 helm 包名称,例如 helm upgrade -f ingress-controller/helm-values.yml nginx-ingress stable/nginx-ingress 和这也将升级到最新图表。如果我只想更新值并让 helm 重新编译模板并应用它们怎么办?【参考方案2】:
helm upgrade -f ingress-controller/values.yml nginx-ingress stable/nginx-ingress

或更笼统地说:

helm upgrade -f new-values.yml release name package name or path --version fixed-version

上面的命令完成了这项工作。

除非您使用--version fixed-version 参数手动指定版本,否则upgrade 也会更新图表版本。您可以通过helm ls 找到当前图表版本。

文档:https://helm.sh/docs/helm/#helm-upgrade

【讨论】:

您能否在new-values.yml 文件中包含原始图表中没有的新键?我正在尝试将 pod antiAffinity 块添加到现有(不是我的)图表中的 pod。 ➜ helm list -A NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION my-prometheus-operator default 1 2020-07-07 20:31:28.019196 +0530 IST deployed prometheus-operator-8.15.11 0.38.1 vvp vvp 1 2020-07-08 14:30:30.330573 +0530 IST deployed ververica-platform-4.1.1 2.1.1 ➜ helm upgrade -f values-min.yaml vvp ververica-platform-4.1.1 Error: failed to download "ververica-platform-4.1.1" (hint: running helm repo update may help) 还是无法升级 请注意,如果更新 nginx 入口控制器的值,并且如果通过 ConfigMap 指定了其他配置选项,则在执行helm upgrade 时,ConfigMap 的内容将被清空。之后重新创建 ConfigMap。【参考方案3】:

编辑 2020-04-03:

--recreate-pods --wait 不再推荐。正如 Jorden 指出的那样,一种方法是添加校验和注释,这意味着如果有任何文件更改,将重新启动 pod。请参阅https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments 以获取参考。

原始答案

为了补充@stan-bondi 的答案,您可以这样做:

helm upgrade --recreate-pods --wait -f new_values.yaml nginx-controller nginx-controller

当您刚刚更改 configMap 或机密时,通常需要这样做,而这些更改不会被检测为发布本身的更改。

【讨论】:

关于--recreate-pods,似乎不再推荐了。在这里查看替代方案:helm.sh/docs/howto/charts_tips_and_tricks/… 完全正确@JørgenTvedt 这个答案是为 helm 2 设计的,它有点过时了。我会更新的。 @webofmars 那是怎么做的(关于你的编辑)我用 helm install 安装了图表。但是我只是无法弄清楚如何按照您提供的链接中描述的方式更改部署。你能详细说明一下吗?谢谢 @AndyB 你可以复制粘贴给定的例子:``` kind: Deployment spec: template: metadata: annotations: checksum/config: include (print $.Template.BasePath "/configmap .yaml") 。 | sha256sum ``` 只需将 configmap.yaml 的示例指向可能在每次部署时发生变化的内容即可:-) @webofmars 谢谢。但问题是:哪里:我对掌舵完全陌生,如果我只是进行安装,我无权访问 deployment.yaml?经过数小时的搜索,至少我没有找到方法。答案可能很简单,但我可能会在这里监督一些事情。这是我直接使用的bitnami团队的图表。我们需要一个零停机解决方案【参考方案4】:

这就是我用新值更新当前图表的方式,而不升级图表版本:

helm upgrade --reuse-values -f values.yaml release-name release-path --version fixed-version

例如:

helm upgrade --reuse-values -f prometheus/values.yaml prometheus-operator stable/prometheus-operator --version 5.7.0 --namespace monitoring

我使用已安装图表的固定版本,并添加 --reuse-values 标志以确保我保留以前使用的值。

【讨论】:

谢谢!它没有触发新的部署,所以 pod 保持相同的值【参考方案5】:

Deployment(或StatefulSet) yaml 文件中,如果您使用的是ConfigMapSecret,您可以添加如下校验和:

kind: Deployment
...
spec:
  template:
    metadata:
      annotations:
        checksum/config-env:  include (print $.Template.BasePath "/configmap-env.yaml") . | sha256sum 

...

这将检测 configMap 中的更改,而该更改不会被检测为版本本身的更改。

【讨论】:

愚蠢的问题,但是我是在 K8s 仪表板中还是在本地编辑 yaml,然后使用 kubectl 或 helm 应用它?还是别的什么? 本地然后 kubectl 应用【参考方案6】:

我刚刚将安装更改为升级,这对我有用。

helm upgrade \
  airflow \
  airflow-stable/airflow \
  --version 7.16.0 \
  --namespace airflow \
  --values airflow.config.yaml

如果在此之后仍然给您带来麻烦,您可以像这样回收命名空间中的所有 pod

kubectl delete pods -n airflow --all

【讨论】:

以上是关于更新 Kubernetes helm 值的主要内容,如果未能解决你的问题,请参考以下文章

卡在 Terraform 到 Kubernetes 的部分 helm 版本中

如何在Kubernetes CI管道中使用Gradle守护程序?

如何使用Helm更新使用ConfigMap的应用程序

Kubernetes Deployment滚动更新场景分析

Kubernetes Deployment滚动更新场景分析

Kubernetes yaml 文件不能用作 helm 模板