更新 kubernetes helm 值
Updating kubernetes helm values
我想更新集群上 helm 版本的值配置。
类似于
helm update -f new_values.yml nginx-controller
你可以这样做:
helm upgrade -f new_values.yaml nginx-controller nginx-controller
这将更新您的图表修订版,可以使用以下方式查看:
helm ls
或更具体地说:
helm get nginx-controller
对于 helm chart 升级,请查看文档中的 link:https://docs.helm.sh/helm/#helm-upgrade
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
.
找到当前图表版本
编辑 2020-04-03:
--recreate-pods --wait
不再推荐。正如 Jorden 指出的那样,一种方法是添加校验和注释,这意味着如果有任何文件更改,将重新启动 pods。请参阅 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 或秘密,而这些更改不会被检测为发布本身的更改时,这通常是需要的。
这就是我如何使用新值更新当前图表,而不升级图表版本:
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 标志以确保我保留以前使用的值。
在 Deployment
(或 StatefulSet
)yaml 文件中,如果您使用 ConfigMap
或 Secret
,您可以添加如下校验和:
kind: Deployment
...
spec:
template:
metadata:
annotations:
checksum/config-env: {{ include (print $.Template.BasePath "/configmap-env.yaml") . | sha256sum }}
...
这将检测到 configMap 中的更改,但不会被检测为版本本身的更改。
我只是将安装更改为升级,这对我有用。
helm upgrade \
airflow \
airflow-stable/airflow \
--version 7.16.0 \
--namespace airflow \
--values airflow.config.yaml
如果这之后它仍然给您带来麻烦,您可以像这样回收命名空间中的所有 pods
kubectl delete pods -n airflow --all
我想更新集群上 helm 版本的值配置。
类似于
helm update -f new_values.yml nginx-controller
你可以这样做:
helm upgrade -f new_values.yaml nginx-controller nginx-controller
这将更新您的图表修订版,可以使用以下方式查看:
helm ls
或更具体地说:
helm get nginx-controller
对于 helm chart 升级,请查看文档中的 link:https://docs.helm.sh/helm/#helm-upgrade
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
.
编辑 2020-04-03:
--recreate-pods --wait
不再推荐。正如 Jorden 指出的那样,一种方法是添加校验和注释,这意味着如果有任何文件更改,将重新启动 pods。请参阅 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 或秘密,而这些更改不会被检测为发布本身的更改时,这通常是需要的。
这就是我如何使用新值更新当前图表,而不升级图表版本:
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 标志以确保我保留以前使用的值。
在 Deployment
(或 StatefulSet
)yaml 文件中,如果您使用 ConfigMap
或 Secret
,您可以添加如下校验和:
kind: Deployment
...
spec:
template:
metadata:
annotations:
checksum/config-env: {{ include (print $.Template.BasePath "/configmap-env.yaml") . | sha256sum }}
...
这将检测到 configMap 中的更改,但不会被检测为版本本身的更改。
我只是将安装更改为升级,这对我有用。
helm upgrade \
airflow \
airflow-stable/airflow \
--version 7.16.0 \
--namespace airflow \
--values airflow.config.yaml
如果这之后它仍然给您带来麻烦,您可以像这样回收命名空间中的所有 pods
kubectl delete pods -n airflow --all