Managing applications in Kubernetes can be complex, requiring multiple YAML files to define resources such as Deployments, Services, ConfigMaps, and Secrets. As applications scale, manually maintaining and updating these configurations becomes cumbersome and error-prone. This is where Helm comes in.
Helm is a package manager for Kubernetes that simplifies deployment by bundling application configurations into reusable, version-controlled Helm charts. With Helm, you can deploy applications with a single command, manage updates seamlessly, and roll back to previous versions if needed.
Why Use Helm?
Simplifies Deployments – Deploy complex applications with a single command instead of managing multiple YAML files.
Parameterization & Reusability – Configure deployments dynamically using values.yaml, making it easy to manage multiple environments (dev, staging, prod).
Version Control & Rollbacks – Helm tracks deployments, allowing you to roll back to previous versions in case of failures.
Dependency Management – Install and manage application dependencies effortlessly.
Integration with CI/CD & GitOps – Automate deployments with tools like ArgoCD, FluxCD, and GitHub Actions.
Try Dremio’s Interactive Demo
Explore this interactive demo and see how Dremio's Intelligent Lakehouse enables Agentic AI
What You'll Learn in This Guide
In this blog, we’ll cover:
What Helm is and how it works – Understanding its architecture and components.
Installing and configuring Helm – Setting up Helm for your Kubernetes cluster.
Understanding Helm charts – Exploring chart structure, templates, and values.
Writing your own Helm chart – Step-by-step guide to creating a custom chart.
Deploying applications with Helm – Installing, upgrading, and rolling back releases.
Best practices for Helm in production – Security, GitOps integration, and monitoring.
By the end of this guide, you'll have a strong foundation in Helm and be able to deploy, manage, and scale Kubernetes applications efficiently.
Understanding Helm: The Package Manager for Kubernetes
What is Helm?
Helm is a package manager for Kubernetes that helps deploy, configure, and manage applications in a Kubernetes cluster. Instead of manually writing and applying multiple Kubernetes YAML manifests, Helm allows you to package them into reusable Helm Charts, simplifying deployment and maintenance.
Why Use Helm?
Managing Kubernetes resources can become complex, especially when deploying applications with multiple components (Deployments, Services, ConfigMaps, Secrets, etc.). Helm provides several advantages:
Simplifies Deployments – Automates the process of applying multiple YAML files.
Versioning & Rollbacks – Tracks different versions of deployments and allows rollback if necessary.
Parameterization & Reusability – Uses a templating system (values.yaml) to customize deployments.
Dependency Management – Simplifies installing and upgrading application dependencies.
Consistent Configuration Across Environments – Makes it easy to manage different configurations for dev, staging, and production.
How Does Helm Compare to Traditional Kubernetes Manifests?
Feature
Kubernetes YAML Manifests
Helm Charts
Management
Requires manually applying multiple YAML files
Uses a single Helm command
Configuration
Static YAML definitions
Dynamic templating via values.yaml
Version Control
Difficult to track changes manually
Built-in versioning & rollback
Reusability
Limited; each deployment needs its own YAML
Reusable and configurable charts
Dependencies
Managed manually
Handled via requirements.yaml (deprecated) or Chart.yaml
How Helm Works
Helm Components and Architecture
Helm follows a client-only architecture in Helm v3, directly interacting with the Kubernetes API server without requiring a backend component like Tiller (which was used in Helm v2). Below are the core elements of Helm:
Helm CLI – The command-line interface manages Helm charts, releases, and repositories.
Helm Charts – Packaged Kubernetes applications that define resources like Deployments, Services, ConfigMaps, and Secrets.
Helm Repository – A collection of Helm charts stored in a remote or local location (e.g., Artifact Hub).
Helm Release – A deployed instance of a Helm chart, stored as metadata inside the Kubernetes cluster.
Kubernetes API Server – Helm interacts with the Kubernetes API to apply resources as defined in the chart.
Helm Workflow: How Helm Manages Deployments
Fetching Charts – Helm can pull pre-built charts from repositories using helm repo add and helm search repo.
Templating and Rendering – Helm dynamically replaces values in the YAML templates using the values.yaml file before applying them.
Creating a Release – When a Helm chart is installed, Helm assigns it a unique release name and applies the rendered templates to the Kubernetes cluster.
Versioning and Rollbacks – Helm maintains a history of releases, allowing easy upgrades (helm upgrade) and rollbacks (helm rollback).
Uninstalling Releases – Helm can remove all associated Kubernetes resources using helm uninstall.
Helm Command Lifecycle
Command
Purpose
helm repo add <repo-name> <repo-url>
Adds a Helm chart repository
helm search repo <keyword>
Searches for a chart in repositories
helm install <release-name> <chart-name>
Installs a Helm chart and creates a release
helm list
Lists all active Helm releases
helm status <release-name>
Shows details of a deployed release
helm upgrade <release-name> <chart-name>
Upgrades an existing release to a new chart version
helm rollback <release-name> <revision>
Rolls back a release to a previous version
helm uninstall <release-name>
Deletes a release and removes associated resources
Helm in Action: A Simple Example
Let's say you want to deploy NGINX using Helm. You can do this with a single command:
Installs the NGINX Helm chart from the Bitnami repository.
Creates a Helm release named my-nginx in the cluster.
To check the status of the deployment:
helm list
helm status my-nginx
To uninstall the release:
helm uninstall my-nginx
Installing and Configuring Helm
Before using Helm, install it on your local machine and configure it to work with your Kubernetes cluster. This section will walk through the installation process and initial setup.
Prerequisites
A Kubernetes cluster running locally (e.g., Minikube, Kind) or in the cloud (e.g., AKS, GKE, EKS).
kubectl Installed and configured to communicate with your cluster.
Installing Helm
Helm can be installed on macOS, Linux, and Windows using various package managers.
To fetch the latest charts from all added repositories, run:
helm repo update
Searching for Helm Charts
To search for a specific application within your configured repositories:
helm search repo nginx
Installing a Helm Chart
Once Helm is set up, you can deploy an application. For example, to deploy NGINX using the Bitnami Helm chart:
helm install my-nginx bitnami/nginx
This will:
Download the NGINX chart.
Deploy the necessary Kubernetes resources.
Assign the release name my-nginx.
Checking the Installation
List all active Helm releases:
helm list
Check the status of a specific release:
helm status my-nginx
Uninstalling a Helm Release
To remove the my-nginx release and all associated resources:
helm uninstall my-nginx
Understanding Helm Charts
What is a Helm Chart?
A Helm chart is a packaged application definition that contains Kubernetes resource templates and default configuration values. It allows you to deploy complex applications with a single command while keeping configurations modular and reusable.
Each chart defines:
What Kubernetes resources to deploy (e.g., Deployments, Services, ConfigMaps).
How those resources should be configured using a parameterized values file (values.yaml).
Dependencies and metadata required for installation.
Structure of a Helm Chart
When you create a Helm chart, it follows a specific directory structure:
mychart/
│── charts/ # Directory for chart dependencies (other charts)
│── templates/ # Contains Kubernetes YAML templates
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ ├── _helpers.tpl # Contains reusable template functions
│── Chart.yaml # Metadata about the chart (name, version, description)
│── values.yaml # Default configuration values for the chart
│── README.md # Documentation about the chart
Each file in this structure serves a specific purpose:
Chart.yaml – Contains metadata such as chart name, version, and description.
values.yaml – Defines default values that can be overridden during installation.
templates/ – Holds Kubernetes manifest templates using Helm’s templating syntax.
charts/ – Stores dependencies (other charts required for deployment).
README.md – Documents how to use the chart.
Example: Chart.yaml
The Chart.yaml file provides information about the chart:
apiVersion: v2
name: mychart
description: A sample Helm chart for Kubernetes
type: application
version: 1.0.0
appVersion: 1.16.0
name: The chart's name.
description: A brief description of what the chart does.
version: The chart version (used for versioning updates).
appVersion: The application version the chart deploys.
Example: values.yaml
The values.yaml file defines default configuration values:
Once you've modified the necessary files, package the chart:
helm package mychart
This creates a .tgz archive of the chart, making it ready for distribution.
Step 6: Install the Chart
Deploy the chart to your Kubernetes cluster:
helm install my-nginx ./mychart
This:
Parses templates.
Replaces placeholders with values from values.yaml.
Applies the resources to Kubernetes.
Step 7: Verify the Deployment
Check the deployed resources:
helm list
kubectl get pods
kubectl get svc
Step 8: Uninstall the Chart
To remove the deployment, use:
helm uninstall my-nginx
Deploying Applications with Helm
Once you've created or downloaded a Helm chart, you can use Helm to deploy and manage applications in your Kubernetes cluster. This section will review the deployment process, including installation, upgrades, rollbacks, and uninstallation.
Step 1: Installing a Helm Chart
To deploy an application using Helm, use the helm install command:
helm install my-nginx ./mychart
my-nginx is the release name (a unique identifier for this deployment).
./mychart is the path to the Helm chart.
If you are installing a chart from a repository, such as Bitnami, use:
This updates the deployment while keeping existing resources intact.
Step 5: Rolling Back to a Previous Version
Helm maintains a history of releases, allowing you to roll back if needed.
List the release history:
helm history my-nginx
Roll back to a specific revision:
helm rollback my-nginx 1
Step 6: Uninstalling a Helm Release
To remove a Helm deployment and all its associated resources, run:
helm uninstall my-nginx
To confirm deletion:
helm list
kubectl get all
Helm Best Practices
Using Helm effectively requires following best practices to ensure maintainability, security, and scalability of deployments. This section outlines key strategies for optimizing Helm usage in production environments.
1. Organizing Values in values.yaml for Clarity
A well-structured values.yaml file improves readability and maintainability.
✅ Good Example: Structured and Documented
replicaCount: 3 # Number of replicas for high availability
image:
repository: nginx
tag: latest
pullPolicy: IfNotPresent # Pull policy to optimize image fetching
service:
type: LoadBalancer
port: 80 # Publicly exposed service port
resources:
limits:
cpu: 500m
memory: 256Mi
requests:
cpu: 250m
memory: 128Mi
This ensures different configurations for testing and production.
7. Helm Security Considerations
Avoid running Helm with cluster-wide privileges.
Restrict Helm Release Names to prevent namespace conflicts.
Use RBAC policies to limit Helm access. Regularly update Helm and chart dependencies to patch vulnerabilities.
Summary
Organize values.yaml clearly for maintainability.
Use helm dependency to manage subcharts.
Secure sensitive values with helm secrets and encryption.
Automate Helm deployments using CI/CD.
Maintain versioning, documentation, and separate environments.
Follow security best practices to protect Kubernetes resources.
In the next section, we’ll discuss Helm’s role in large-scale production deployments and how to integrate it with GitOps tools like ArgoCD and Flux.
Helm in Production: Managing Complexity at Scale
As organizations scale their Kubernetes deployments, managing Helm charts effectively in production becomes crucial. This section explores how Helm integrates with GitOps tools, supports multi-environment management, and follows best practices for high availability and security.
1. Using GitOps with Helm (ArgoCD & Flux)
GitOps enables declarative infrastructure management, where Helm charts are stored in Git repositories and automatically deployed using tools like ArgoCD and Flux.
Deploying Helm Charts with ArgoCD
ArgoCD monitors a Git repository and applies changes automatically.
Multi-cluster management can be streamlined with Helmfile or Helm contexts.
High availability practices ensure smooth rolling updates and failovers.
Security best practices include using RBAC, encrypted secrets, and image scanning.
Monitoring tools like Prometheus and Grafana help track Helm deployments.
9. Conclusion and Next Steps
Helm simplifies Kubernetes application deployment, making it easier to manage complex workloads with reusable, version-controlled charts. By leveraging Helm, teams can standardize configurations, automate deployments, and integrate with GitOps workflows to achieve reliable and scalable Kubernetes operations.
Key Takeaways
Helm is the Kubernetes Package Manager – It streamlines application deployments by packaging Kubernetes resources into reusable Helm charts.
Charts Provide Flexibility – Using values.yaml, teams can easily override configurations without modifying templates.
Helm Supports Versioning & Rollbacks – The ability to upgrade and roll back releases ensures stability and rapid recovery.
Automation & CI/CD Integration – Helm works seamlessly with GitOps tools like ArgoCD and FluxCD to automate deployments.
Security & Best Practices Matter – Implement RBAC, use secrets management, and ensure chart dependencies are up to date to maintain a secure and efficient Helm workflow.
Monitoring & Debugging Are Essential – Use Prometheus, Grafana, and Helm’s built-in commands (helm list, helm get) to track deployments and troubleshoot issues.
Next Steps: Continue Learning Helm
Now that you understand Helm’s capabilities, here are some next steps to deepen your knowledge and practical experience:
Follow Kubernetes and Helm GitHub discussions for the latest updates.
Final Thoughts
Helm is an essential tool for Kubernetes administrators and DevOps teams looking to optimize deployment workflows. Whether you are deploying simple microservices or complex cloud-native applications, Helm provides the flexibility, automation, and reliability needed to scale efficiently.
Start experimenting with Helm today and take your Kubernetes skills to the next level!
Intro to Dremio, Nessie, and Apache Iceberg on Your Laptop
We're always looking for ways to better handle and save money on our data. That's why the "data lakehouse" is becoming so popular. It offers a mix of the flexibility of data lakes and the ease of use and performance of data warehouses. The goal? Make data handling easier and cheaper. So, how do we […]
Aug 16, 2023·Dremio Blog: News Highlights
5 Use Cases for the Dremio Lakehouse
With its capabilities in on-prem to cloud migration, data warehouse offload, data virtualization, upgrading data lakes and lakehouses, and building customer-facing analytics applications, Dremio provides the tools and functionalities to streamline operations and unlock the full potential of data assets.
Aug 31, 2023·Dremio Blog: News Highlights
Dremio Arctic is Now Your Data Lakehouse Catalog in Dremio Cloud
Dremio Arctic bring new features to Dremio Cloud, including Apache Iceberg table optimization and Data as Code.