Helm 3 Design Proposal
This document contains a proposal for Helm 3. It assumes deep familiarity with Helm 2, and assumes that much of Helm 2's architecture will simply carry over without major change.
- Tiller is gone, and there is only one functional component (
- Charts are updated with libraries, schematized values, and the ext directory
- Helm will use a "lifecycle events" emitter/handler model.
- Helm has an embedded Lua engine for scripting some event handlers. Scripts are stored in charts.
- State is maintained with two types of object: Release and a release version Secret
- Resources created by hooks will now be managed
- For pull-based DevOps workflow, a new Helm Controller project will be started
- Cross platform plugins in Lua that only have a runtime dependency on Helm
- A complementary command to
helm fetchto push packages to a repository
The Basic Architecture
Helm 3 is a single-service architecture. One executable is responsible for implementing Helm. There is no client/server split, nor is the core processing logic distributed among components.
The reference implementation of Helm 3 is a single command-line client with no in-cluster server or controller. This tool exposes command-line operations, and unilaterally handles the package management process.
The reference implementation has two distinct parts:
- The command line façade, which translates commands, subcommands, flags, and arguments into a Helm operation
- The Helm library, which provides the logic for executing all Helm operations.
By design, the Helm library must be usable as a standalone library.
In Appendix A, we specify a second implementation of Helm 3 that provides a controller-oriented model with no client. The Helm Controller provides a CRD-based façade to receive commands, but executes them via the Helm library.
With this simplification, the following list comprises the components of Helm v3's core implementation:
- Chart repositories
helm, the CLI
- An extension mechanism (Lua scripts stored in the chart)
- A new in-cluster CRD: Release
In this model, Tiller is removed and there are no operators or controllers that run in-cluster.
Command/Flag Differences from Helm 2
There are a few major (breaking) changes to the Helm CLI planned:
-nflag will be remapped across the board to
-name. This is for consistency with
kubectl, which added
-nafter Helm 2 was released.
helm installwill require a name, unless
--generate-nameis specified. This inverts the default behavior for Helm 2.
helm resetwill be removed
helm deletewill be renamed to
helm remove, though
helm deletewill remain an alias.
helm inspectwill be renamed
helm show, though
helm inspectwill remain as an alias.
Other changes to commands are described in their relevant sections within this document.