Comprehensive guide8 min read

Deploy with Helm Charts: Installation, Configuration and Best Practices

SFEIR Institute

Key Takeaways

  • 70% of organizations use Helm in their Kubernetes environments (Orca Security 2025)
  • Helm bundles YAML manifests, configs, and dependencies into reusable charts
  • The guide covers installation, configuration, upgrade, and debugging of charts in production

Helm is the package manager for Kubernetes. It simplifies deploying complex applications by bundling YAML manifests, configurations, and dependencies into a reusable format called a chart. According to Orca Security 2025, 70% of organizations use Helm in their Kubernetes environments.

TL;DR: This guide walks you through from installing Helm to creating your own charts. You'll learn how to install, configure, upgrade, and troubleshoot your Helm deployments in production. Each step includes the commands and expected outputs.

To master these skills and prepare for the CKAD, discover the LFD459 Kubernetes for Application Developers training.


What Is Helm and Why Use It?

Helm is a templating and packaging tool for Kubernetes. It allows you to version, share, and deploy applications in a reproducible manner.

Helm adds an abstraction layer on top of Kubernetes, significantly simplifying the deployment of complex applications.

Key Definitions

TermDefinition
ChartA chart is a Helm package containing all Kubernetes manifests needed to deploy an application
ReleaseA release is an instance of a chart deployed in your cluster with a specific configuration
RepositoryA repository is an HTTP server hosting downloadable Helm charts
ValuesValues are configuration parameters you pass to the chart to customize the deployment
TemplateA template is a YAML file with Go variables that generates the final Kubernetes manifests
Remember: Helm saves you from copy-pasting dozens of YAML files. You manage a single source of truth with configurable parameters.

Prerequisites Before Starting

Before installing Helm, verify that your environment meets these requirements:

Working Kubernetes Cluster

You need an active Kubernetes cluster. Verify with:

kubectl cluster-info
# Expected output:
# Kubernetes control plane is running at https://127.0.0.1:6443
# CoreDNS is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

kubectl Configured

Your kubeconfig file must point to the correct cluster:

kubectl config current-context
# Expected output: the name of your active context (e.g., minikube, docker-desktop, production-cluster)

Compatible Versions

In 2026, use Helm 3.14+ with Kubernetes 1.28+. Helm 3 removed Tiller, making installation more secure. Check the Kubernetes deployment strategies to choose your approach.


Step 1: Install Helm on Your Machine

You have several options for installing Helm. Choose the one suited to your operating system.

Installation on macOS

brew install helm

Installation on Linux

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

Installation on Windows

choco install kubernetes-helm

Verify Installation

Confirm that Helm works correctly:

helm version
# Expected output:
# version.BuildInfo{Version:"v3.14.2", GitCommit:"c309b6f0ff63856811846ce18f3bdc93d2b4d54b", GitTreeState:"clean", GoVersion:"go1.21.7"}
Remember: Helm 3 requires no cluster-side component. Installation is limited to your workstation.

Step 2: Add and Manage Repositories

Helm repositories work like apt or npm. You add them to access available charts.

Add the Official Repository

helm repo add bitnami https://charts.bitnami.com/bitnami
# Expected output:
# "bitnami" has been added to your repositories

Update Repositories

Run this command regularly to fetch the latest versions:

helm repo update
# Expected output:
# Hang tight while we grab the latest from your chart repositories...
# ...Successfully got an update from the "bitnami" chart repository
# Update Complete. ⎈Happy Helming!⎈

List Your Repositories

helm repo list
# Expected output:
# NAME    URL
# bitnami https://charts.bitnami.com/bitnami

To manage your deployments effectively, compare Helm vs Kustomize based on your needs.


Step 3: Search and Inspect Charts

Before installing a chart, examine its content and documentation. This step prevents surprises in production.

Search for a Chart

helm search repo nginx
# Expected output:
# NAME                    CHART VERSION   APP VERSION     DESCRIPTION
# bitnami/nginx           15.14.0         1.25.4          NGINX Open Source is a web server...
# bitnami/nginx-ingress   9.10.1          1.9.6           NGINX Ingress Controller...

Display Chart Information

helm show chart bitnami/nginx
# Expected output:
# apiVersion: v2
# appVersion: 1.25.4
# description: NGINX Open Source is a web server...
# name: nginx
# version: 15.14.0

View Configurable Values

This command is essential. It lists all parameters you can customize:

helm show values bitnami/nginx > nginx-values.yaml

Open the generated file to discover available options. According to the CNCF Annual Survey 2025, 82% of container users run Kubernetes in production. Understanding configuration options is therefore critical.

Remember: Always read the default values before installing. You'll avoid insecure or oversized configurations.

Step 4: Install Your First Chart

Installation creates a release in your cluster. Each release has a unique name that you choose.

Basic Installation

helm install my-nginx bitnami/nginx --namespace web --create-namespace
# Expected output:
# NAME: my-nginx
# LAST DEPLOYED: Fri Feb 28 10:30:00 2026
# NAMESPACE: web
# STATUS: deployed
# REVISION: 1

Verify the Deployment

kubectl get pods -n web
# Expected output:
# NAME                        READY   STATUS    RESTARTS   AGE
# my-nginx-5d9c6d4c8b-7xk2m   1/1     Running   0          45s

List Installed Releases

helm list -n web
# Expected output:
# NAME      NAMESPACE   REVISION    UPDATED                                 STATUS      CHART           APP VERSION
# my-nginx  web         1           2026-02-28 10:30:00.123456789 +0100 CET  deployed    nginx-15.14.0   1.25.4

