Creating a Custom Helm Chart for Django Microservices
This creates billable resources. Run it in a dev environment and destroy it when you finish. Set a budget alarm first.
Success criteria
0 of 4
What you are building#
What is Helm & Helm Charts?#
Helm is the official package manager for Kubernetes (equivalent to apt on Ubuntu or pip on Python). Managing dozens of raw static Kubernetes YAML manifests across different environments (Development, Staging, Production) leads to code duplication and configuration drift.
A Helm Chart is a structured directory package containing Go-template files parameterized by a single configuration file: values.yaml.
- Chart.yaml: Contains metadata (Chart Name, Version, AppVersion, Description).
- values.yaml: Default configuration variables (image repository, tag, replica count, ingress host, secret keys).
- templates/: Go-templated Kubernetes manifests rendered dynamically at release time.
- _helpers.tpl: Reusable partial template functions (naming conventions, common labels).
HELM CHART ARCHITECTURE
+----------------------------------+ +----------------------------------+
| VALUES FILE (values.yaml) | | TEMPLATES (templates/*.yaml) |
| replicaCount: 2 | | replicas: {{ .Values.replica }} |
| image: | +======> | image: {{ .Values.image.repo }} |
| repository: ecr-repo-url | | ... |
| tag: "1.0.0" | +-----------------+----------------+
+----------------------------------+ |
| Render Engine
v
+----------------------------------+
| DYNAMIC MANIFESTS APPLIED TO |
| AWS EKS CLUSTER (RELEASE) |
+----------------------------------+Steps#
Step 1: Lint Helm Chart Syntax#
cd 05-Helm-Package-Management/Lab14-Custom-Helm-Chart-App
helm lint myapp/Expected Output: 1 chart(s) linted, 0 chart(s) failed
Step 2: Dry-Run Template Rendering#
helm template myapp myapp/ --debugStep 3: Install Helm Release to EKS#
helm install myapp myapp/ -n nti-devopsStep 4: Upgrade Release with Custom Image Tag#
helm upgrade myapp myapp/ -n nti-devops --set image.tag="v2.0.0"Verify it worked#
helm list -n nti-devopsExpected Output:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
myapp nti-devops 2 2026-07-27 00:00:00.000000000 +0000 UTC deployed myapp-0.1.0 1.0.0Clean up#
Run this even if you did not finish. Everything above is destroyable, and an account full of half-built experiments is how a surprise bill starts.
helm uninstall <release> -n <namespace>
kubectl get all -n <namespace>Cost of this lab: Depends on an existing cluster. Helm itself is free; the workloads it installs consume cluster capacity.