If Kubernetes Is Your Home, Helm Is Your Ikea
Kubernetes provides a home for all your containerized applications. But how do you get that home furnished with the likes of databases and web apps? That's where Helm comes in. If Kubernetes is your home, Helm is where you get your furniture.
Kubernetes is a home for you apps
Kubernetes takes a cluster of machines (bare metal or VMs) and overlays a sophisticated container management system. Following the principles of declarative infrastructure, Kubernetes provides dozens of kinds of resource definitions, from simple container execution environments (Pods) to ingress points, service abstractions, and persistent storage volumes. Together these make Kubernetes a flexible and powerful home for running containerized applications.
But deploying new applications into that home comes with a steep learning curve, and what Adam Reese calls the Kubernetes development cycle.
- Copy YAML
- Paste YAML
- Fix indents
Helm gets you past all of that.
Helm is Ikea
How many of us have furniture in our homes? I would guess the answer is all of us. But how many of us build the furniture in our homes?
Far fewer of us do that.
Those who do possess a high degree of technical knowledge, together with proficiency with numerous tools. And they are passionate about crafting every detail of their furniture.
But many of us choose to rely on craftspeople to build our furniture for us. We simply choose what we want and handle a few minor details to tailor that furniture to our personal tastes. And that's why furniture manufacturers like Ikea are such a success. They reduce furnishing to a few simple steps with a few simple tools.
Kubernetes provides all of the raw material for building your cluster's furniture. Pods, DaemonSets, ServiceAccounts, PersistentVolumeClaims, ConfigMaps, Services... those who choose to build deep proficiency can carefully model the details of each application they choose to deploy.
But just as many of us prefer Ikea to the woodworker's workshop, many of us would rather rely on existing expertly assembled Kubernetes applications.
For example, I could create my own MySQL container image, then go through the process of assembling the right combination of parameters for a Kubernetes deployment. This would probably require at least setting up a Service, Deployment, ConfigMap, and a PersistenVolume/PersistentVolumeClaim pair.
It would be so much nicer, though, to grab an existing configuration that was crafted by an expert, and simply have the option to tweak and tune it to my personal needs.
And that's the problem that Helm is designed to solve.
Helm's Charts are pre-packaged configurations of expertly crafted Kubernetes resources. Those who would rather simply begin with an existing configuration of MySQL can install the Helm chart:
$ helm install stable/mysql
Or they can begin with that chart, and customize parameters:
$ helm install stable/mysql -f myconfig.yaml
Or they can grab the chart and dive into the mechanics, modifying it deeply:
$ helm fetch stable/mysql $ cd mysql $ # edit however you desire $ helm install .
And those who are Kubernetes craftspeople can create their own Helm charts, and then share them with others (whether that's their team or a broader audience).
$ helm create customMySQL $ # edit templates and config to create a chart $ helm package customMySQL
Once the chart is packaged, it can be distributed to other Helm users.
Often, when we talk about Helm, we talk about it as a package manager for Kubernetes. But in more generic terms, we can really think of it as a tool for for sharing Kubernetes knowledge in order to collectively improve the quality of our cloud native applications.
Helm is designed to lower the learning curve for Kubernetes newcomers. It's designed to make application re-use easy. And it's designed to encourage the development of (and sharing of) Kubernetes best-practices.
Kubernetes is a luxurious home that is redefining the way we run applications. And Helm is the way to furnish that home with high-quality apps.