The official documentation calls Helm as a “The package manager for Kubernetes“, but in fact, Helm is something bigger than just a package manager – it’s more an application controlling tool for their installation, managing, upgrading, configuration, etc.
In this post, we will take an overview of Helm in general, its Charts, templates, variables, and repositories.
The post is really more like an intro to the Help and doesn’t cover some aspects like release versioning, dependencies, etc.
In contrast to the Kubernetes itself – Helm has really good documentation.
Helm operates with packages to run applications in Kubernetes, and in terms of Helm they are called chart, and helm allows to:
create new charts
pack charts into archives (tgz)
work with shared charts using their repositories
install and uninstall charts in a Kubernetes cluster
manage charts releases in a cluster
The main three concepts are:
chart: information necessary to run an application in a Kubernetes cluster
config: information about necessary configuration options to be used by such a chart to create an application instance and manage its releases
release: работающий инстанс chart-а, связанный с определённым config-ом
Helm can be divided into two main part – the client itself, and Helm libraries
Helm client: is a command-line tool (Helm is written in Go), and is responsible for chart creation, working with repositories, releases management, etc
Helm library: is logic part of Helm responsible for work with Kubernetes API to manage charts, their release, installation to a cluster, etc
So, chart – is a collection of files, describing some Kubernetes resources which can be used to create a single-pod application – or a whole composite web-service, including a web-server, a frontend ap and backend applications, caching services, etc.
Charts are organized as a directories and files tree, where the top-directory name is a chart-name.
| |-- NOTES.txt
| |-- _helpers.tpl
| |-- deployment.yaml
| |-- hpa.yaml
| |-- ingress.yaml
| |-- service.yaml
| |-- serviceaccount.yaml
| `-- tests
| `-- test-connection.yaml
example-chart: top-catalog, a chart name
Chart.yaml: a chart’s metadata describing the chart’s purpose, its versions, dependencies, etc
charts: a chart can contain multiply child-charts or subcharts – they’ll be stored here
templates: contains template files to be applied for a Kubernetes cluster using Go templating
NOTES.txt – help-text to be displayed for users
deployment.yaml – an example Kubernetes Deployment manifest
service.yaml – an example Kubernetes Service manifest
values.yaml – contains default values for templates