What is Helm?
Package Manager
Charts
Releases
Architecture
Learn what Helm is, the Kubernetes package manager. Understand charts, releases, architecture, and how Helm simplifies Kubernetes application deployment.
What is Helm?
Helm is the package manager for Kubernetes. It helps you define, install, and upgrade complex Kubernetes applications. Helm charts are packages of pre-configured Kubernetes resources that can be versioned, shared, and reused.
Helm solves the challenge of deploying complex microservices applications that consist of multiple interdependent Kubernetes resources. Instead of managing dozens of YAML files manually, you can use a single chart with configurable parameters.
Key Concept: Helm is often described as the "apt-get" or "yum" for Kubernetes. It provides a way to package, version, and deploy applications consistently across environments.
Helm Architecture
Helm consists of two main components: the Helm client and the chart repository. In Helm v3, the server-side Tiller component was removed for better security and simplicity.
Helm CLI
The command-line interface for interacting with Helm. Used for chart creation, installation, upgrades, and repository management. Communicates directly with the Kubernetes API.
Chart Storage
Helm v3 stores release information as Kubernetes Secrets in the cluster namespace. This eliminates the need for Tiller and improves security.
Render Engine
Helm uses Go templates with custom functions and pipelines to render Kubernetes manifests from chart templates and values files.
Chart Repository
OCI-compliant repositories for storing and sharing charts. Supports HTTP/HTTPS and OCI registry protocols.
# Install Helm v3
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
# Verify installation
helm version
# Add Helm repositories
helm repo add stable https://charts.helm.sh/stable
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# Install a chart
helm install my-nginx bitnami/nginx --namespace default
# List releases
helm list
helm list --all-namespaces
# Uninstall a release
helm uninstall my-nginx
Helm v2 vs v3: Helm v3 removed Tiller for better security and simplicity. Always use Helm v3 for new projects. The command syntax is similar, but the architecture is significantly different.
Key Helm Concepts
Chart
A Helm package containing all Kubernetes resources needed to run an application. Includes templates, default values, and metadata.
Release
An instance of a chart running in a Kubernetes cluster. Each release has a unique name and tracks its own history and state.
Values
Configuration parameters that customize chart deployment. Values can be defined in values.yaml files or overridden during installation.
Template
Go template files that define Kubernetes resources. Templates use values and helper functions to generate the final manifests.
Repository
A collection of packaged charts. Charts can be stored in HTTP servers, OCI registries, or local filesystems.
Dependency
A subchart that a chart depends on. Dependencies are managed in the Chart.yaml file and can be versioned and updated.
# Example: Installing a chart with custom values
helm install my-release bitnami/nginx \
--set replicaCount=3 \
--set service.type=LoadBalancer \
--set image.tag=1.25
# Example: Using a values file
helm install my-release bitnami/nginx -f custom-values.yaml
# Example: Upgrading a release
helm upgrade my-release bitnami/nginx --set replicaCount=5
# Example: Rolling back a release
helm rollback my-release 2
# Example: Viewing release history
helm history my-release
Helm v2 vs Helm v3: Key Differences
Tiller Removal
Helm v3 removed Tiller, the server-side component. Helm now communicates directly with the Kubernetes API, improving security and simplifying operations.
Security
With no Tiller, there's no cluster-wide service account. Releases are stored as Secrets in the namespace, providing better RBAC and isolation.
OCI Registry Support
Helm v3 supports OCI registries for storing and distributing charts. This provides better integration with container registries.
JSON Schema Validation
Helm v3 supports values.schema.json for validating values files, preventing misconfigurations before installation.
Helm v2 Deprecation: Helm v2 is deprecated and no longer receives security updates. Always use Helm v3 for new projects and migrate existing Helm v2 deployments.
Frequently Asked Questions
What is the difference between Helm and Kubernetes?
Kubernetes is a container orchestration platform. Helm is a package manager for Kubernetes. Helm helps you deploy, upgrade, and manage applications on Kubernetes. You use Helm to package Kubernetes resources, and Kubernetes to run them.
What is a Helm chart?
A Helm chart is a package of pre-configured Kubernetes resources. It contains templates, default values, and metadata. Charts can be versioned, shared, and reused across different environments.
What is the difference between Helm v2 and v3?
Helm v3 removed Tiller, the server-side component, for better security. It also added support for OCI registries, JSON Schema validation, and improved release management. Always use Helm v3.
How do I install a chart from a repository?
Add the repository with helm repo add, then install with helm install. For example: helm repo add bitnami https://charts.bitnami.com/bitnami and helm install my-nginx bitnami/nginx.
What is a Helm release?
A release is an instance of a chart running in a Kubernetes cluster. Each release has a unique name, version, and tracks its own history. You can have multiple releases of the same chart with different configurations.
How do I rollback a Helm release?
Use helm history <release-name> to see revisions, then helm rollback <release-name> <revision> to rollback. Helm stores release history in Kubernetes Secrets.
Can I use Helm with GitOps?
Yes! ArgoCD and Flux both support Helm charts natively. You can store charts in Git and use ArgoCD or Flux to automatically sync and deploy them to your clusters.
What are the alternatives to Helm?
Alternatives include Kustomize (configuration management), YAML manifests (manual), and operators (automation). Helm is the most popular package manager for Kubernetes.