Anthony
Anthony

Reputation: 35998

Helm upgrade --install isn't picking up new changes

I'm using the command below in my build CI such that the deployments to helm happen on each build. However, I'm noticing that the changes aren't being deployed.

              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

Do I need to tag the image each time? Does helm not do the install if the same version exists?

Upvotes: 13

Views: 14103

Answers (4)

rajesh-nitc
rajesh-nitc

Reputation: 5549

You don't have to tag the image each time with a new tag. Just add

date: "{{ now | unixEpoch }}"

under spec/template/metadata/labels and set imagePullPolicy: Always. Helm will detect the changes in the deployment object and will pull the latest image each time:

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: "{{ now | unixEpoch }}"
    spec:
      containers:
        - name: {{ .Values.app.frontendName }}
          image: "rajesh12/myimage:latest"
          imagePullPolicy: Always

Run helm upgrade releaseName ./my-chart to upgrade your release

Upvotes: 20

pan
pan

Reputation: 1967

With helm 3, the --recreate-pods flag is deprecated. Instead you can use

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

This will create a random string annotation, that always changes and causes the deployment to roll. Helm - AUTOMATICALLY ROLL DEPLOYMENTS

Upvotes: 5

QuantumLicht
QuantumLicht

Reputation: 2183

Another label, perhaps more robust than the seconds you can add is simply the chart revision number:

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

Upvotes: 4

Ryan Dawson
Ryan Dawson

Reputation: 12558

Yes, you need to tag each build rather than use 'latest'. Helm does a diff between the template evaluated from your parameters and the currently deployed one. Since both are 'latest' it sees no change and doesn't apply any upgrade (unless something else changed). This is why the helm best practices guide advises that "container image should use a fixed tag or the SHA of the image". (See also https://docs.helm.sh/chart_best_practices/ and Helm upgrade doesn't pull new container )

Upvotes: 0

Related Questions