* [Topics](/en/topics "Topics")
* [Open source](/en/topics/open-source "Open source")
* What is Helm?
What is Helm?
=============
Published  May 9, 2024•*3*-minute read
Copy URL
Jump to section
---------------
OverviewHow does Helm work?What is a Helm chart?How to use Helm chartsWhy use Helm?
Overview
--------
Application development in Kubernetes is inherently complex. For any given application, you might be installing, managing, and updating hundreds of configurations.
Helm simplifies this process by automating the distribution of your applications using a packaging format called a **Helm chart**. Much like how `yum` manages RPM packages for [Red Hat® Enterprise Linux®](/en/technologies/linux-platforms/enterprise-linux), `helm` manages Helm charts for Kubernetes. Charts maintain consistency across containers while also determining how specific requirements for an application are met.
As the package manager for Kubernetes, Helm enables you to apply the same configuration framework to multiple instances using variable overrides, all based on what matters most to your specific configuration.
![Helm logo](/rhdc/managed-files/helm.svg)
*Fun fact*: [Helm](https://helm.sh/docs/community/history/) is an open-source project that graduated out of the [Cloud Native Computing Foundation](https://www.cncf.io/) (CNCF). It was first introduced in 2015 at the inaugural KubeCon and migrated to the CNCF with Kubernetes.
How does Helm work?
-------------------
Helm works by describing the application from definition to upgrade in what is known as a **Helm chart**. Helm uses charts (similar to a template) to pass resources to your Kubernetes cluster using the Kubernetes API.
Helm uses a single command line interface (CLI) tool called `helm` to manage the Helm chart, along with a handful of simple commands that allow you to create, manage, and configure your application.
[Learn more about Helm and Red Hat OpenShift](/en/technologies/cloud-computing/openshift/helm "Using Helm with Red Hat OpenShift")
Red Hat resources
-----------------
[Keep reading](/en/resources "Keep reading")
What is a Helm chart?
---------------------
Helm charts are a collection of files that describe a Kubernetes cluster’s resources and package them together as an application. They comprise three basic components:
* **The chart** - `Chart.yaml` defines the application metadata like name, version, dependencies, etc.
* **Values** - `values.yaml` sets values, which is how you will set variable substitutions for reusing your chart
  + You may also have a values JSON schema that describes a structure for the values file, which can help in creating dynamic forms and validating your values parameters.
* **The templates directory** - `templates/` houses your templates and combines them with the values set in your values.yaml file to create manifests
* **The charts directory** - `charts/` stores any chart dependencies you define in `Chart.yaml` and reconstruct with `helm dependency build` or `helm dependency update`.
Each time you install a Helm chart, you also create an instance of it, called a **release**. Helm charts are maintained with each new release, and you can easily use previous versions of the chart to roll back to your preferred configuration.
To see Helm charts in action, check out this episode of Ask a Product Manager Office Hours that discusses using Helm with [Red Hat OpenShift®](/en/technologies/cloud-computing/openshift).
This video can't play due to privacy settings
To change your settings, select the "Cookie Preferences" link in the footer and opt in to "Advertising Cookies or try disabling adblockers."
How to use Helm charts
----------------------
After [installing the Helm CLI](https://access.redhat.com/documentation/en-us/openshift_container_platform/4.6/html/cli_tools/helm-cli#installing-helm_getting-started-with-helm-on-openshift), you have two options: use an existing chart with predefined resources and values or create a customized chart to package your own application resources.
### Using a pre-existing chart
Using a pre-existing chart involves first [adding the Helm repository to your Helm client](https://access.redhat.com/documentation/en-us/openshift_container_platform/4.6/html/cli_tools/helm-cli#installing-a-helm-chart-on-an-openshift-cluster_getting-started-with-helm-on-openshift), then setting specific configuration parameters in your values files at the time of install.
Your values files are the keys to reusing Helm charts for individual configurations. You can substitute any variable declared in `values.yaml`, and Helm will create the `.values` structure to hold these variables in the template. This makes the variables available to substitute in later configurations. You can pass as many values files to a chart as you want; Helm will combine them and render them together so it’s possible to reuse variable files.
Once you have committed or pushed your values configurations, you will be able to update, upgrade, and manage your application’s lifecycle through [common `helm` commands](https://helm.sh/docs/intro/cheatsheet/).
### Creating a customized chart
You may need to [create a custom](https://access.redhat.com/documentation/en-us/openshift_container_platform/4.6/html/cli_tools/helm-cli#creating-a-custom-helm-chart-on-openshift_getting-started-with-helm-on-openshift) chart to package applications you want to reuse across your organization or within your specific workloads. This involves defining your application’s resources in the chart’s `templates/` directory, setting configuration parameters through values files, and adding any metadata and documentation to the `Chart.yaml` file.
You can then package the chart using `helm package` and upload it to a public or private Helm repository, or distribute it directly.
Red Hat’s **validated patterns** are useful examples of existing Helm charts that you can also customize. Validated patterns are Helm charts that describe a full workload that has been deployed at a customer site and met a set of requirements for testing and maintenance. They can be used directly or modified to fit your own configuration’s needs.
[Learn more about validated patterns](/en/topics/cloud-computing/what-are-validated-patterns "What are validated patterns?")
Why use Helm?
-------------
As part of your overall GitOps strategy, Helm is a powerful tool that provides agility, security, and consistency across multiple environments. When paired with a multi-cloud communication tool like [Red Hat Service Interconnect](https://developers.redhat.com/products/service-interconnect/overview), Helm is especially useful for complex deployments that are using multiple microservices across multiple cloud providers.
For Kubernetes developers, Helm charts are a simple, quick, and easy way to spin up applications that can then be reused or shared with others.
For system administrators and other IT operations professionals, Helm provides a consistent tool for implementing and streamlining [continuous integration and continuous development](/en/topics/devops/what-is-ci-cd) (CI/CD) into their application pipelines. It’s a tool that provides agility alongside consistency.
To try out the full process, from creating a chart to configuring values and deploying the chart, check out the following tutorials from Red Hat® Developer.
[Try out Helm on Red Hat Developer](https://developers.redhat.com/topics/helm/all "Helm | Topics | Red Hat Developer")
The official Red Hat blog
-------------------------
Get the latest information about our ecosystem of customers, partners, and communities.
[Keep reading](/en/blog "The official Red Hat blog")
All Red Hat product trials
--------------------------
Our no-cost product trials help you gain hands-on experience, prepare for a certification, or assess if a product is right for your organization.
[Keep reading](/en/products/trials "All Red Hat product trials")
Keep reading
------------
### What is InstructLab?
InstructLab simplifies the process of customizing large language models with private data.
[Read the article](/en/topics/ai/what-is-instructlab "article | what is instructlab?")
### What is Istio?
Find out more about Istio, an open source service mesh that controls how microservices share data with one another.
[Read the article](/en/topics/microservices/what-is-istio "article | What is Istio?")
### What is CentOS Stream?
CentOS Stream is a Linux® development platform where open source community members can contribute to Red Hat® Enterprise Linux in tandem with Red Hat developers.
[Read the article](/en/topics/linux/what-is-centos-stream "product article | what is centos stream")
Open source resources
---------------------
### Related content
* Blog post
  [Bringing intelligent, efficient routing to open source AI with vLLM Semantic Router](/en/blog/bringing-intelligent-efficient-routing-open-source-ai-vllm-semantic-router)
* E-book
  [Accelerate outcomes: Do more with Red Hat Services](/en/engage/do-more-with-red-hat-services-ebook)
* Overview
  [Red Hat Enterprise Linux for SAP solutions](/en/resources/rhel-for-sap-solutions-overview)
* E-book
  [Solve business and IT challenges with Red Hat Enterprise Linux 10](/en/resources/solve-business-challenges-rhel-10-ebook)
### Related articles
* [What is InstructLab?](/en/topics/ai/what-is-instructlab)
* [What is Istio?](/en/topics/microservices/what-is-istio)
* [What is CentOS Stream?](/en/topics/linux/what-is-centos-stream)
* [What is KVM?](/en/topics/virtualization/what-is-KVM)
* [What is Podman Desktop?](/en/topics/containers/what-is-podman-desktop)
* [What is CentOS?](/en/topics/linux/what-is-centos)
* [What are CentOS replacements?](/en/topics/linux/centos-alternatives)
* [What is Podman?](/en/topics/containers/what-is-podman)
* [What is Argo CD?](/en/topics/devops/what-is-argocd)
* [What is MicroShift?](/en/topics/edge-computing/microshift)
* [OpenJDK versus Oracle JDK](/en/topics/application-modernization/openjdk-vs-oracle-jdk)
* [What is Cloud Foundry?](/en/topics/application-modernization/what-is-cloud-foundry)
* [What is Buildah?](/en/topics/containers/what-is-buildah)
* [Understanding Ansible, Terraform, Puppet, Chef, and Salt](/en/topics/automation/understanding-ansible-vs-terraform-puppet-chef-and-salt)
* [Ansible vs. Chef: What you need to know](/en/topics/automation/ansible-vs-chef)
* [Ansible vs. Salt: What you need to know](/en/topics/automation/ansible-vs-salt)
* [What is Linux?](/en/topics/linux/what-is-linux)
* [What's the best Linux distro for you?](/en/topics/linux/whats-the-best-linux-distro-for-you)
* [Ansible vs. Puppet: What you need to know](/en/topics/automation/ansible-vs-puppet)
* [Red Hat OpenShift vs. OKD](/en/topics/containers/red-hat-openshift-okd)
* [What is Apache Kafka?](/en/topics/integration/what-is-apache-kafka)
* [Spring on Kubernetes with Red Hat OpenShift](/en/technologies/cloud-computing/openshift/spring)
* [Why run Apache Kafka on Kubernetes?](/en/topics/integration/why-run-apache-kafka-on-kubernetes)
* [Ansible vs. Terraform, clarified](/en/topics/automation/ansible-vs-terraform)
* [Ansible vs. Red Hat Ansible Automation Platform](/en/technologies/management/ansible/ansible-vs-red-hat-ansible-automation-platform)
* [What is Skopeo?](/en/topics/containers/what-is-skopeo)
* [Using Helm with Red Hat OpenShift](/en/technologies/cloud-computing/openshift/helm)
* [What is Grafana?](/en/topics/data-services/what-is-grafana)
* [What is open source software?](/en/topics/open-source/what-is-open-source-software)
* [Open source vs. proprietary software in vehicles](/en/topics/open-source/open-source-vs-proprietary-software-in-vehicles)
* [What is KubeLinter?](/en/topics/containers/what-is-kubelinter)
* [What is RKT?](/en/topics/containers/what-is-rkt)
* [What is Kogito?](/en/topics/automation/what-is-kogito)
* [What was CoreOS and CoreOS container Linux](/en/technologies/cloud-computing/openshift/what-was-coreos)
* [What is Jaeger?](/en/topics/microservices/what-is-jaeger)
* [What is open source?](/en/topics/open-source/what-is-open-source)
* [What is Clair?](/en/topics/containers/what-is-clair)
* [What is Knative?](/en/topics/microservices/what-is-knative)
* [What is etcd?](/en/topics/containers/what-is-etcd)
* [What is Docker?](/en/topics/containers/what-is-docker)
[More about this topic](/en/topics/open-source "More about this topic")