Skip to main content

Helm

The package manager for Kubernetes — simplify deployments with reusable charts.

Key Concepts

  • Chart — A package of pre-configured K8s resources
  • Release — An instance of a chart running in a cluster
  • Repository — A collection of charts
  • Values — Configuration parameters for customization

Essential Commands

# Add a repository
helm repo add bitnami https://charts.bitnami.com/bitnami

# Search for charts
helm search repo nginx

# Install a chart
helm install my-release bitnami/nginx

# List releases
helm list

# Upgrade a release
helm upgrade my-release bitnami/nginx --set replicaCount=3

# Rollback
helm rollback my-release 1

# Uninstall
helm uninstall my-release

Creating Your Own Chart

# Create chart scaffold
helm create my-chart

# Chart structure
my-chart/
Chart.yaml # Chart metadata
values.yaml # Default values
templates/ # K8s manifest templates
deployment.yaml
service.yaml
ingress.yaml
_helpers.tpl # Template helpers

Best Practices

  • Use semantic versioning for charts
  • Document all values in values.yaml
  • Use _helpers.tpl for reusable template logic
  • Test charts with helm lint and helm template
  • Store charts in a chart repository (ChartMuseum, OCI)

Learning Resources

Getting Started

ResourceDescription
Helm DocumentationOfficial Helm documentation
Create Your First Helm ChartBitnami guide on authoring charts
Authoring Awesome ChartsOfficial Helm guide on chart authoring
Kompose GuideTranslate docker-compose to Helm

Chart Repositories

RepositoryDescription
Helm HubOfficial Helm Hub
Bitnami ChartsPopular application charts
KubeappsHelm chart discovery hub
ChartCenterCentral Helm chart repository by JFrog
CloudsmithManaged package repository with free tier
Fairwinds ChartsFairwinds chart hub

Helm Plugins

PluginDescription
Helm DiffShow diff of helm upgrade/rollback
Helm SecretsManage secrets safely
Helm S3Fetch charts from S3
Helm GCSManage charts on Google Cloud Storage
Helm DatreeEnforce best practices and policies
Helm Schema GenGenerate values.schema.json
Helm TellerManage deployment configuration securely

Helm Tools

ToolDescription
HelmfileDeclarative spec for deploying Helm charts
HelmsmanTerraform-like desired state for Helm
ReckonerSimplify multiple Helm releases
MonocularWeb UI for searching charts
ChartMuseumSelf-hosted Helm chart repository
HelmifyGenerate Helm charts from K8s YAML
Helm DocsAuto-generate chart documentation
werfCLI tool for CI/CD with extended Helm

Useful Applications

ApplicationRepository
GitLab Omnibuscharts.gitlab.io
JupyterHubjupyterhub.github.io/helm-chart
Harbor Registrygithub.com/goharbor/harbor-helm
OpenStackgithub.com/openstack/openstack-helm
Elasticsearch/Kibanagithub.com/elastic/helm-charts
Kafkagithub.com/Landoop/kafka-helm-charts

Community

ChannelLink
Slack#helm-users on K8s Slack
Stack Overflowkubernetes-helm tag

Hook Lifecycle

Helm provides hooks to intervene at specific lifecycle points:

HookTiming
pre-installAfter templates render, before resources created
post-installAfter all resources loaded into Kubernetes
pre-deleteBefore deletion request resources deleted
post-deleteAfter release resources deleted
pre-upgradeAfter templates render, before update
post-upgradeAfter resources upgraded
pre-rollbackAfter templates render, before rollback
post-rollbackAfter resources modified
testWhen Helm test subcommand invoked