Back to Blog

Manage Kubernetes Applications with Helm Charts

Complete DevOps tutorial on Helm. Learn charts, releases, repositories, templates, values.yaml.

Manage Kubernetes Applications with Helm Charts

Manage Kubernetes Applications with Helm Charts

Introduction

Helm is a powerful package manager for Kubernetes (K8s) that streamlines the deployment and management of applications on Kubernetes clusters. By using Helm Charts, you can define, install, and upgrade even the most complex Kubernetes applications with ease. Helm abstracts away the complexity of Kubernetes configurations, allowing DevOps and SRE teams to focus on delivering applications rather than getting bogged down in the minutiae of YAML configuration files.

This tutorial will guide you through the essential components of Helm, including charts, releases, repositories, and templates. You'll learn how to leverage Helm to manage your Kubernetes applications effectively, making deployments more efficient and reducing the risk of errors. Key scenarios for using Helm include managing microservices architectures, automating application upgrades, and rolling back to previous versions with minimal downtime.

Prerequisites

Before you begin, ensure you have the following prerequisites:

  • Kubernetes Cluster: A running Kubernetes cluster (local or cloud-based) with access rights.
  • Helm CLI: Install Helm on your local machine. You can download it from the official Helm website.
  • kubectl: The command-line tool for interacting with your Kubernetes cluster.
  • Docker: Optional, but useful for building container images.
  • Permissions: Sufficient permissions to create, update, and delete resources in your Kubernetes cluster.

Core Concepts

Definitions

  • Helm Chart: A collection of files that describe a related set of Kubernetes resources. Charts are stored in a specific directory structure.
  • Release: A specific instance of a chart running in a Kubernetes cluster, which can be upgraded or rolled back.
  • Repository: A place where Helm charts can be stored and shared. Helm can retrieve charts from repositories for deployment.
  • Template: A file that contains Kubernetes manifests with placeholders for dynamic values that are populated at deployment time.
  • values.yaml: A configuration file that contains default values for a chart. Users can customize these values when installing or upgrading a release.

Architecture

Helm consists of two main components:

  1. Helm Client: The CLI tool used to manage charts, releases, and repositories.
  2. Tiller (deprecated): The server-side component in Helm 2 that managed releases. Helm 3 has removed Tiller, making it simpler and more secure.

When to Use

Helm is ideal for:

  • Deploying complex applications with multiple microservices.
  • Managing application configurations and secrets.
  • Keeping track of application versions and changes over time.

Limitations

  • Helm charts can become complex, requiring careful management.
  • Security concerns if chart repositories are not trusted.

Pricing Notes

Helm is an open-source tool and does not incur any costs. However, using it with cloud-based Kubernetes services may incur standard cloud charges.

Syntax/Configuration

Basic Helm Commands

Command Description
helm repo add <name> <url> Adds a chart repository
helm repo update Updates the local cache of chart repositories
helm install <release> <chart> Installs a chart as a release
helm list Lists all installed releases
helm upgrade <release> <chart> Upgrades a release to a new version
helm rollback <release> <revision> Rolls back a release to a previous revision
helm uninstall <release> Uninstalls a release

Practical Examples

Example 1: Installing Helm

First, install Helm on your Kubernetes cluster:

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

Example 2: Adding a Helm Repository

Add the official Helm stable repository:

helm repo add stable https://charts.helm.sh/stable

Example 3: Updating Helm Repositories

Update your local chart repository cache:

helm repo update

Example 4: Installing a Chart

Install the nginx chart from the stable repository:

helm install my-nginx stable/nginx

Example 5: Customizing Application Configurations

Create a values.yaml file to customize the NGINX configuration:

replicaCount: 2
image:
  repository: nginx
  tag: stable
service:
  enabled: true
  type: LoadBalancer
  port: 80

Then install the chart with your custom values:

helm install my-nginx stable/nginx -f values.yaml

Example 6: Upgrading a Release

To upgrade the my-nginx release with a new configuration:

helm upgrade my-nginx stable/nginx -f values.yaml

Example 7: Rolling Back a Release

To revert to the previous version of your release:

helm rollback my-nginx 1

Example 8: Uninstalling a Release

To remove a release from your cluster:

helm uninstall my-nginx

Real-World Scenarios

Scenario 1: Microservices Deployment

In a microservices architecture, each service can be defined as a Helm chart. This allows for consistent deployments, easy upgrades, and rollbacks across all services, improving team collaboration and reducing deployment time.

Scenario 2: CI/CD Integration

Integrate Helm with CI/CD pipelines to automate application deployments. For instance, you can use GitHub Actions or Jenkins to trigger Helm commands based on Git events (e.g., merging to the main branch).

Scenario 3: Multi-Environment Management

Use Helm to manage different environments (development, staging, production) for the same application. By customizing the values.yaml file for each environment, you can deploy the same chart with environment-specific configurations.

Best Practices

  1. Version Control: Keep Helm charts in version control (e.g., Git) to track changes and collaborate effectively.
  2. Use Values Files: Use separate values.yaml files for different environments (dev, staging, production).
  3. Secure Repositories: Only use trusted chart repositories and regularly audit dependencies.
  4. Automate Upgrades: Implement automated testing and CI/CD processes to ensure seamless upgrades.
  5. Monitor Releases: Use monitoring tools to keep track of release status and application health.

Common Errors

  1. Error: Error: cannot re-use a name that is still in use

    • Cause: Attempting to install a release with a name that already exists.
    • Fix: Use helm upgrade or uninstall the existing release.
  2. Error: Error: chart "xxx" not found

    • Cause: The specified chart is not available in the repository.
    • Fix: Ensure the chart name is correct and that you have updated the repository.
  3. Error: Error: unable to build kubernetes objects from release manifest

    • Cause: Invalid template syntax in the chart.
    • Fix: Check the templates for syntax errors or misconfigurations.
  4. Error: Error: no matches for kind "Deployment" in version "apps/v1"

    • Cause: The Kubernetes API version is incorrect or deprecated.
    • Fix: Update the API version in your templates to a supported version.

Related Services/Tools

Tool/Service Description Comparison to Helm
Kustomize A tool for customizing Kubernetes YAML configurations Focuses on overlays rather than packaging
Skaffold A tool for continuous development on Kubernetes Automates workflow, but not a package manager
ArgoCD A declarative continuous delivery tool for Kubernetes Focuses on GitOps and application lifecycle

Automation Script

Here's a simple bash script to automate the installation of a Helm chart with custom values:

#!/bin/bash

# Variables
CHART_NAME="stable/nginx"
RELEASE_NAME="my-nginx"
VALUES_FILE="values.yaml"

# Add Helm repo
helm repo add stable https://charts.helm.sh/stable

# Update Helm repos
helm repo update

# Install the Helm chart
helm install $RELEASE_NAME $CHART_NAME -f $VALUES_FILE

# Check the status of the release
helm list

Conclusion

In this tutorial, you learned how to manage Kubernetes applications using Helm Charts. By leveraging Helm's capabilities, you can simplify complex deployments, manage application versions, and automate your deployment processes effectively. For further learning, consider exploring the official Helm documentation and experimenting with creating your own charts.

References

By following this guide, you should now be equipped to use Helm to manage your Kubernetes applications effectively. Happy deploying! 🚀