Integrate your Helm deployments into a CI/CD pipeline for Kubernetes to automate your releases.


Step 5: Customize with Values

You customize a chart by overriding its values. Two methods exist: inline or via file.

Method 1: Inline Parameters

helm install my-nginx bitnami/nginx \
--set replicaCount=3 \
--set service.type=ClusterIP \
--namespace web

Create a custom-values.yaml file:

# custom-values.yaml
replicaCount: 3

service:
type: ClusterIP
port: 80

resources:
limits:
cpu: 200m
memory: 256Mi
requests:
cpu: 100m
memory: 128Mi

autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 80

Install with this file:

helm install my-nginx bitnami/nginx -f custom-values.yaml --namespace web

Combine Multiple Files

You can layer configurations. Later files override earlier ones:

helm install my-nginx bitnami/nginx \
-f base-values.yaml \
-f production-values.yaml \
--namespace web
Remember: Version your values files in Git. This is your source of truth for reproducing deployments.

Check the guide on Kubernetes monitoring and troubleshooting to monitor your deployed applications.


Step 6: Upgrade and Rollback Your Releases

Upgrades apply new configurations or versions. Helm keeps history for rollbacks.

Upgrade a Release

Modify your custom-values.yaml file, then:

helm upgrade my-nginx bitnami/nginx -f custom-values.yaml --namespace web
# Expected output:
# Release "my-nginx" has been upgraded. Happy Helming!
# NAME: my-nginx
# LAST DEPLOYED: Fri Feb 28 14:45:00 2026
# NAMESPACE: web
# STATUS: deployed
# REVISION: 2

View History

helm history my-nginx -n web
# Expected output:
# REVISION    UPDATED                     STATUS      CHART           APP VERSION     DESCRIPTION
# 1           Fri Feb 28 10:30:00 2026    superseded  nginx-15.14.0   1.25.4          Install complete
# 2           Fri Feb 28 14:45:00 2026    deployed    nginx-15.14.0   1.25.4          Upgrade complete

Rollback to a Previous Version

helm rollback my-nginx 1 -n web
# Expected output:
# Rollback was a success! Happy Helming!

Verify that the rollback worked:

helm history my-nginx -n web
# Revision 3 appears with description "Rollback to 1"

For zero-downtime deployments, study Kubernetes Rolling Update or Blue-Green Deployment.


Step 7: Create Your Own Chart

You can package your applications into reusable charts. This skill is tested on the CKAD.

Generate the Structure

helm create my-app
# Expected output:
# Creating my-app

Generated Chart Structure

my-app/
├── Chart.yaml          # Chart metadata
├── values.yaml         # Default values
├── templates/          # Kubernetes templates
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   ├── hpa.yaml
│   └── _helpers.tpl    # Reusable functions
└── charts/             # Dependencies

Test Locally Before Installation

Validate your chart's syntax:

helm lint my-app
# Expected output:
# ==> Linting my-app
# [INFO] Chart.yaml: icon is recommended
# 1 chart(s) linted, 0 chart(s) failed

Generate manifests without installing:

helm template my-app ./my-app -f custom-values.yaml
# Displays generated YAMLs for verification

Dry-Run Installation

helm install my-app ./my-app --dry-run --debug -n production
# Simulates installation and displays potential errors
Remember: Systematically test with lint, template, and dry-run. You'll detect errors before they reach production.

The LFD459 training covers Helm chart creation in detail for the CKAD.


Troubleshooting Common Errors

Error: "INSTALLATION FAILED: cannot re-use a name"

Cause: A release with this name already exists.

helm list -n web
# Check if the release exists
helm uninstall my-nginx -n web
# Then reinstall

Error: "Error: UPGRADE FAILED: another operation is in progress"

Cause: A previous operation is stuck.

helm history my-nginx -n web
# Identify the release in "pending-*" state
kubectl get secrets -n web -l owner=helm
# Delete the corresponding secret if necessary

Pods in CrashLoopBackOff After Installation

Diagnosis:

kubectl describe pod <pod-name> -n web
kubectl logs <pod-name> -n web --previous

Common solutions:

  • Check resources (insufficient CPU/memory)
  • Verify environment variables
  • Validate referenced secrets and ConfigMaps

For deeper diagnosis, consult the Kubernetes monitoring and troubleshooting guide.

Chart Not Found in Repository

helm repo update
helm search repo <chart-name> --versions
# Verify the repository contains the chart

Production Best Practices

Version Everything

Store your values in Git with your application code. Use branches for environments (dev, staging, production).

Use Dedicated Namespaces

helm install my-app ./my-app --namespace production --create-namespace

Enable Long History

By default, Helm keeps 10 revisions. Increase if needed:

helm upgrade my-app ./my-app --history-max 25

Sign Your Charts

For production, enable signature verification:

helm verify my-app-1.0.0.tgz
helm install my-app my-app-1.0.0.tgz --verify

According to Spectro Cloud State of Kubernetes 2025, 80% of organizations manage more than 20 clusters in production. Standardization via Helm becomes essential.


Next Steps: Train with SFEIR

You now master Helm fundamentals. To go further and obtain your certification, explore these trainings:

Check the training calendar to book your next session. As TealHQ states: "Don't let your knowledge remain theoretical - set up a real Kubernetes environment to solidify your skills."

Contact our advisors to define your Kubernetes certification path.