<p>I want to set up a Kubernetes Cluster with multiple Helm Charts installed. I like the idea of having configurations versioned in an Git repository. I'm wondering if there is any tool (or recommended/best practice) of how the state of installed helm charts can be "versioned".</p>

<p>For example, I would like to have a yaml file similar to the following example with multiple helm charts and a tool (that's the tool I'm searching for) which will take care of applying this file to my Kubernetes cluster:</p>

<pre><code>- name: gitlab
  chart: gitlab/gitlab-runner
  repository: https://charts.gitlab.io
  values:
    - gitlab-runner/values.yaml
    - local/gitlab-runner-override.yaml
  namespace: gitlab-runner

- name: metallb
  chart: stable/metallb
  values:
    - metallb/configuration.yaml

...
</code></pre>

<p>This way it is possible to manage the contents of the Kubernetes cluster in a programatically way.</p>

<p>Any recommendations?</p>

<p>It looks like <a href="https://github.com/roboll/helmfile" rel="nofollow noreferrer">helmfile</a> is the solution you need:</p>

<blockquote>
  <p>Helmfile is a declarative spec for deploying helm charts. It lets
  you...</p>
  
  <p>Keep a directory of chart value files and maintain changes in version
  control. Apply CI/CD to configuration changes. Periodically sync to
  avoid skew in environments.</p>
</blockquote>

<p>You can read more about it in <a href="https://medium.com/@naseem_60378/helmfile-its-like-a-helm-for-your-helm-74a908581599" rel="nofollow noreferrer">this</a> article.</p>
