Skip to content
EgyKode
Guided lab

Creating a Custom Helm Chart for Django Microservices

47 minIntermediate

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).
text
                                  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#

Terminal
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#

Terminal
helm template myapp myapp/ --debug

Step 3: Install Helm Release to EKS#

Terminal
helm install myapp myapp/ -n nti-devops

Step 4: Upgrade Release with Custom Image Tag#

Terminal
helm upgrade myapp myapp/ -n nti-devops --set image.tag="v2.0.0"

Verify it worked#

Terminal
helm list -n nti-devops

Expected Output:

text
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.0


Clean 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.

Terminal
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.

The concept behind it

Ready to try it without help?Do the challenge