Cloud Native 15 min read

Master Helm: From Installation to Advanced Kubernetes Deployments

This comprehensive guide explains Helm’s core concepts, installation steps, basic commands, real‑world deployment examples for Nginx and WordPress, advanced features like hooks and sub‑charts, common pitfalls, and SRE‑focused best practices for reliable, automated Kubernetes package management.

Raymond Ops
Raymond Ops
Raymond Ops
Master Helm: From Installation to Advanced Kubernetes Deployments

Introduction

Containerization is essential for modern cloud‑native operations. Managing large numbers of raw Kubernetes YAML files is error‑prone, so a package manager that can version, template, and deploy resources as a unit is required.

What is Helm?

Helm is an open‑source Kubernetes package manager maintained by the CNCF. A Helm Chart is a directory containing Chart.yaml, values.yaml, templates/, and optional charts/ sub‑charts. Helm operates in a client‑only mode (no Tiller), stores releases as Secrets, and supports OCI chart storage.

Key Advantages

Versioning & Change Management : Charts follow SemVer, enabling blue‑green or canary releases.

Templating & Configurability : Go templates provide conditionals, loops, and functions for multi‑environment values.

Dependency Management : Sub‑charts are installed automatically (e.g., ELK stack).

Community Ecosystem : Artifact Hub hosts thousands of ready‑made charts.

Security : Client‑only mode, RBAC‑friendly, and support for signed charts.

Helm v3 Evolution

Current stable version is v3.18.4. Compared with v2, v3 removes the server component, stores releases as Secrets, adds OCI image support, Lua extensions, and post‑render hooks. It is fully backward compatible with v2 charts.

Installation & Configuration

Ensure a Kubernetes cluster is available (Minikube, EKS, etc.). Install Helm using the official script:

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

Verify the installation: helm version Expected output includes Version:"v3.18.4".

Add public repositories and update the index:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable https://charts.helm.sh/stable
helm repo update

Enterprises should configure a private repository (e.g., ChartMuseum or Harbor) for compliance.

Basic Helm Concepts

Chart : Directory with Chart.yaml, values.yaml, templates/, and optional charts/ sub‑charts.

Release : An instantiated deployment of a chart (e.g., prod-nginx, dev-nginx).

Repository : Remote storage for charts.

Template : Go‑template files that render YAML based on values.

Example chart structure:

my-chart/
├── Chart.yaml      # metadata
├── values.yaml    # default values
├── templates/
│   ├── deployment.yaml
│   └── service.yaml
└── charts/         # sub‑charts

Practical Deployments

Case 1 – Deploy Nginx

Search and install the Bitnami Nginx chart with custom replica count and LoadBalancer service:

helm search repo nginx
helm install my-nginx bitnami/nginx \
  --namespace default \
  --set replicaCount=3 \
  --set service.type=LoadBalancer \
  --set persistence.enabled=true \
  --set persistence.size=10Gi

Verify the deployment:

helm list --all-namespaces
kubectl get all -l app.kubernetes.io/instance=my-nginx

Access the external IP to view the Nginx page.

Upgrade and roll back:

helm upgrade my-nginx bitnami/nginx --set replicaCount=5 --reuse-values
helm rollback my-nginx 1 --wait

Uninstall while keeping history for possible recovery:

helm uninstall my-nginx --keep-history

Case 2 – Deploy WordPress with MySQL Dependency

Install the Bitnami WordPress chart (automatically pulls the MariaDB sub‑chart):

helm install my-wordpress bitnami/wordpress \
  --set wordpressUsername=admin \
  --set wordpressPassword=securepass \
  --set mariadb.enabled=true \
  --set mariadb.auth.rootPassword=secret

Create a custom custom-values.yaml to override defaults:

replicaCount: 2
service:
  type: NodePort
ingress:
  enabled: true
  hostname: blog.example.com

Install with the custom values file:

helm install my-wordpress bitnami/wordpress -f custom-values.yaml

Validate the deployment using kubectl port-forward and monitor with a Prometheus chart.

Advanced Helm Features

Hooks : Lifecycle hooks (pre‑install, post‑upgrade) for tasks such as data migration.

Sub‑charts & Conditional Dependencies : Define dependencies in Chart.yaml and enable/disable them with the condition field.

Post‑Render & Kustomize Integration : Apply additional transformations after templating.

Schema Validation : Use values.schema.json to enforce correct input values.

Lua Extensions : Enhance template logic with Lua scripts (available from v3.18).

Common Pitfalls & Mitigations

Over‑templating : Too many variables increase complexity; limit templating to essential parameters.

Dependency Conflicts : Incompatible sub‑chart versions; run helm dependency build and lock versions.

Secret Leakage : Storing credentials in plain values.yaml; use helm‑secrets or external vault solutions.

Resource Exhaustion : Unbounded deployments can crash the cluster; set CPU/memory requests and limits, and test with helm template --dry-run=server.

Upgrade Failures : Ignoring hook order; preview changes with helm diff before applying.

Best Practices for SRE

GitOps Integration : Store charts in Git and sync with ArgoCD or Flux for declarative deployments.

Secret Management : Encrypt values with helm‑secrets or use Sealed Secrets.

Dry‑Run & Linting : Run helm lint and helm template --dry-run in CI pipelines.

Resource Optimization : Define limits and enable Horizontal Pod Autoscaler.

Multi‑Tenant Isolation : Deploy releases into separate namespaces with fine‑grained RBAC.

Atomic Operations : Use the --atomic flag to ensure rollback on failure.

Scaling with Helmfile : Manage dozens of charts across large clusters.

Conclusion

Helm streamlines Kubernetes package management, enabling SRE teams to achieve reliable, automated, and observable deployments. Starting with local installations and progressing to production‑grade workflows—combined with GitOps, secret handling, and rigorous testing—maximizes system resilience.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

ci/cdKubernetesDevOpsSREpackage managementhelm
Raymond Ops
Written by

Raymond Ops

Linux ops automation, cloud-native, Kubernetes, SRE, DevOps, Python, Golang and related tech discussions.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.