头盔升级-安装未接受新更改

时间:2018-11-23 17:21:08

标签: kubernetes-helm

我在构建CI中使用以下命令,以便掌舵的部署发生在每个构建上。但是,我注意到这些更改尚未部署。

              helm upgrade --install --force \
              --namespace=default \
              --values=kubernetes/values.yaml \
              --set image.tag=latest \
              --set service.name=my-service \
              --set image.pullPolicy=Always \
              myService kubernetes/myservice

我每次都需要标记图像吗?如果存在相同版本,头盔是否不进行安装?

4 个答案:

答案 0 :(得分:1)

另一个标签(也许比您可以添加的秒数更健壮)只是图表修订号:

...
metadata:
  ...
  labels:
    helm-revision: "{{ .Release.Revision }}"
...

答案 1 :(得分:1)

使用头盔3时,--recreate-pods标志已弃用。 相反,您可以使用

kind: Deployment
spec:
  template:
    metadata:
      annotations:
        rollme: {{ randAlphaNum 5 | quote }}

这将创建一个随机字符串注释,该注释将始终更改并导致部署滚动。 Helm - AUTOMATICALLY ROLL DEPLOYMENTS

答案 2 :(得分:0)

是的,您需要标记每个构建而不是使用“最新”。 Helm在根据您的参数评估的模板与​​当前部署的模板之间进行了区分。由于两者都是“最新的”,因此看不到任何变化,也不会应用任何升级(除非进行了其他更改)。这就是为什么头盔最佳实践指南建议“容器图像应使用固定标签或图像的SHA”的原因。 (另请参见https://docs.helm.sh/chart_best_practices/Helm upgrade doesn't pull new container

答案 3 :(得分:0)

您不必每次都使用新标签来标记图像。只需在date: "{{ .Release.Time.Seconds }}"下添加template/metadata/labels并设置imagePullPolicy: Always。 Helm将检测部署对象中的更改,并每次提取最新映像:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: "{{ .Release.Name }}-{{ .Values.app.frontendName }}-deployment"
  labels:
    app.kubernetes.io/name: {{ .Values.app.frontendName }}
    app.kubernetes.io/instance: {{ .Release.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ .Values.app.frontendName }}
      app.kubernetes.io/instance: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app.kubernetes.io/name: {{ .Values.app.frontendName }}
        app.kubernetes.io/instance: {{ .Release.Name }}
        date: "{{ .Release.Time.Seconds }}"
    spec:
      containers:
        - name: {{ .Values.app.frontendName }}
          image: "rajesh12/myimage:latest"
          imagePullPolicy: Always

运行helm upgrade releaseName ./my-chart升级您的版本