Amazon EKS — Helm Cheat Sheet
Helm is the package manager for Kubernetes. Most EKS tooling (AWS LB Controller, Karpenter, Prometheus, ArgoCD) is installed via Helm.
Repository Management
# Add a repo
helm repo add eks https://aws.github.io/eks-charts
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 argo https://argoproj.github.io/argo-helm
helm repo add jetstack https://charts.jetstack.io
# Update repos
helm repo update
# Search for charts
helm search repo karpenter
helm search repo prometheus --versions
# List repos
helm repo list
# Remove repo
helm repo remove <repo-name>
Install & Upgrade
# Install chart
helm install <release-name> <chart> -n <namespace> --create-namespace
# Install with custom values
helm install my-release prometheus-community/kube-prometheus-stack \
-n monitoring --create-namespace \
-f values.yaml
# Install with inline values
helm install my-release eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=my-cluster \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller
# Upgrade (install or update)
helm upgrade --install my-release <chart> -n <namespace> -f values.yaml
# Upgrade with atomic (auto-rollback on failure)
helm upgrade --install my-release <chart> -n <namespace> -f values.yaml --atomic --timeout 5m
Inspect & Debug
# List installed releases
helm list -A
helm list -n <namespace>
# Get release info
helm status <release-name> -n <namespace>
# Get release values
helm get values <release-name> -n <namespace>
helm get values <release-name> -n <namespace> --all # Include defaults
# Get all release info
helm get all <release-name> -n <namespace>
# Get chart default values
helm show values <chart>
helm show values prometheus-community/kube-prometheus-stack > default-values.yaml
# Render templates locally (dry run)
helm template <release-name> <chart> -f values.yaml > rendered.yaml
# Dry run against cluster
helm install <release-name> <chart> -f values.yaml --dry-run --debug
History & Rollback
# Release history
helm history <release-name> -n <namespace>
# Rollback to previous revision
helm rollback <release-name> -n <namespace>
# Rollback to specific revision
helm rollback <release-name> 2 -n <namespace>
Uninstall
# Uninstall release
helm uninstall <release-name> -n <namespace>
# Uninstall and keep history
helm uninstall <release-name> -n <namespace> --keep-history
Common EKS Helm Installations
AWS Load Balancer Controller
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=my-cluster \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller
Karpenter
helm install karpenter oci://public.ecr.aws/karpenter/karpenter \
-n kube-system \
--set settings.clusterName=my-cluster \
--set settings.interruptionQueue=my-cluster \
--set controller.resources.requests.cpu=1 \
--set controller.resources.requests.memory=1Gi
Prometheus + Grafana
helm install prometheus prometheus-community/kube-prometheus-stack \
-n monitoring --create-namespace \
--set grafana.adminPassword=admin123
ArgoCD
helm install argocd argo/argo-cd \
-n argocd --create-namespace \
--set server.service.type=LoadBalancer
Metrics Server
helm install metrics-server metrics-server/metrics-server \
-n kube-system
values.yaml Best Practices
# Always pin image versions
image:
tag: "v2.7.1" # Not "latest"
# Set resource requests
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
memory: 256Mi
# Use IRSA service account
serviceAccount:
create: false
name: my-service-account
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/MyRole
# Configure replicas for HA
replicaCount: 2
# Set pod disruption budget
podDisruptionBudget:
minAvailable: 1