Helm Install: Deploy Charts Guide
Install Helm charts on Kubernetes with helm install, upgrade, rollback, and values customization. Repository management, OCI registries, and release lifecycle.
π‘ Quick Answer:
helm install my-release chart-namedeploys a Helm chart. Add-f values.yamlfor custom config,--set key=valuefor inline overrides,--namespacefor target namespace,--create-namespaceto auto-create it. Upgrade:helm upgrade my-release chart-name. Rollback:helm rollback my-release 1. Uninstall:helm uninstall my-release.
The Problem
Deploying complex applications requires many Kubernetes resources:
- Deployment + Service + Ingress + ConfigMap + Secret + ServiceAccount + RBACβ¦
- Different config per environment (dev/staging/prod)
- Version management and rollback capability
- Dependency management (app needs Redis, PostgreSQL)
The Solution
Install Helm
# macOS
brew install helm
# Linux
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Verify
helm versionAdd Chart Repositories
# Add popular repos
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add grafana https://grafana.github.io/helm-charts
helm repo add jetstack https://charts.jetstack.io
# Update repo index
helm repo update
# Search for charts
helm search repo nginx
helm search repo prometheus
helm search hub wordpress # Search Artifact HubInstall a Chart
# Basic install
helm install my-nginx ingress-nginx/ingress-nginx
# With namespace
helm install my-nginx ingress-nginx/ingress-nginx \
-n ingress-nginx --create-namespace
# With custom values file
helm install my-app bitnami/postgresql \
-f my-values.yaml \
-n databases --create-namespace
# With inline overrides
helm install my-app bitnami/postgresql \
--set auth.postgresPassword=secretpass \
--set primary.persistence.size=50Gi
# Specific chart version
helm install my-app bitnami/postgresql --version 15.2.0
# Dry run (preview without installing)
helm install my-app bitnami/postgresql --dry-run
# Template only (render YAML)
helm template my-app bitnami/postgresql -f values.yamlValues Customization
# View default values
helm show values bitnami/postgresql > default-values.yaml
# Custom values file
cat <<EOF > my-values.yaml
auth:
postgresPassword: "secretpass"
database: "mydb"
primary:
persistence:
size: 50Gi
storageClass: fast-ssd
resources:
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: "2"
memory: 2Gi
metrics:
enabled: true
EOF
helm install postgres bitnami/postgresql -f my-values.yaml -n databasesUpgrade and Rollback
# Upgrade release (new values or chart version)
helm upgrade my-app bitnami/postgresql \
-f updated-values.yaml \
-n databases
# Upgrade with install fallback (idempotent)
helm upgrade --install my-app bitnami/postgresql \
-f values.yaml -n databases --create-namespace
# List revision history
helm history my-app -n databases
# REVISION STATUS DESCRIPTION
# 1 deployed Install complete
# 2 deployed Upgrade complete
# Rollback to revision 1
helm rollback my-app 1 -n databases
# Rollback to previous revision
helm rollback my-app -n databasesManage Releases
# List all releases
helm list -A
# List in specific namespace
helm list -n databases
# Get release info
helm get values my-app -n databases # Current values
helm get manifest my-app -n databases # Rendered YAML
helm get notes my-app -n databases # Post-install notes
helm get all my-app -n databases # Everything
# Release status
helm status my-app -n databases
# Uninstall
helm uninstall my-app -n databases
# Uninstall but keep history
helm uninstall my-app -n databases --keep-historyOCI Registry Charts
# Pull from OCI registry (Helm 3.8+)
helm pull oci://registry.example.com/charts/myapp --version 1.0.0
# Install from OCI
helm install my-app oci://registry.example.com/charts/myapp --version 1.0.0
# Push to OCI
helm push myapp-1.0.0.tgz oci://registry.example.com/charts/
# Login to OCI registry
helm registry login registry.example.com -u user -p passWait and Timeout
# Wait for resources to be ready
helm install my-app bitnami/postgresql \
--wait \
--timeout 10m
# Atomic: auto-rollback on failure
helm upgrade --install my-app bitnami/postgresql \
--atomic \
--timeout 5mCommon Issues
βrelease already existsβ
Use helm upgrade --install for idempotent deploys. Or helm uninstall first.
βno matches for kindβ after helm install
CRDs not installed. Some charts require --set installCRDs=true or separate CRD installation step.
Values not applying
YAML indentation error in values file. Validate: helm template my-app chart -f values.yaml to see rendered output.
Best Practices
- Use
upgrade --installfor CI/CD β idempotent, works for new and existing releases - Use
--atomicin production β auto-rollback on failure - Pin chart versions β
--version 15.2.0, not latest - Store values in git β version-control your customizations
helm diffplugin β preview changes before upgrade:helm diff upgrade my-app chart -f values.yaml
Key Takeaways
helm installdeploys charts;helm upgradeupdates them- Customize with
-f values.yamlor--set key=value helm rollbackreverts to any previous revision- Use
--atomicfor safe production deployments with auto-rollback helm upgrade --installis the idempotent pattern for CI/CD

Recommended
Kubernetes Recipes β The Complete Book100+ production-ready patterns with detailed explanations, best practices, and copy-paste YAML. Everything in one place.
Get the Book βLearn by Doing
CopyPasteLearn β Hands-on Cloud & DevOps CoursesMaster Kubernetes, Ansible, Terraform, and MLOps with interactive, copy-paste-run lessons. Start free.
Browse Courses βπ Deepen Your Skills β Hands-on Courses
Courses by CopyPasteLearn.com β Learn IT by Doing
