Deploy Helm Charts in order of dependencies

5/13/2019

I am deploying multiple helm sub-charts in Kubernetes Cluster through Helm and tiller. How can I make sure that a particular chart completely installs its containers before starting to install other charts and their containers?

I looked into requirements.yaml and hooks, none of them look like can be the solution I am looking for.

ParentDir/
    Chart.yaml
    requirements.yaml
    values.yaml
    charts/
    |
    |
    —- App1
        Chart.yaml
        values.yaml
        templates/
    —- App2
        Chart.yaml
        values.yaml
        templates/
    .
    .
    .
    —- AppN
        Chart.yaml
        values.yaml
        templates/

I have multiple sub-charts, and want to make sure containers of App1 are up and ready before helm installs other charts and its containers.

-- Amay
docker
kubernetes
kubernetes-helm

3 Answers

5/14/2019

Stumbled upon the same issue lately. I had a RabbitMQ, as a Helm package, and two additional Helm packages that I built locally.

I wanted to gather the three in a single Helm package, but found no way of ordering the installation of the Helm charts, since for example the two other packages need the RabbitMQ credentials.

I found using hooks brings more complexity than necessary to the solution and I preferred to simply install them separately, in the order that I want, while I can do any manual changes in between the steps.

Here is an article that discusses this topic and might be of interest to you.

Now there might be a way to properly order dependencies if you are willing to try Helmsman. I can't make any judgement about it, since I just found out about it, but from its README under Features:

Define the order of managing releases: you can define the priorities at which releases are managed by helmsman (useful for dependencies).

Here is the relevant documentation.

-- Anas Tiour
Source: StackOverflow

5/14/2019

i don't think there is anything from helm chart side but probably you can solve this using the init containers.

if in your charts there is database and used by the application and getting crashed you can use the init container to check to complete lifecycle of pod.

For more you can refer this : https://github.com/helm/helm/issues/1713

-- Harsh Manvar
Source: StackOverflow

5/14/2019

You should look into helmfile and split your stack into one helmfile per application. Since helmfiles inside a folders are applied in an alphabetically order you can ensure the order through file naming conventions.

File structure:

helmfile.d/
  00-app-1.yaml
  01-app-2.yaml
  02-app-n.yaml

Execute it with this command: helmfile -f path/to/directory

-- Lukas Eichler
Source: StackOverflow