πŸ“šBook Signing at KubeCon EU 2026Meet us at Booking.com HQ (Mon 18:30-21:00) & vCluster booth #521 (Tue 24 Mar, 12:30-1:30pm) β€” free book giveaway!RSVP Booking.com Event
Helm beginner ⏱ 10 minutes K8s 1.28+

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.

By Luca Berton β€’ β€’ πŸ“– 5 min read

πŸ’‘ Quick Answer: helm install my-release chart-name deploys a Helm chart. Add -f values.yaml for custom config, --set key=value for inline overrides, --namespace for target namespace, --create-namespace to 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 version

Add 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 Hub

Install 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.yaml

Values 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 databases

Upgrade 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 databases

Manage 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-history

OCI 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 pass

Wait 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 5m

Common 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 --install for CI/CD β€” idempotent, works for new and existing releases
  • Use --atomic in production β€” auto-rollback on failure
  • Pin chart versions β€” --version 15.2.0, not latest
  • Store values in git β€” version-control your customizations
  • helm diff plugin β€” preview changes before upgrade: helm diff upgrade my-app chart -f values.yaml

Key Takeaways

  • helm install deploys charts; helm upgrade updates them
  • Customize with -f values.yaml or --set key=value
  • helm rollback reverts to any previous revision
  • Use --atomic for safe production deployments with auto-rollback
  • helm upgrade --install is the idempotent pattern for CI/CD
#helm #charts #deployment #package-management #cka
Luca Berton
Written by Luca Berton

Principal Solutions Architect specializing in Kubernetes, AI/GPU infrastructure, and cloud-native platforms. Author of Kubernetes Recipes and creator of CopyPasteLearn courses.

Kubernetes Recipes book cover

Want More Kubernetes Recipes?

This recipe is from Kubernetes Recipes, our 750-page practical guide with hundreds of production-ready patterns.

Luca Berton Ansible Pilot Ansible by Example Open Empower K8s Recipes Terraform Pilot CopyPasteLearn ProteinLens