█
LastWrite
  • > Curriculum
  • > Pricing
  • > For Educators
  • > About
  • > Contact
Log InGet Started

Questions, concerns, bug reports, or suggestions? We read every message, write to us at [email protected].

More ways to reach us →
LastWrite

Structured computer science lessons for aspiring developers and security professionals.

[email protected]

(201) 785-7951

Mon–Fri, 9 AM–5 PM EST

Learn

  • Curriculum
  • Pricing

Company

  • About
  • For Educators & Schools
  • Contact Us

Legal

  • Terms of Service
  • Privacy Policy
© 2026 LastWrite. All rights reserved.
Curriculum/DevOps and Infrastructure/Kubernetes/Helm
45 minIntermediate

Helm

After this lesson, you will be able to: Understand Helm charts: install community charts, parametrize via values.yaml, and write a basic chart for your own app.

Helm is the package manager for Kubernetes. Instead of dozens of raw YAMLs, you install a 'chart' with one command. Real K8s teams use Helm for almost everything.

Prerequisites:Persistent Storage

What a Helm chart is

A directory of templated K8s YAML + a values.yaml + a Chart.yaml. Templates use Go templating: `{{ .Values.replicaCount }}` interpolates from values.yaml. `helm install` renders the templates + applies them. `helm upgrade` re-renders + applies the diff. Community charts (postgres, redis, ingress-nginx, cert-manager) are the standard way to install anything serious on K8s.

Install a community chart

Install ingress-nginx in one command.

tsx
# Install Helm CLI
macOS: brew install helm
Linux: curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Add a repo (where charts live)
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
# Install
helm install nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx --create-namespace \
--set controller.service.type=LoadBalancer
# See what's installed
helm list -A
# Upgrade
helm upgrade nginx ingress-nginx/ingress-nginx -n ingress-nginx --set controller.replicaCount=3
# Uninstall
helm uninstall nginx -n ingress-nginx

Author your own chart

helm create scaffolds a working template.

tsx
helm create myapp
# Generates myapp/ with templates/, values.yaml, Chart.yaml
# Customize values.yaml
replicaCount: 3
image:
repository: ghcr.io/me/myapp
tag: 1.0
resources:
requests: { cpu: 100m, memory: 128Mi }
limits: { cpu: 500m, memory: 256Mi }
# Install locally
helm install myapp ./myapp
# Per-environment values
helm install myapp ./myapp -f values-prod.yaml
helm install myapp ./myapp -f values-staging.yaml --set image.tag=1.1
# Render without installing (debug)
helm template ./myapp -f values-prod.yaml

Why Helm vs raw kubectl apply

Helm gives you: parameterized YAML (one chart, many envs), versioned releases (rollback to a previous Helm release), atomic upgrades (rollback on failure), templating (loops + conditionals in YAML). Raw kubectl apply works for tiny projects. For anything larger, Helm pays for itself the first time you need a different value in prod vs staging. Alternative: Kustomize (patch-style overrides). Less powerful but no templating. Stick with Helm unless you have a reason.

💡 Don't fork charts; layer values

When a community chart isn't quite right, the temptation is to fork and modify. Don't. Almost every option is exposed in `values.yaml`. Override it with `--set` or your own values file. Forks bit-rot the moment upstream releases; layering keeps you on the upgrade path.

Common mistakes only experienced engineers avoid

Hardcoding values in templates instead of values.yaml. Defeats the point of Helm. `helm install` instead of `helm upgrade --install`. The latter creates-or-updates idempotently. Forking community charts. Re-test, re-merge, re-deploy on every upstream change. Brittle. Skipping `--atomic`. Without it, a failed upgrade leaves resources mid-state. Forgetting `helm history myapp`; you can rollback to any prior release.

Quick Check

What's the single biggest reason to use Helm over raw kubectl apply?

Pick the most senior answer.

Sign in and purchase access to unlock this lesson.

Sign in to purchase
←Persistent Storage
Back to Kubernetes
Kubernetes in Production→