• Chart: packaged K8s manifests + default values
  • Release: named chart installation in cluster
  • Exam: consume charts only: building/publishing out of scope
  • Artifact Hub: discover charts; install from repo URL, not Hub directly

Workflow

  1. helm repo add <name> <url>
  2. helm repo update
  3. helm search repo <name>
  4. helm install <release> <repo/chart> --version X
  5. helm list / kubectl get all
  6. helm upgrade <release> <repo/chart> --set key=val
  7. helm uninstall <release>

Key commands

TaskCommand
Add a repohelm repo add bitnami https://charts.bitnami.com/bitnami
Update reposhelm repo update
Search for charthelm search repo nginx
Show default valueshelm show values bitnami/nginx
Install with defaultshelm install my-nginx bitnami/nginx
Install with values filehelm install my-nginx bitnami/nginx --values custom.yaml
Install with inline valuehelm install my-nginx bitnami/nginx --set replicaCount=3
Install in namespacehelm install my-nginx bitnami/nginx -n prod --create-namespace
List releaseshelm list -A
Statushelm status my-nginx
Upgradehelm upgrade my-nginx bitnami/nginx --set replicaCount=5
Upgrade or installhelm upgrade --install my-nginx bitnami/nginx
Rollback to revision 1helm rollback my-nginx 1
Uninstallhelm uninstall my-nginx
Render templates locallyhelm template my-nginx bitnami/nginx
Dry-runhelm install my-nginx bitnami/nginx --dry-run
helm repo list
helm search repo jenkinsci --versions
helm template jenkinsci/jenkins --version 4.6.4
helm install my-jenkins jenkinsci/jenkins --version 4.6.4 -n prod --create-namespace --dry-run
helm install my-jenkins jenkinsci/jenkins --set persistence.size=8Gi
helm upgrade my-jenkins jenkinsci/jenkins --reuse-values --set image.tag=2.414.3
helm history my-jenkins

Inspecting charts before install

helm show values jenkinsci/jenkins
helm show values jenkinsci/jenkins --version 4.6.4
helm show chart jenkinsci/jenkins
helm template my-jenkins jenkinsci/jenkins --values my-values.yaml

Inspecting installed releases

helm get values my-jenkins           # user-supplied overrides only
helm get values my-jenkins --all     # all values including defaults
helm get manifest my-jenkins         # rendered manifest of deployed release

Helm chart debugging (lint + local install)

helm lint ./mychart/
# Output:
# [ERROR] templates/deployment.yaml: ...
# 1 chart(s) linted, 1 chart(s) failed

Fix-and-install workflow

ls ./mychart/
cat ./mychart/Chart.yaml       # appVersion, version, name
cat ./mychart/values.yaml
ls ./mychart/templates/

vim ./mychart/values.yaml      # set required values
vim ./mychart/Chart.yaml       # change appVersion if asked
vim ./mychart/templates/deployment.yaml   # fix template bugs

helm lint ./mychart/

kubectl get ns mynamespace || kubectl create ns mynamespace
helm install my-release ./mychart/ -n mynamespace

helm ls -n mynamespace
kubectl get all -n mynamespace

Common chart template bugs

BugSymptomFix
apiVersion: extensions/v1beta1INSTALLATION FAILEDChange to apps/v1
Typo in {{ .Values.service.nme }}Wrong value (empty string)Fix key name to match values.yaml
Missing selector.matchLabelsDeployment won't create PodsAdd selector matching template labels
Wrong indentationYAML parse errorFix spacing (2 spaces)

Exam gotchas

  • Fresh Helm has no repos: must helm repo add first
  • helm repo update if repo not found
  • Chart name format: <repo>/<chart>
  • helm show values before --set to get correct key names
  • helm get values shows only user-supplied overrides; --all for full picture
  • helm lint before helm install; tells exact file + line
  • appVersion = application version; version = chart version
  • Namespace must exist before helm install unless --create-namespace