Where does Helm store installation state?

Viewed 3955

When you run a helm install command, Helm outputs information like the revision of this installation.

Where does Helm store this information? (I assume it's in the cluster somewhere.)

3 Answers

Depends on configuration

I found the answer in the docs.

Helm 3 changed the default release information storage to Secrets in the namespace of the release. https://helm.sh/docs/topics/advanced/#storage-backends

It goes on to say that you can configure it to instead store that state in a ConfigMap or in a PostgreSQL database.

So by default, kubectl get secret --namespace my-namespace will include an entry like

sh.helm.release.v1.st.v1   helm.sh/release.v1                    1      13m

And kubectl describe secret sh.helm.release.v1.st.v1 will output something like

Name:         sh.helm.release.v1.st.v1
Namespace:    my-namespace
Labels:       modifiedAt=1613580504
              name=st
              owner=helm
              status=deployed
              version=1
Annotations:  <none>

Type:  helm.sh/release.v1

The storage is changed in Helm 3 as follows:

  • Releases are stored as Secrets by default.
  • Storage is in the namespace of the release.
  • Naming is changed to sh.helm.release.v1.<release_name>.v<revision_version>.
  • The Secret type is set as helm.sh/release.v1.

$ helm ls --all-namespaces NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION chrt-foobar default 2 2019-10-14 15:18:31.529138228 +0100 IST deployed chrt-foobar-0.1.0 1.16.0
chrt-test test 1 2019-10-14 15:20:28.196338611 +0100 IST deployed chrt-test-0.1.0 1.16.0

$ kubectl get secret -l "owner=helm" --all-namespaces
NAMESPACE   NAME                                TYPE                 DATA   AGE
default     sh.helm.release.v1.chrt-foobar.v1   helm.sh/release.v1   1      3m2s
default     sh.helm.release.v1.chrt-foobar.v2   helm.sh/release.v1   1      2m40s
    test        sh.helm.release.v1.chrt-test.v1     helm.sh/release.v1   1      43s

There are two parts to Helm: The Helm client (helm) and the Helm server (Tiller).

When we run helm init it install the Tiller part on Kubernetes cluster. You can confirm the installation

kubectl get pods --namespace kube-system 
#see Tiller running.

Where does Helm store this information? (I assume it's in the cluster somewhere.) As for

By default, tiller stores release information in ConfigMaps in the namespace where it is running, the new version also supports SQL storage backend for release information.

storage-backends

To get release information

kubectl get configmap -n kube-system -l "OWNER=TILLER"

then check the release info from config map

kubectl get configmap -n kube-system -o yaml myapp.v2:

how-helm-uses-configmaps-to-store-data

Related