Skip to main content

Command Palette

Search for a command to run...

From YAML Chaos to Helm Charts: A DevOps Survival Guide

Part -10

Updated
6 min read

So far, in our Kubernetes journey, we have written many manifest files for resources like Deployments, Services, HPA, DaemonSets, and more in Kubernetes.

But let’s be honest for a moment.

Managing one or two YAML files is easy. But what happens in real-world projects?

In production environments, we usually work with multiple microservices, and each service may have several manifest files — deployments, services, configmaps, secrets, autoscalers, and more.

Very quickly, this turns into something like:

service-a-deployment.yaml
service-a-service.yaml
service-a-hpa.yaml
service-b-deployment.yaml
service-b-service.yaml
service-b-configmap.yaml

Managing all these YAML files manually becomes messy, repetitive, and hard to maintain.

This is where Helm comes to the rescue.

Helm helps us package, manage, and deploy Kubernetes applications easily using reusable templates called Helm Charts.

In this article, we will learn how Helm simplifies Kubernetes deployments and saves us from YAML chaos.

What is HELM?

Helm is a powerful package manager for Kubernetes that bundles multiple manifest files together and simplifies the application deployment process.

Helm simplifies the process of deploying, updating, and managing application lifecycles by packaging them into Helm Charts. These charts include all the necessary configuration files and settings, making it easy to deploy and manage even complex applications in Kubernetes.

There are mainly of two components in helm v3

Helm Client

The Helm Client is the command-line tool (CLI) that users interact with. It helps you work with Helm and Kubernetes.

It is responsible for:

  • Managing Charts Locally – Creating and managing Helm charts on your local system.

  • Finding Charts – Searching and downloading charts from Helm repositories.

  • Application Lifecycle – Installing, upgrading, and uninstalling applications in a Kubernetes cluster.

  • Managing Repositories – Adding, removing, and updating Helm repositories.

Helm Library

The Helm Library works in the background and performs the main tasks needed to deploy applications in Kubernetes.

It is responsible for:

  • Kubernetes API Communication – Interacts with the Kubernetes API to deploy and manage applications.

  • Template Rendering – Combines Helm chart templates with values from the values.yaml file to generate Kubernetes manifests.

  • State Management – Stores the application state inside Kubernetes itself, so no external database is needed.

As mentioned earlier, managing multiple Kubernetes manifest files can quickly become complicated. Helm helps solve this problem by packaging all the required resources into a single unit.

Let’s now see how Helm achieves this and understand the key components involved in it.

1. Templates

Purpose:
Templates define the Kubernetes resources required for the application, such as Deployments, Services, ConfigMaps, etc.

Dynamic Configuration:
Templates use the Go templating language, which allows us to dynamically configure Kubernetes objects.

For example, we can dynamically set:

  • Number of replicas

  • Container images

  • Resource limits

These values are taken from the values.yaml file during installation.

2. Values (values.yaml)

Purpose:
The values.yaml file contains the default configuration values for the application.

Centralized Configuration:
It acts as a single place to define all configurable parameters.

Overrides:
During installation, these default values can be overridden to customize deployments for different environments like dev, test, or production.

3. Chart.yaml

Purpose:
This file contains the metadata information about the chart.

Information included:

  • Name – Name of the chart

  • Version – Chart version for tracking updates

  • Description – Short description of the chart

  • Dependencies – Other charts required for this chart to work

This helps in version management and dependency management.

4. values.schema.json (Optional)

Purpose:
This file is used to validate the values provided in values.yaml.

Validation:
It ensures the values passed during installation are correct in structure and data type, helping prevent deployment errors.

Install HELM

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm version

Lets' Deploy a application using HELM

helm create rama

Go into rama folder, Now we can see rama folder will gets created.

Enter into the folder and open values.yml file

Change the service type from ClusterIP to NodePort on line 55

Change the image name from nginx to your-docker-image

Change the appVersion: “1.16.0” to “latest” on Chart.yaml file (this represents that image tag")

To install helm

helm install rama .
  • --atomic: Automatically rolls back the installation if any part fails, preventing partial installations.

  • --dependency-update: Updates chart dependencies before installation.

  • --dry-run: Simulates the installation without deploying, showing what will happen.

  • --namespace <namespace>: Installs the chart into a specified namespace.

  • --set <key>=<value>: Overrides a specific value in the values.yaml file.

  • --values <values.yaml>: Uses an alternative values file for the installation.

To get helm release list

helm ls

Now update anything in values.yaml like image or replicas

helm upgrade rama .

To rollback to prev revision

helm rollback rama 1

To uninstall helm

helm uninstall rama

To see the history

  helm history rama

To add a repo

helm repo add [REPO_NAME] [REPO_URL]

To update repo

helm repo update

Helm Rollback Real Scenario

Example:

If a new deployment causes application failure, we check the Helm history and rollback to the previous stable revision.

helm history myapp
helm rollback myapp 5

Conclusion

In short, Helm turns the chaos of dozens (or hundreds) of raw Kubernetes YAMLs into manageable, reusable packages. By grouping resources into charts, parameterizing configuration with values.yaml, and providing lifecycle commands (install, upgrade, rollback), Helm makes deployments predictable, repeatable, and easier to maintain. Adopted properly, it reduces duplication, enforces consistency across environments, and streamlines CI/CD workflows.

Key takeaways and next steps:

  • Use charts to encapsulate each microservice and share common patterns via chart dependencies or umbrella charts.

  • Keep templates clean and minimal; move environment-specific values to values files and avoid hard-coding.

  • Validate charts early with linting (helm lint), testing (helm test), and local dry-runs (helm install --dry-run --debug).

  • Store and version charts in a chart repository (e.g., ChartMuseum, OCI registries) and apply semantic versioning for releases.

  • Handle secrets and sensitive values securely (SOPS, sealed-secrets, external secret stores), and integrate Helm into your CI/CD pipeline for automated, auditable deployments.

  • Start small: create a chart with helm create, iterate on templates and values, test in staging, then roll out to production.

Helm won’t remove all operational complexity, but it gives you the tools to tame YAML sprawl and build a more maintainable, scalable deployment process.

If you found this guide useful, please like ❤️, comment, and share your thoughts or questions. Stay tuned for the next part, where we'll explore advanced Docker concepts and practices.

Thank you,
Yours, Rama Grandhi