Amazon EKS — Helm Cheat Sheet

2 minute read

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

Updated: