3 min read | by Jordi Prats
Just as with kubectl diff, there's a helm plugin that helm us to the the actual differences that it will apply to the kubernetes cluster without much of the clutter that we will find by combining kubectl diff with the yaml output of a helm dry-run
We can find this plugin on github: https://github.com/databus23/helm-diff
By using the Helm plugin manager (> 2.3.x), installation is as simple as this:
helm plugin install https://github.com/databus23/helm-diff
Once we have it, by just adding diff before the upgrade command we will get all the yaml files with it's differences, for example:
$ helm diff upgrade pet2cattle -f pet2cattle_values.yaml . kube-system, pet2cattle, Deployment (apps) has changed: # Source: pet2cattle/templates/00-webapp.yaml apiVersion: apps/v1 kind: Deployment metadata: name: pet2cattle labels: helm.sh/chart: pet2cattle-2 app.kubernetes.io/name: pet2cattle app.kubernetes.io/instance: pet2cattle - app.kubernetes.io/version: "3.11" + app.kubernetes.io/version: "3.12" app.kubernetes.io/managed-by: Helm spec: replicas: 1 selector: matchLabels: app.kubernetes.io/name: pet2cattle app.kubernetes.io/instance: pet2cattle template: metadata: labels: app.kubernetes.io/name: pet2cattle app.kubernetes.io/instance: pet2cattle spec: securityContext: {} containers: - name: pet2cattle securityContext: {} - image: "172.18.1.46:5000/p2c:3.11" + image: "172.18.1.46:5000/p2c:3.12" imagePullPolicy: IfNotPresent env: - name: MINIO_URL value: "http://pet2cattle-minio.kube-system.svc.cluster.local:9000" - name: MINIO_BUCKET value: "pet2cattle" - name: MINIO_ACCESS_KEY valueFrom: secretKeyRef: name: pet2cattle-minio key: accesskey - name: MINIO_SECRET_KEY valueFrom: secretKeyRef: name: pet2cattle-minio key: secretkey ports: - name: http containerPort: 8000 protocol: TCP livenessProbe: httpGet: path: / port: http readinessProbe: httpGet: path: / port: http resources: {} kube-system, pet2cattle, Service (v1) has changed: # Source: pet2cattle/templates/10-websvc.yaml (...)
If you are already familiar with the yaml files it might be too many data so we can also limit the amount of context it provides by using the -C option:
$ helm diff -C 3 upgrade pet2cattle -f pet2cattle_values.yaml . kube-system, pet2cattle, Deployment (apps) has changed: ... helm.sh/chart: pet2cattle-2 app.kubernetes.io/name: pet2cattle app.kubernetes.io/instance: pet2cattle - app.kubernetes.io/version: "3.11" + app.kubernetes.io/version: "3.12" app.kubernetes.io/managed-by: Helm spec: replicas: 1 ... - name: pet2cattle securityContext: {} - image: "172.18.1.46:5000/p2c:3.11" + image: "172.18.1.46:5000/p2c:3.12" imagePullPolicy: IfNotPresent env: - name: MINIO_URL ... kube-system, pet2cattle, Service (v1) has changed: ... helm.sh/chart: pet2cattle-2 app.kubernetes.io/name: pet2cattle app.kubernetes.io/instance: pet2cattle - app.kubernetes.io/version: "3.11" + app.kubernetes.io/version: "3.12" app.kubernetes.io/managed-by: Helm spec: type: ClusterIP ... (...)
Posted on 15/01/2021