DEV Community

Cover image for Introduction to Helm and Why It Matters
Manjunath Kotabal
Manjunath Kotabal

Posted on • Edited on

1

Introduction to Helm and Why It Matters

As Kubernetes becomes the go-to solution for container orchestration, developers often face challenges in managing the complexity of deploying and maintaining applications. Kubernetes deployments involve multiple YAML manifests for resources like Deployments, Services, ConfigMaps, and Secrets, which can quickly become difficult to manage as applications grow. This is where Helm, the package manager for Kubernetes, becomes invaluable.

In this blog, we’ll explore:

  • Common approaches to deploying applications in Kubernetes.
  • The challenges of these methods.
  • How Helm addresses these challenges and provides significant advantages.
  • Advanced Helm templating concepts like loops, conditionals, and helpers.

Common Approaches to Kubernetes Deployment

1. Kubernetes Manifests

The simplest way to deploy an application to Kubernetes is by writing raw YAML manifests for each resource. For example, a typical application might include:

  • A Deployment manifest for the application pods.
  • A Service manifest for exposing the application.
  • ConfigMaps and Secrets for configuration and sensitive data.

Challenges:

  • Managing multiple YAML files is tedious.
  • Hardcoding values makes it difficult to reuse configurations across environments (e.g., dev, staging, prod).
  • Updating or rolling back changes involves manual intervention.

2. Kustomization

Kustomize, which is now integrated with kubectl, allows you to customize Kubernetes manifests without modifying the original files. It introduces the concept of overlays to handle environment-specific configurations.

Advantages:

  • Reusability: Base manifests can be reused across multiple environments.
  • Declarative: Overlays clearly define environment-specific changes.

Challenges:

  • Limited templating capabilities.
  • Managing secrets and ConfigMaps still requires additional tools.
  • Lack of versioning or packaging support for deployment configurations.
  • Adding a new microservice requires building a separate base for deploying its specific version, increasing maintenance overhead.

Why Helm?

Helm introduces the concept of charts, which are packaged collections of Kubernetes manifests combined with templates and default configurations. Helm charts enable you to deploy, manage, and version applications in a standardized way.

Advantages of Helm

1. Simplified Application Deployment

Helm packages all Kubernetes manifests into a single chart, making it easier to manage and deploy applications. A single helm install command can set up an entire application stack.

2. Templating for Reusability

Helm charts use Go templates, allowing developers to parameterize values and generate dynamic configurations. For example:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-app
spec:
  replicas: {{ .Values.replicas }}
  template:
    spec:
      containers:
      - name: app
        image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
Enter fullscreen mode Exit fullscreen mode

This template dynamically adjusts based on input values, enabling reuse across environments.

3. Versioning and Rollbacks

Helm tracks deployments as releases. Each release is versioned, making it easy to:

  • Roll back to a previous state.
  • Audit changes made to the deployment over time.
4. Dependency Management

Helm charts can define dependencies on other charts. For example, a microservices application can have a parent chart that includes subcharts for individual services.

5. Seamless Upgrades

Helm makes it easy to upgrade applications by applying changes incrementally while maintaining a consistent state. For example:

helm upgrade my-app ./my-chart
Enter fullscreen mode Exit fullscreen mode

This updates only the resources that have changed.

6. Ecosystem and Community

Helm has a rich ecosystem with a large collection of public charts available in repositories like the Artifact Hub. Developers can quickly adopt and customize these charts for common applications like NGINX, PostgreSQL, and Redis.


Advanced Concepts in Helm Templating

Helm’s templating system is one of its most powerful features, allowing you to use loops, conditionals, and helpers to create dynamic configurations. Let’s explore some advanced concepts:

1. Using Loops in Helm

Helm templates support range for looping over lists or maps. For example, creating multiple ConfigMaps dynamically:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
  labels:
    app: {{ .Chart.Name }}
data:
{{- range .Values.configs }}
  {{ .key }}: {{ .value | quote }}
{{- end }}
Enter fullscreen mode Exit fullscreen mode

Here, range loops through the configs array in values.yaml.

2. Conditional Statements

Conditionals let you include or exclude resources based on values. For example:

{{- if .Values.enableService }}
apiVersion: v1
kind: Service
metadata:
  name: {{ .Release.Name }}-service
spec:
  ports:
    - port: 80
{{- end }}
Enter fullscreen mode Exit fullscreen mode

If enableService is set to false, the Service resource is excluded.

3. Using Named Templates (Helpers)

Named templates, defined in _helpers.tpl, promote reusability. Example:

{{- define "app.labels" -}}
app: {{ .Chart.Name }}
release: {{ .Release.Name }}
{{- end -}}
Enter fullscreen mode Exit fullscreen mode

Usage in other templates:

metadata:
  labels:
    {{ include "app.labels" . | indent 4 }}
Enter fullscreen mode Exit fullscreen mode

4. Combining Templates and Values

Helm allows you to dynamically combine multiple features for complex scenarios. For instance:

apiVersion: v1
kind: Secret
metadata:
  name: {{ .Release.Name }}-secret
stringData:
  {{- range $key, $value := .Values.secrets }}
  {{ $key }}: {{ $value | b64enc }}
  {{- end }}
Enter fullscreen mode Exit fullscreen mode

This creates a Secret with keys and values base64-encoded from values.yaml.


Comparison: Helm vs. Manifests vs. Kustomize

Feature Raw Manifests Kustomize Helm
Templating None Limited (overlays) Advanced (Go templates)
Reusability Manual High (overlays) Very High (charts)
Dependency Management None None Yes
Versioning Manual Manual Built-in (releases)
Rollbacks Manual Manual One command (helm rollback)
Ecosystem None None Extensive (public charts)

When to Use Helm?

Helm is ideal for:

  • Complex applications with multiple resources and dependencies.
  • Scenarios requiring templating and dynamic configurations.
  • Teams managing multiple environments with different configurations.
  • Applications requiring robust upgrade and rollback mechanisms.

For simpler setups or environments where templating isn’t needed, Kustomize or raw manifests might suffice. However, as the complexity of your application grows, Helm becomes indispensable.


Conclusion

Helm revolutionizes how applications are deployed and managed in Kubernetes. By combining templating, packaging, versioning, and an extensive ecosystem, it simplifies the complexities of Kubernetes deployments. Whether you're managing a single application or an entire ecosystem, Helm is a powerful tool to have in your Kubernetes toolkit.

By leveraging advanced templating features like loops, conditionals, and helpers, you can build highly dynamic and reusable Helm charts tailored to your application’s needs. In the next post, we’ll dive into setting up your environment for Helm and getting started with your first Helm chart. Stay tuned!

Check my new blog on https://dev.to/manjunath_kotabal_3d1e736/setting-up-your-environment-for-helm-and-building-your-first-helm-chart-34ko

AWS Q Developer image

Your AI Code Assistant

Automate your code reviews. Catch bugs before your coworkers. Fix security issues in your code. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

Top comments (0)

AWS GenAI LIVE image

How is generative AI increasing efficiency?

Join AWS GenAI LIVE! to find out how gen AI is reshaping productivity, streamlining processes, and driving innovation.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay