⎈ Getting Started with Helm: The Kubernetes Package Manager
Introduction to Helm
Helm is the package manager for Kubernetes, helping you manage Kubernetes applications through Helm Charts. These charts provide templating, versioning, and dependency management for your Kubernetes manifests.
What We’ll Cover
- Understanding Helm concepts
- Installing and configuring Helm
- Working with existing charts
- Creating custom charts
- Advanced Helm features and best practices
Prerequisites
- Kubernetes cluster (local or remote)
kubectl
configured- Basic understanding of Kubernetes concepts
Installing Helm
# For macOS with Homebrew
brew install helm
# Verify installation
helm version
Core Concepts
Charts
A Helm chart is a package of pre-configured Kubernetes resources:
- Templates for K8s manifests
- Values for customization
- Chart metadata and dependencies
# Example chart.yaml
apiVersion: v2
name: my-app
description: A Helm chart for my application
type: application
version: 0.1.0
appVersion: "1.0.0"
Values
Values provide configuration that is injected into templates:
# values.yaml
replicaCount: 3
image:
repository: nginx
tag: "1.21.1"
service:
type: ClusterIP
port: 80
Templates
Templates are Kubernetes manifests with Go templating:
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-deployment
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Release.Name }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: {{ .Values.service.port }}
Working with Helm Charts
Adding Repositories
# Add the official stable repository
helm repo add stable https://charts.helm.sh/stable
# Add Bitnami repository
helm repo add bitnami https://charts.bitnami.com/bitnami
# Update repositories
helm repo update
Searching for Charts
# Search for available charts
helm search repo wordpress
# Get chart details
helm show chart bitnami/wordpress
# See all values
helm show values bitnami/wordpress
Installing Charts
# Install with default values
helm install my-release bitnami/wordpress
# Install with custom values
helm install my-release bitnami/wordpress \
--set wordpressUsername=admin \
--set wordpressPassword=password \
--set mariadb.auth.rootPassword=secretpassword
# Install with values file
helm install my-release bitnami/wordpress -f values.yaml
Creating Your Own Chart
Chart Structure
mychart/
Chart.yaml # Chart metadata
values.yaml # Default values
charts/ # Chart dependencies
templates/ # Template files
NOTES.txt # Usage notes
deployment.yaml
service.yaml
_helpers.tpl # Template helpers
Create a New Chart
# Create a new chart
helm create mychart
# Lint the chart
helm lint mychart
# Package the chart
helm package mychart
Template Functions and Pipelines
# Example of template functions
metadata:
name:
labels:
# Using conditionals
apiVersion: networking.k8s.io/v1
kind: Ingress
# Loops
---
apiVersion: v1
kind: ConfigMap
metadata:
name:
data:
:
Advanced Helm Features
Dependencies
Define dependencies in Chart.yaml
:
dependencies:
- name: mongodb
version: 10.0.0
repository: https://charts.bitnami.com/bitnami
condition: mongodb.enabled
- name: redis
version: 15.0.0
repository: https://charts.bitnami.com/bitnami
condition: redis.enabled
Subcharts
Create reusable components:
# mychart/charts/mysubchart/values.yaml
service:
name: nginx
type: ClusterIP
Hooks
Implement lifecycle hooks:
# templates/hooks/pre-install-hook.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: -pre-install
annotations:
"helm.sh/hook": pre-install
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": hook-succeeded
spec:
template:
spec:
containers:
- name: pre-install-job
image: busybox
command: ['sh', '-c', 'echo Pre-install job']
restartPolicy: Never
Best Practices
1. Chart Organization
- Use consistent naming
- Group related resources
- Implement proper labels
# _helpers.tplapp.kubernetes.io/name:
app.kubernetes.io/instance:
app.kubernetes.io/version:
2. Values Management
- Provide good defaults
- Document all values
- Use hierarchical structure
# values.yaml
global:
imageRegistry: "docker.io"
imagePullSecrets: []
storageClass: ""
application:
replicaCount: 2
image:
repository: nginx
tag: latest
pullPolicy: IfNotPresent
3. Security
- Use RBAC
- Implement network policies
- Secure sensitive data
# templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
name:
type: Opaque
data:
:
Helm Commands Cheatsheet
# List releases
helm list
# Upgrade a release
helm upgrade my-release bitnami/wordpress -f values.yaml
# Rollback a release
helm rollback my-release 1
# Uninstall a release
helm uninstall my-release
# Get release status
helm status my-release
# Get release history
helm history my-release
Video Resources
Getting Started
- Helm 3 Deep Dive by CNCF
- Helm Tutorial for Beginners by TechWorld with Nana
Advanced Topics
- Helm Chart Development by IBM Technology
- Helm Best Practices by CNCF
Additional Resources
- Official Helm Documentation
- Artifact Hub - Find and publish Helm charts
- Helm Chart Development Guide
- Helm Best Practices Guide
Written on July 10, 2025