helm (Kubernetes)
For macOS with Homebrew:
brew install helm
2. Add a Helm repository
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo updateBitnami maintains a catalog of tested and production-ready charts for databases, CMS systems, and monitoring tools.
3. Search for a chart
helm search repo bitnami | grep nginxThis command shows all available nginx charts in the Bitnami repository.
4. Install a chart
helm install mijn-nginx bitnami/nginx --namespace productie --create-namespaceThis command installs the nginx chart in the `productie` namespace. Helm automatically creates the namespace and deploys all Kubernetes manifests from the chart.
5. Configure a chart with values
Create a file `values-prod.yaml`:replicaCount: 3
image:
tag: "1.25.3"
service:
type: LoadBalancer
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"Install with custom configuration:
helm install mijn-app ./helm-chart --values values-prod.yaml
The same chart now works in development, test, and production environments with different configurations via the `values.yaml` file.
6. Upgrade a release
helm upgrade mijn-nginx bitnami/nginx --namespace productie --atomicThe `--atomic` flag automatically rolls back the upgrade on failure, which increases the reliability of deployments.
7. Use OCI registries
Helm 3.14 and higher supports OCI artifacts. Store charts in container registries:helm registry login registry-1.docker.io --username jouw-gebruikersnaam
helm package ./mijn-chart
helm push mijn-chart-1.0.0.tgz oci://registry-1.docker.io/bitnamichartsOCI support means charts are managed alongside container images in the same secure ecosystem. Docker Hardened Images offer charts with SLSA Level 3 compliance, SBOMs, and signed attestations via Sigstore tooling such as Cosign.
8. Remove a release
helm uninstall mijn-nginx --namespace productieThis command removes all Kubernetes resources associated with the release.
Verification
Check whether the installation was performed correctly:helm list --namespace productie
kubectl get pods --namespace productie
kubectl get svc --namespace productieThe `helm list` command shows all active releases. `kubectl get pods` and `kubectl get svc` confirm that the pods are running and services are available.
Common problems
1. Helm cannot connect to the cluster
Check your kubeconfig:kubectl config current-context
kubectl cluster-infoIf kubectl works but Helm does not, check the Helm environment variables:
echo $KUBECONFIG
helm version --client
2. Upgrade fails and the release is in "failed" status
helm rollback mijn-nginx 1 --namespace productieThis rolls the release back to revision 1. Use `helm history mijn-nginx --namespace productie` to view all revisions.
3. Chart installation fails with "manifest is not valid"
Validate the chart syntax:helm lint ./mijn-chart
helm template ./mijn-chart --debug`helm template` renders the manifests locally without deploying them, which helps in detecting errors in templates.
Helm 3 versus Helm 2
Helm 3, announced on November 13, 2019, removed Tiller, the server-side component from Helm 2. This simplified the architecture and improved security because a long-running service with extensive privileges was no longer needed in the cluster. Helm 3 introduced better RBAC support, improved upgrade and rollback mechanisms, and a more robust templating engine.Helm as a CNCF project
Helm began in 2015 at Deis, a startup that built developer tools for cloud platforms. The first commit in the Git repository dates to October 19, 2015. Helm Classic was published during the inaugural KubeCon in November 2015. In January 2016, Helm Classic merged with Google's Kubernetes Deployment Manager and became part of the Kubernetes ecosystem. After Microsoft acquired Deis in 2017, the project continued to develop with a focus on stability and security.In June 2018, Helm was promoted from a subproject to a full CNCF project, with the same status as Prometheus, Envoy, and etcd. On April 30, 2020, Helm became a "graduate" project — the tenth project to achieve this status. Helm v4.0.0 was released on November 12, 2025, during KubeCon + CloudNativeCon North America.
Helm chart structure
A chart contains all Kubernetes manifests needed for an application: deployments, services, ingresses, configmaps, and secrets. Charts are built hierarchically and can contain other charts as dependencies. The directory structure of a chart:mijn-chart/
├── Chart.yaml
├── values.yaml
├── templates/
│ ├── deployment.yaml
│ ├── service.yaml
│ └── _helpers.tpl
└── charts/
└── afhankelijkheid-1.0.0.tgz`Chart.yaml` contains metadata such as name and version. `values.yaml` defines default configuration. Templates in the `templates/` folder use Go templating and can be customized with values.
Helm and software supply chain
Helm charts as OCI artifacts support modern security practices. Docker Hardened Images contain charts that meet SLSA Level 3, with extensive SBOMs and signed attestations via Cosign. These attestations verify what is in the chart, how it was built, and whether it meets security policies. Docker Hub stores charts via the `config` property in the image manifest.Docker Compose Bridge converts compose files to Kubernetes manifests or Helm charts, allowing applications to migrate from local Docker environments to Kubernetes. Compose Bridge automatically configures model endpoints for LLMs and Docker Model Runner.
Freelens, a community-based Kubernetes IDE, offers graphical support for Helm. Users install, upgrade, and manage charts through a dashboard without using the CLI, with real-time cluster status and built-in terminal access.
Helm continues to evolve within the CNCF, and integration with OCI registries, security tooling, and graphical interfaces is steadily growing—the question is which new workflows the next major version will enable.