MMS • RSS
Earlier in the month the Cloud Native Computing Foundation (CNCF) Technical Oversight Committee (TOC) voted to accept Helm as an incubation-level hosted project. Helm is a package manager that provides an “easy way to find, share, and use software built for Kubernetes”.
Helm has existed as a sub-project under the container orchestrator Kubernetes CNCF-hosted project since February of 2016. The project was initiated by Deis (acquired by Microsoft in 2017) and merged with Google’s Kubernetes Deployment Manager to become Kubernetes Helm. The CNCF blog post announcing the hosting of Helm as a standalone project states that “as Kubernetes shifts its focus to its own core in order to better manage this growth, CNCF is a great home for Helm to continue making it easier for developers and operators to streamline Kubernetes deployments.”
Conceptually, Helm is similar to operating system (OS) package managers such as Debian’s APT, Red Hat’s Yum, and macOS’ Homebrew, in that it copies files into the correct file system locations, sets permissions appropriately, and configures how an application should be initialised and run. Helm’s packaging format, called charts, is a collection of files that describe a related set of Kubernetes resources. Charts are created as files laid out in a particular directory tree, which can then be packaged into versioned archives to be deployed.
Matt Farina, senior staff engineer at Samsung SDS and co-founder of Kubernetes Special Interest group focused on Applications (SIG Apps), has created an informative blog post explaining where package manager Helm fits into the Kubernetes ecosystem of tooling. Drawing on an operating system analogy, Farina states that Helm is “a package manager in the same vein as apt”, which conceptually sits above other abstractions such as ELF Binaries and configuration stored with OS-specific directories like “/etc” and “/opt”. He continues by discussing that in the same way as OS configuration management tooling, such as Chef, Puppet and Ansible are used for managing higher level applications, there are analogous projects that conceptually sit above Helm, including helmfile, armada, landscaper, and others.
Kubernetes management stack for applications with an operator (image via Matt Farina’s blog)
Farina also writes that many operators why wonder why they would need to use a package manager like Helm for managing Kubernetes applications. Much of the reason why package management is desirable comes down to shared reusable expertise targeted around applications.
If you are a typical person operating an application you’re concerned with your application, not the platform it’s running in or the dependencies of your application.
He cites three items to consider:
- Management of distributed application specific operational expertise — developer can depend on a package from someone with expertise so you don’t need to have it and can focus on your specific business needs
- Reusable organisation packages — Custom packages, that the operational experts in a company put together, that can be run locally, in testing, and production in varying reusable circumstances
- Application specific configuration — Operating applications is about the application and applications have varying needs that can be configurable.
It should be noted that Helm is only one solution to the issue of Kubernetes package management and application installation, and Shahidh K Muhammed has created a comprehensive blog post, “Draft vs Gitkube vs Helm vs Ksonnet vs Metaparticle vs Skaffold“, that explores alternatives.
Readers interested within this space are also recommended to familiarise themselves with the Operator Pattern, initially defined by the CoreOS team (now acquired by Red Hat), which define a mechanism to “reliably create, configure, and manage complex application instances atop Kubernetes”. Operators consist of Kubernetes Custom Resources — sometimes referred to as Custom Resource Definitions (CRDs) — and Custom Controllers. Shopify, a large e-commerce platform, makes extensive use of custom controllers, and Niko Kurtti will be exploring this in-depth in his upcoming QCon New York talk “Forced Evolution: Shopify’s Journey to Kubernetes“.
Additional information on Helm can be found at https://helm.sh/. A video from the 2017 KubeCon / CloudNativeCon conference, “Building Helm Charts From the Ground Up” by Amy Chen, discusses how to build Helm charts and can be found on the CNCF’s YouTube channel.