Introduction to Helm

A quick start guide to helm repository, chart

Introduction to Helm

Why Helm?

You have been writing yaml files for kubernetes (K8S) application deployment and it requires modification due to frequent changes in docker image, versions, configuration or environments. You also need to copy and paste to deliver your kubernetes application. It becomes difficult to manage it in source repository.

Helm solves the very same problem of packaging and customizing the kubernetes application deployment with templating and parameters.

What is helm?

Helm is package manager for kubernetes applications which helps to define, install and upgrade kubernetes applications and provides release lifecycle.

Helm Concepts

Here is the helm components overview. HelmChart Concepts.drawio5.png

  • Chart - chart is collection of template yaml files with parameters to be injected with values
  • Template - set of kubernetes yaml files using Go templates
  • Release - deployed helm chart in kubernetes cluster is called helm release
  • Values - parameter values to be applied to chart
  • Repository - hosted index.yaml containing references to chart packages (.tgz) in helm repository

Install Helm

You can install helm with brew. For other environments, refer documentation

brew install helm

Using Helm repository

Before you start with helm, you need to have kubernetes cluster access. You can verify cluster access with kubectl get namespace to check if it lists namespaces available

Following are the steps to install postgresql chart from bitnami helm repository to kubernetes cluster

# add helm repo 
helm repo add bitnami https://charts.bitnami.com/bitnami

# search charts in repo(s) with search string
helm search repo postgresql     

# install postgresql chart
helm install mypgsql bitnami/postgresql

# check the installed helm charts in the kubernetes cluster
helm list

# Uninstall the helm release `mypgsql`
helm uninstall mypgsql

Helm chart structure

Let's understand the directory structure of sample myapp. Refer below GitHub source code for more details.

# create sample helm chart
helm create myapp

# directory structure
myapp
├── Chart.yaml
├── charts
├── templates
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── deployment.yaml
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── service.yaml
│   ├── serviceaccount.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml
  • Chart.yaml - contains information of app version, chart version, maintainer and chart dependencies
  • charts - contains dependent charts called subcharts which can have own templates and values
  • templates - directory has template yaml files and template files starting with _.
  • NOTES.txt - contains help information to be displayed to user when chart is installed / upgraded in kubernetes cluster
  • _helpers.tpl - contains helper templates variables which can be used in yaml files. Files starting _ are not rendered as kubernetes manifests
  • tests - folder contains predefined tests to be executed to validate chart works properly.
  • values.yaml - contains default values which can be overidden by parent chart's values.yaml or by user supplied values.yaml or by --set parameters

Summary

Helm is package manager for kubernetes applications which get packaged as helm chart and can be deployed to almost any kubernetes cluster. Helm chart contains the template kubernetes yaml manifests which can rendered with parameters from values.yaml

Thanks for reading the article. If you find it helpful, please like and do share your feedback, it would encourage me to write more such articles.

In the next article, we will see how we can write a helm chart for spring boot application.