Skip to content

Feature: Ordered Install/Upgrade #375

Open
@mattfarina

Description

There have been discussions about adding the ability for Helm to do an ordered installation where different parts of the order are applied to Kubernetes at different times.

Currently, Helm sends all the resources (except CRDs) at one time. When there are subcharts, which are embedded in the chart, those are pulled into a shared sandbox, rendered together, and sent at once. Helm does order the resources by type as we have experience that this has mattered in some cases. The reason Helm sends everything at once is that controllers should eventually reconcile and make everything consistent.

This does not always work for applications, in practice.

Configuration management tools can be used to install different parts of an application separately to deal with this problem. But, this does not work for general distribution of applications as charts where end users can helm install an application.

The proposal is to do this with multiple times Helm sends resource to Kubernetes.

There are currently two ideas being discussed:

  1. The H4HIP: Helm Sequencing Proposal (H4HIP: Helm Sequencing Proposal #373) - where there are "layers" in a chart that are sent at different times. There are trade-offs with this effort. For example:
    • A single chart can have different parts that are sent at different times. This means you could have a database, caching server, and application server in a single chart (i.e. no subcharts) and they could be installed in an ordered manner.
    • What happens when subcharts introduce layers of their own and there is one large shared sandbox? How will the calculated layers work together and be easily debugged? There be dragons in this area.
    • Individual components cannot be upgraded separately. This is good if you want to disallow that but bad if you want to allow individual component upgrades.
  2. Hypper was a project that built on Helm and had the concept of a shared dependency. sub-charts inserted this way were not bundled with the chart in the traditional way and each of these subcharts was installed installed before its parent in an ordered manner.
    • Each chart is self contained and can be reasoned about.
    • Applications that have an ordering of parts (rather than well formed individual components) need to be broken up into multiple charts in an un-natural manner
    • Individual subcharts can be upgraded individually (a trade off listed on the previous bullet set).
    • Parts can be easily reused (e.g., a database chart that's used by multiple applications). It's DRY in this sense.

There may be alternative solutions to this problem and we are happy to discuss them. Neither of these 2 proposals is a solution for all the things.

We are interested in feedback and questions on these two ideas.

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions