如何在掌舵中触发渲染的configmap的sha256sum中的更改?

时间:2018-11-30 10:56:57

标签: kubernetes-helm

我在configmap.yaml中有一个设置

---
apiVersion: V2.23
kind: ConfigMap
metadata:
   name: my-configmap
data: 
   image.tag: {{ .Values.image.tag }}

然后在deployment.yaml中,有以下一行:

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

然后在values.yaml中,有以下一行:

image:
  repository: myrepo
  tag: latest
  pullPolicy: IfNotPresent

如果我的helm中有以下Jenkinsfile命令

        sh """
          helm upgrade --install --force \
          --namespace=default \
          --values=values.yaml \
          --set image.tag=${output_of_git-describe} \
          --set image.pullPolicy=Always \
          myimage kubernetes/myimage
       """

问题

  1. sha256的{​​{1}}会根据我在configmap.yaml中拥有的舵命令而实际更改吗?
  2. 是否可以运行一个Jenkinsfile命令来显示helm的sha256?

2 个答案:

答案 0 :(得分:1)

编写(from here)时,Helm会计算未渲染模板文件的SHA-256哈希值,该值在您更新值时不会改变。

如果您的ConfigMap仅包含此单个值,则可以改用该值的哈希值:

exports.postProduct = function(request, response) {
  productModel.postProduct(request, (message, lastID) => {
    upload(request, response, function(err) {
        //console.log(req.body);
        //console.log(req.files);
        if(err) {
            return response.end("Error uploading file.");
        }
        response.end("File is uploaded");
    });
  });
}

您可以将ConfigMap的内容分解为单独的可渲染模板:

checksum/config: {{ sha256sum .Values.image.tag }}
{{/* _config_map.tpl */}}
{{- define "config-map-contents" -}}
image.tag: {{ .Values.image.tag }}
{{- end -}}
{{/* my-configmap.yaml */}}
apiVersion: v1
kind: ConfigMap
metadata:
   name: my-configmap
data: {{ include "config-map-contents" | nindent 2 }}

最终,您需要更改Pod规范中的某些内容,以使Kubernetes重新部署它。在Helm中,您可以直接将值放在环境变量中,而无需通过ConfigMap,这将产生正确的效果:

{{/* in the pod spec */}}
checksum/config: {{ include "config-map-contents" | sha256sum }}

或者如果它实际上是图像标签,只需更改容器中容器的目标图像将导致其重新部署:

env:
  - name: IMAGE_TAG
    value: {{ .Values.image.tag }}

答案 1 :(得分:1)

  1. 是否会根据我在Jenkinsfile中的helm命令更改configmap.yaml的sha256?

是的。 include函数将使用当前头盔值呈现configmap.yaml模板。

  1. 是否可以运行一个helm命令来显示configmap.yaml的sha256?

是的。 helm template命令就是这样做的。例如:

$ helm template --set image.tag=foo mychart | grep checksum
        checksum/config: bd280ed35fb0f343eb93837290a67e26423f0aa247f48b522f574a711fa35e11
$ helm template --set image.tag=bar mychart | grep checksum
        checksum/config: 152533d214421480233406153edcde673f4ce072fba940cb7cfbab96954f7201