logoJerry Wang

What is Helm?

Helm is a package manager for Kubernetes that simplifies the deployment and management of applications in Kubernetes clusters. It allows you to define, install, and upgrade even the most complex Kubernetes applications. Helm packages, called charts, are templates of Kubernetes resources that can be customized with your own configurations.

If you’ve ever struggled with writing raw Kubernetes YAML files, Helm can greatly simplify your workflow by providing reusable, parameterized templates.


Why Use Helm?

Helm offers several key advantages over manually managing Kubernetes resources:

  • Reusable Configurations: Charts can be reused across multiple environments with different configurations.
  • Easy Updates: Helm makes it easy to update applications without having to rewrite Kubernetes manifests.
  • Version Control: Helm charts are versioned, enabling you to roll back to previous versions if necessary.
  • Simplified Deployments: Helm abstracts the complexity of Kubernetes YAML files and helps manage them more efficiently.

Helm Basics

Helm has three main concepts:

  1. Charts: A collection of YAML templates used to generate Kubernetes manifests.
  2. Releases: A running instance of a Helm chart deployed in a Kubernetes cluster.
  3. Repositories: Collections of Helm charts that can be shared and distributed.

Installing Helm

Before you begin, you need to install Helm. You can install Helm using brew, a curl script, or download it directly from the Helm website.

brew install helm

Alternatively, for Linux:

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

Creating a Helm Chart

To create a new Helm chart, use the helm create command:

helm create my-chart

This generates a basic Helm chart template structure:

my-chart/
  Chart.yaml        # Metadata about the chart
  values.yaml       # Default configuration values
  templates/        # Directory containing Kubernetes YAML templates
  charts/           # Directory for chart dependencies

Key Files

  • Chart.yaml: Contains the name, version, and description of your chart.
  • values.yaml: Default values for the chart templates, which you can override during installation.
  • templates/: Contains your Kubernetes manifests that Helm will dynamically generate based on values.yaml.

Installing and Deploying a Helm Chart

Once your chart is ready, you can install it to your Kubernetes cluster.

For example, to install the my-chart chart in the my-namespace namespace:

helm install my-release ./my-chart --namespace my-namespace

Here, my-release is the name you give to this specific deployment instance of the Helm chart.


Customizing Chart Values

You can override the default values.yaml by providing a custom values file. For example:

helm install my-release ./my-chart -f custom-values.yaml --namespace my-namespace

Or, by providing individual values via the --set flag:

helm install my-release ./my-chart --set service.port=8081 --namespace my-namespace

This will override the service.port value in values.yaml and deploy the application with port 8081.


Managing Helm Releases

After deploying your application, you can check the status of your release:

helm status my-release

To list all running Helm releases:

helm list --namespace my-namespace

You can also upgrade your release with a new version or updated configuration:

helm upgrade my-release ./my-chart -f custom-values.yaml --namespace my-namespace

And, if something goes wrong, you can roll back to a previous version:

helm rollback my-release 1  # 1 is the revision number

Real-World Example: Using Helm with NGINX

Let’s install the NGINX Helm chart from the official Helm repository and customize its port from 80 to 8081.

  1. First, add the stable Helm repository:

    helm repo add bitnami https://charts.bitnami.com/bitnami
  2. Install the NGINX chart and override the default service port:

    helm install nginx bitnami/nginx --set service.port=8081 --namespace my-namespace
  3. Verify that the service is running on port 8081:

    kubectl get svc -n my-namespace

Now, your NGINX service will be available on port 8081 instead of the default port 80.


Conclusion

Helm provides a powerful way to manage Kubernetes applications with ease. By using reusable charts, parameterized configurations, and the ability to easily roll back, Helm streamlines the development and deployment process.

Whether you're managing simple applications or complex microservices, Helm allows you to automate and simplify your Kubernetes deployments.

Happy charting! 🚀

Key Points Covered:

  1. Introduction to Helm: What Helm is and why it’s useful.
  2. Installation: How to install Helm on your machine.
  3. Creating a Chart: Steps to create a Helm chart and what files are involved.
  4. Deploying a Chart: How to install a Helm chart to a Kubernetes cluster.
  5. Customizing Values: How to customize deployment settings with values.yaml or via the --set flag.
  6. Managing Releases: Viewing, upgrading, and rolling back Helm releases.
  7. Real-world Example: Installing NGINX using Helm and customizing its service port.

Feel free to adjust the wording or examples for your style, and let me know if you'd like to add or modify anything!