Understanding and Using Helm in Kubernetes
Introduction to Helm
Helm is a package manager for Kubernetes, enabling you to define, install, and manage Kubernetes applications. Think of it as the apt
or yum
for Kubernetes. Helm uses a packaging format called Charts.
Helm Architecture: Helm Client and Tiller
Helm 2
In Helm 2, the architecture was split between a client-side component called “Helm” and a server-side component called “Tiller.” Helm interacted with Tiller to deploy applications.
Helm 3
In Helm 3, the architecture has been simplified and Tiller has been removed. Everything is now client-side, which enhances security by removing the need for a server component that needs cluster-wide access.
Creating Helm Charts
A Helm Chart is a package that contains pre-configured Kubernetes resources. It has a specific directory structure:
Chart.yaml
: Information about the chartvalues.yaml
: Default configuration filetemplates/
: Kubernetes YAML files with templatingcharts/
: Optional dependent charts
To create a new Chart:
helm create [CHART_NAME]
Installing and Managing Helm Releases
A Helm “release” is an instance of a chart running in a Kubernetes cluster.
-
Installing a Release:
helm install [RELEASE_NAME] [CHART]
-
Upgrading a Release:
helm upgrade [RELEASE_NAME] [NEW_CHART]
-
Rollback a Release:
helm rollback [RELEASE_NAME] [REVISION]
-
Listing Releases:
helm list
-
Uninstalling a Release:
helm uninstall [RELEASE_NAME]
Helm Repositories and Best Practices
Repositories
Helm Charts can be shared through Helm Repositories. Official charts are available in the default Helm repo, but you can also add your own:
-
Add Repo:
helm repo add [REPO_NAME] [REPO_URL]
-
Update Repo:
helm repo update
-
Search Repo:
helm search repo [SEARCH_TERM]
Best Practices
- Version Control: Always keep your Helm charts in version control.
- Use Helm Hooks: For lifecycle management.
- Validate with Lint: Use
helm lint
to validate charts. - Test Charts: Use
helm test
to test releases. - Security: Be cautious when using third-party charts. Always review and understand what they do.
Example of Helm Chart with Template and Values
Directory Structure
my-nginx-chart/
|-- templates/
| |-- deployment.yaml
|-- Chart.yaml
|-- values.yaml
Chart.yaml
This file describes the metadata about the Helm chart.
apiVersion: v2
name: my-nginx-chart
description: A Helm chart to deploy Nginx
version: 0.1.0
values.yaml
This file contains the default values for the chart.
replicaCount: 1
image:
repository: nginx
tag: stable
pullPolicy: IfNotPresent
templates/deployment.yaml
This is a Kubernetes Deployment YAML file with Helm templating.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: my-nginx
template:
metadata:
labels:
app: my-nginx
spec:
containers:
- name: my-nginx
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
Installing the Chart
To install this chart, you’ll first need to package it:
helm package my-nginx-chart
This will create a .tgz
file that you can then install into your Kubernetes cluster:
helm install my-nginx-release my-nginx-chart-0.1.0.tgz
Overriding Values
You can override the default values.yaml
settings during install or upgrade:
helm install my-nginx-release my-nginx-chart-0.1.0.tgz --set replicaCount=3
This command will deploy 3 replicas instead of the default 1.
And that’s a simple example of a Helm chart! This chart can be used to deploy an Nginx web server with configurable parameters like replicaCount
and image.tag
. It showcases how to use values.yaml
for default values and templating in Kubernetes YAML manifests.