Helm Overview
Before learning Helm, you should first understand Kubernetes. If you do not know Kubernetes yet, read about Kubernetes first.
Helm Overview
Helm is a package manager for Kubernetes clusters, and this tool called Helm is used to deploy applications that run in Kubernetes clusters.
Helm is a tool that automatically deploys applications based on configuration files. As a Kubernetes application package manager, it is currently one of the most popular products.
Helm was one of the projects from Deis, which Microsoft acquired in 2017. It was announced as Helm Classic at the first KubeCon, The Kubernetes Community Conference, held in 2015. The Helm project was integrated with the Kubernetes project in January 2016 and became a subproject of Kubernetes. Helm 2.0 was released in late 2016, and Helm 3.0 was released in June 2018, after which it was promoted to a full CNCF (Cloud Native Computing Foundation) project.
“Helm” as the De Facto Standard Tool for Deploying Applications to Kubernetes
Recently, more services are being operated using Kubernetes, a container cluster technology, and software designed to run on Kubernetes is also appearing. At the same time, deploying applications on Kubernetes involves many challenges.
Kubernetes works well with microservices architecture, which implements services by dividing them into multiple small components. In services with this kind of structure, each component must be deployed individually to the cluster. Also, to expose services externally or configure various settings, you need to create “resources” in the Kubernetes cluster and apply settings. These tasks can become complex, so various tools have appeared to support deployment to Kubernetes clusters or manage deployed containers.
Helm, introduced here, is one of the tools that supports application deployment to Kubernetes clusters (Figure 1).
Figure 1. Helm official website
Most modern operating systems and programming languages provide services, or repositories, that collect and publish software packages created by third parties. They also provide software called package managers, which make it possible to search, download, and install the software published there with simple operations. Helm is also called a package manager for Kubernetes, and it has features similar to those of package managers for operating systems or programming languages. The specific features provided by Helm can be summarized as follows.
- Automatically create various resources based on configuration files called Charts
- Manage deployed applications, such as deleting and updating them
- Find, download, and install Charts published in repositories
- Package Charts and upload them to repositories
Docker, the container technology that forms the basis of Kubernetes, already provides a repository mechanism for container images. Therefore, Helm does not directly handle images themselves. Instead, it manages only configuration files called Charts in repositories. Except for that point, the features provided by Helm are almost the same as those provided by ordinary package managers. Using the CLI tool called helm, you can download Charts and automatically deploy applications to a cluster based on them.
Helm also provides official repositories named “stable” and “incubator,” and many third-party repositories are also available. Charts published in these repositories can be searched through a site called Artifact Hub (Figure 2).
Figure 2. Helm official repository “Artifact Hub”
Helm History and Community
Helm v1.0 was released in February 2016, and there have been two major updates so far. The latest version at the time of this article is v3.9.4, released in August 2022.
- Helm v1
- Started in 2015 as an internal DEIS project
- DEIS was acquired by Microsoft in 2017
- Started in 2015 as an internal DEIS project
- Helm v2
- January 2016: Joined the Google project
- 2016 to 2018: Helm 2 matured, from 2.0.0 to 2.12.2
- June 2018: Joined the CNCF project
- Helm v3
- November 2019: Release announced
- 2019 to 2021: Helm 3 matured, from 3.0.0 to 3.5.2
At first, Helm was developed as a Kubernetes subproject. Later, it came under the Cloud Native Computing Foundation (CNCF), a nonprofit organization under the Linux Foundation, and it is still developed under that structure. CNCF promotes the development of cloud-related technologies, and Kubernetes itself is also developed under CNCF. Because of this history, Helm is also known as the de facto official package manager for Kubernetes.
The official repositories provided by the Helm project itself, such as “stable” and “incubator,” already publish Charts for many applications, and many Charts created by maintainers are also available. In addition, software such as Istio and Jenkins X, Kubernetes-related tools introduced earlier, also adopt and use Helm as their official installation tool.
The word helm means the steering wheel of a ship. The word chart also comes from navigational maps.
Key Features of Helm
Helm is written in Go and consists of two components: the Helm client and the Helm library.
Through the Helm client, Helm can install, or deploy, and remove applications running on Kubernetes, similar to the Linux yum command. Application management is performed using packaged configuration files called Charts. Charts do not contain the application itself; they contain the information required to build the application. Also, many Charts are published on a site called Artifact Hub and can be used.
The Helm library communicates with Kubernetes using the Kubernetes client library. Communication uses REST+JSON. It does not need its own database, and it stores data in Kubernetes Secrets.
The basic concepts of Helm are as follows.
- Chart: a set of configuration files required to create an application instance.
- Configuration: used to set various parameters for an application when installing a Chart.
- Release: an instance in which a Chart has been installed and the application, or release object, is in a runnable state.
Helm can do the following.
- Create new Charts
- Package Charts into Chart archives, or tgz files
- Work with Chart repositories where Charts are stored
- Install and remove Charts in Kubernetes clusters
- Manage the release lifecycle of Charts installed with Helm
The roles of the Helm client and library are as follows.
Helm Client
This command-line program for end users is responsible for the following.
- Local Chart development
- Repository management
- Release management
- Working with the Helm library to submit Charts or request release upgrades and removals
Helm Library
The Helm library performs all Helm operations together with the Kubernetes API.
- Create release objects from Charts
- Build release objects and install them in Kubernetes
- Upgrade or remove release objects
Tools Similar to Helm
Tools similar to Helm include Ksonnet, Kapitan, Kustomize, kompose, and Ansible.
Examples of Helm Commands
| Command | Description |
|---|---|
| helm install | Installs a Chart. |
| helm list | Displays the list of releases. |
| helm pull | Downloads a Chart and expands it locally. |
| helm repo add | Adds a Chart repository. |
| helm repo list | Displays the list of Chart repositories. |
| helm search | Searches for Charts. |
| helm show | Displays Chart details. |
| helm uninstall | Deletes a release. |
| helm upgrade | Upgrades to a new Chart. |