如何在Helm中正确追加SecretConfigMap哈希前缀?

问题描述 投票:0回答:1

我想将Secret或ConfigMap内容的哈希值追加到资源名称中,以便触发滚动更新,并保留该资源的旧版本,以防新配置中出现错误。

这几乎可以通过使用 "helm.sh/resource-policy": keep 但这些内容永远不会被清理掉。在Helm中有没有一种方法可以说 "除了最后两个之外,保留所有的",或者有其他方法可以实现这种行为?

$ helm version
version.BuildInfo{Version:"v3.2.1", GitCommit:"fe51cd1e31e6a202cba7dead9552a6d418ded79a", GitTreeState:"clean", GoVersion:"go1.13.10"}
kubernetes-helm
1个回答
-1
投票

自动滚动部署

为了在Secret或Configmap发生变化时更新资源,您可以在您的部署中添加校验注解。

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

您可以使用 舵机回滚指令

更新。

假设你的配置图是用以下方法生成的 values.yaml 文件,您可以添加一个 _helper.tpl 功能

{{- define "mychart.configmapChecksum" -}}
{{ printf "configmap-%s" (.Values.bar | sha256sum) }}
{{- end }}

并使用 {{ include "mychart.configmapChecksumed" . }} 作为configmap名称和部署时的参考。

configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "mychart.configmapChecksumed" . }}
  annotations:
    "helm.sh/resource-policy": keep
data:
  config.properties: |
    foo={{ .Values.bar }}

部署.yaml

   ...
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        # Provide the name of the ConfigMap containing the files you want
        # to add to the container
        name: {{ include "mychart.configmapChecksumed" . }}

请注意,您必须保持 "helm.sh/resource-policy": keep 注释,告诉舵手不要删除以前的版本。

您不能使用 {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} 直接作为configmap的名称,因为如果使用了

error calling include: rendering template has a nested reference name
© www.soinside.com 2019 - 2024. All rights reserved.