DEV Community

Abhay Singh Kathayat
Abhay Singh Kathayat

Posted on

Managing Applications with Kubernetes Helm Charts: A Complete Guide

Kubernetes Helm Charts: Managing Applications with Helm

Helm is a powerful package manager for Kubernetes that simplifies the deployment and management of applications within Kubernetes clusters. It uses Helm Charts to define, install, and upgrade complex Kubernetes applications. Helm provides an easy way to package, configure, and deploy applications, making it an essential tool for both developers and system administrators.

In this article, we will dive into Helm charts, exploring how they work, how to use them, and how Helm can make managing Kubernetes applications more efficient.


What is Helm?

Helm is an open-source tool that streamlines the management of Kubernetes applications by packaging them into reusable templates called Helm Charts. A Helm Chart is a collection of files that describe a related set of Kubernetes resources (such as Pods, Services, Deployments, ConfigMaps, etc.). Helm charts can be used to install applications with predefined configurations or to allow easy customization through values files.

Helm functions as a package manager for Kubernetes, similar to how package managers like apt or yum work for Linux distributions, or npm for Node.js. It helps with deploying, upgrading, and rolling back applications in a consistent and repeatable manner.


Key Concepts in Helm

  1. Helm Chart: A Helm chart is a collection of Kubernetes resource files (YAML files) that define an application and its configuration. It contains templates, default values, and metadata necessary to install and run the application.

  2. Helm Release: A Helm release is a running instance of a Helm chart in your Kubernetes cluster. When you deploy a Helm chart, it creates a release that you can manage (install, upgrade, or delete).

  3. Values: A values file is used to pass configuration data to the Helm chart. It defines the settings that the chart templates will use during installation. Values files allow for custom configuration without modifying the chart itself.

  4. Templates: Helm uses templates to generate Kubernetes resource manifests. These templates can be customized with variables (values) passed in during installation or upgrade.

  5. Helm Repositories: Helm charts are stored in repositories, which can be public or private. The official Helm charts are available in the Helm Hub, but you can also create custom repositories for your organization’s charts.


How to Install and Use Helm

1. Installing Helm

Before using Helm, you need to install it on your machine. You can install Helm using a package manager or directly from the Helm GitHub releases page.

  • On macOS using Homebrew:
  brew install helm
Enter fullscreen mode Exit fullscreen mode
  • On Linux using Snap:
  sudo snap install helm --classic
Enter fullscreen mode Exit fullscreen mode
  • On Windows using Chocolatey:
  choco install kubernetes-helm
Enter fullscreen mode Exit fullscreen mode

After installation, verify that Helm is working by checking its version:

helm version
Enter fullscreen mode Exit fullscreen mode

2. Adding a Helm Repository

You can add a Helm repository to search and install charts from. For example, to add the official Helm stable repository, use:

helm repo add stable https://charts.helm.sh/stable
helm repo update
Enter fullscreen mode Exit fullscreen mode

This will allow you to search for and install charts from the stable repository.

3. Searching for Helm Charts

You can search for charts from the Helm repository using:

helm search repo <chart-name>
Enter fullscreen mode Exit fullscreen mode

Example:

helm search repo nginx
Enter fullscreen mode Exit fullscreen mode

4. Installing a Helm Chart

To install a Helm chart, use the helm install command. You can specify the chart name and a release name. For example:

helm install <release-name> <chart-name>
Enter fullscreen mode Exit fullscreen mode

Example:

helm install my-nginx stable/nginx-ingress
Enter fullscreen mode Exit fullscreen mode

This will install the NGINX ingress controller using the Helm chart from the stable repository.

5. Viewing and Managing Helm Releases

Once installed, you can list all your releases using:

helm list
Enter fullscreen mode Exit fullscreen mode

To get detailed information about a specific release:

helm status <release-name>
Enter fullscreen mode Exit fullscreen mode

6. Upgrading a Helm Release

To upgrade an existing release with a new version of the chart or with updated values, use:

helm upgrade <release-name> <chart-name> -f values.yaml
Enter fullscreen mode Exit fullscreen mode

7. Uninstalling a Helm Release

To uninstall a release and delete the associated resources from the Kubernetes cluster:

helm uninstall <release-name>
Enter fullscreen mode Exit fullscreen mode

Understanding Helm Chart Structure

A Helm chart is made up of several components:

  1. Chart.yaml: This file contains metadata about the chart, including its name, version, description, and dependencies.

Example:

   apiVersion: v2
   name: nginx-ingress
   description: A Helm chart for NGINX Ingress Controller
   version: 1.0.0
Enter fullscreen mode Exit fullscreen mode
  1. values.yaml: The values file contains the default configuration values for the chart. Users can override these values during installation or upgrade to customize their application.

Example:

   replicaCount: 2
   image:
     repository: nginx
     tag: stable
   service:
     type: LoadBalancer
Enter fullscreen mode Exit fullscreen mode
  1. templates/: The templates directory contains the Kubernetes resource templates. These templates define the Kubernetes objects like Pods, Services, Deployments, etc., that will be created when the chart is deployed.

Example (a template for a Deployment):

   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: {{ include "nginx-ingress.fullname" . }}
   spec:
     replicas: {{ .Values.replicaCount }}
     selector:
       matchLabels:
         app: {{ include "nginx-ingress.name" . }}
     template:
       metadata:
         labels:
           app: {{ include "nginx-ingress.name" . }}
       spec:
         containers:
           - name: nginx
             image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
Enter fullscreen mode Exit fullscreen mode
  1. charts/: This directory can contain other charts that the current chart depends on, allowing you to create complex, multi-component applications.

Customizing Helm Charts with Values

Helm charts are designed to be customizable. The values provided during installation or upgrade determine how the chart’s templates are rendered. For example, to customize the number of replicas or change the image tag, you can provide a custom values file (my-values.yaml).

Example values file (my-values.yaml):

replicaCount: 3
image:
  tag: "1.19.0"
service:
  type: NodePort
Enter fullscreen mode Exit fullscreen mode

To install a chart with custom values:

helm install my-nginx stable/nginx-ingress -f my-values.yaml
Enter fullscreen mode Exit fullscreen mode

Helm Best Practices

  1. Use Helm for Managing Complex Applications: Helm is best suited for managing complex applications with multiple Kubernetes resources, such as ingress controllers, databases, and microservices.

  2. Version Control Your Values Files: Store your values files in version control to track changes and collaborate with your team.

  3. Use Helm Templates Locally: Before deploying a chart, you can render the templates locally to see how the final Kubernetes manifests will look. Use:

   helm template <chart-name> -f values.yaml
Enter fullscreen mode Exit fullscreen mode
  1. Leverage Helm Repositories: Helm repositories allow you to share charts across teams or with the community. You can host your own repository or use public ones like the official Helm charts or Bitnami charts.

  2. Consider Chart Dependencies: When creating Helm charts, you can define dependencies in Chart.yaml to manage complex applications composed of multiple components (e.g., an application and its database).


Conclusion

Helm and its charts significantly simplify the deployment and management of Kubernetes applications. By using Helm charts, you can package your applications in a repeatable, consistent, and easily customizable way, reducing the complexity of deploying and managing applications in Kubernetes clusters. With the ability to install, upgrade, and roll back releases, Helm provides a robust solution for managing applications at scale.


Top comments (0)