Skip to content

Helm 3.13 is not backward compatible with 3.12 #12460

@zevisert

Description

@zevisert

Output of helm version:

version.BuildInfo{Version:"v3.13.0", GitCommit:"825e86f6a7a38cef1112bfa606e4127a706749b1", GitTreeState:"clean", GoVersion:"go1.20.8"}

Output of kubectl version:

Client Version: v1.28.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.27.3-gke.100

Cloud Provider/Platform (AKS, GKE, Minikube etc.): Not applicable


I have found in a few projects that helm 3.13 is not rendering the same output as 3.12. I've set up a simple minimal reproducible example at https://github.com/zevisert/helm-3-13-rendering-mre

Either way, here's some console output showing what I'm running into:

$ helm version
version.BuildInfo{Version:"v3.12.3", GitCommit:"3a31588ad33fe3b89af5a2a54ee1d25bfe6eaa5e", GitTreeState:"clean", GoVersion:"go1.20.7"}

$ helm create example
Creating example

$ rm -r example/charts/ example/templates/*

$ echo '{{ include "helmet.app" . }}' > example/templates/app.yaml

$ yq e '. += ({"dependencies": [{"name": "helmet", "version": "~0.9.1", "repository": "https://companyinfo.github.io/helm-charts", "import-values": ["defaults"]}]})' < example/Chart.yaml | sponge example/Chart.yaml

$ helm dependency build example
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "helmet" chart repository
Update Complete. ⎈Happy Helming!⎈
Saving 1 charts
Downloading helmet from repo https://companyinfo.github.io/helm-charts
Deleting outdated charts

$ helm template example > templated-3.12.yaml

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
Helm v3.13.0 is available. Changing from version v3.12.3.
Downloading https://get.helm.sh/helm-v3.13.0-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /opt/tooling/helm/bin
helm installed into /opt/tooling/helm/bin/helm

$ helm version
version.BuildInfo{Version:"v3.13.0", GitCommit:"825e86f6a7a38cef1112bfa606e4127a706749b1", GitTreeState:"clean", GoVersion:"go1.20.8"}

$ helm dependency build example
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "helmet" chart repository
Update Complete. ⎈Happy Helming!⎈
Saving 1 charts
Downloading helmet from repo https://companyinfo.github.io/helm-charts
Deleting outdated charts

$ helm template example > templated-3.13.yaml

Here is the side-by-side diff between the two outputs (templated-3.12.yaml vs templated 3.13.yaml)

---                                                             ---
# Source: example/templates/app.yaml                            # Source: example/templates/app.yaml
apiVersion: v1                                                  apiVersion: v1
kind: Service                                                   kind: Service
metadata:                                                       metadata:
  name: release-name-example                                      name: release-name-example
  namespace: "default"                                            namespace: "default"
  labels:                                                         labels:
    app.kubernetes.io/name: example                                 app.kubernetes.io/name: example
    helm.sh/chart: example-0.1.0                                    helm.sh/chart: example-0.1.0
    app.kubernetes.io/instance: release-name                        app.kubernetes.io/instance: release-name
    app.kubernetes.io/managed-by: Helm                              app.kubernetes.io/managed-by: Helm
spec:                                                           spec:
  type: ClusterIP                                                 type: ClusterIP
  sessionAffinity: None                                           sessionAffinity: None
  ports:                                                          ports:
    - name: http                                                    - name: http
      port: 80                                                        port: 80
      protocol: TCP                                                   protocol: TCP
      targetPort: http                                                targetPort: http
  selector:                                                       selector:
    app.kubernetes.io/name: example                                 app.kubernetes.io/name: example
    app.kubernetes.io/instance: release-name                        app.kubernetes.io/instance: release-name
---                                                           <
# Source: example/templates/app.yaml                          <
apiVersion: apps/v1                                           <
kind: Deployment                                              <
metadata:                                                     <
  name: release-name-example                                  <
  namespace: "default"                                        <
  labels:                                                     <
    app.kubernetes.io/name: example                           <
    helm.sh/chart: example-0.1.0                              <
    app.kubernetes.io/instance: release-name                  <
    app.kubernetes.io/managed-by: Helm                        <
spec:                                                         <
  replicas: 1                                                 <
  revisionHistoryLimit: 10                                    <
  selector:                                                   <
    matchLabels:                                              <
      app.kubernetes.io/name: example                         <
      app.kubernetes.io/instance: release-name                <
  strategy:                                                   <
    type: RollingUpdate                                       <
  template:                                                   <
    metadata:                                                 <
      annotations:                                            <
        helm.sh/revision: "1"                                 <
      labels:                                                 <
        app.kubernetes.io/name: example                       <
        helm.sh/chart: example-0.1.0                          <
        app.kubernetes.io/instance: release-name              <
        app.kubernetes.io/managed-by: Helm                    <
    spec:                                                     <
      restartPolicy: Always                                   <
      containers:                                             <
        - name: example                                       <
          image: docker.io/hello-world:latest                 <
          imagePullPolicy: Always                             <
          ports:                                              <
            - containerPort: 8080                             <
              name: http                                      <
              protocol: TCP                                   <
          resources:                                          <
            limits: {}                                        <
            requests: {}                                      <
      affinity:                                               <
        podAntiAffinity:                                      <
          preferredDuringSchedulingIgnoredDuringExecution:    <
            - podAffinityTerm:                                <
                labelSelector:                                <
                  matchLabels:                                <
                    app.kubernetes.io/name: example           <
                    app.kubernetes.io/instance: release-name  <
                topologyKey: kubernetes.io/hostname           <
              weight: 1                                       <
      serviceAccountName: default                             <

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugCategorizes issue or PR as related to a bug.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions