What Is Helm in Kubernetes: The Package Manager for Your Cluster

What Is Helm in Kubernetes: The Package Manager for Your Cluster

Understand what Helm is, why teams use it, how charts, releases, and values fit together, and how to install, upgrade, and roll back complete applications on Kubernetes with confidence instead of juggling dozens of separate files.

Imagine moving into a new house. You could buy every screw, plank, and pipe separately and follow a long list of instructions to build your furniture. Or you could buy a flat-pack wardrobe that arrives in one box, with all the parts labelled, a clear instruction sheet, and a few options such as colour and size. If you later want a different colour, you do not rebuild everything from scratch; you just choose again. Helm is the flat-pack box for Kubernetes applications. It bundles all the pieces of an application into one package, lets you choose options when you install it, and remembers exactly what you installed so you can upgrade or undo it later.

1The Problem Helm Was Built to Solve

Running a real application on Kubernetes takes far more than a single file.

Kubernetes describes everything you want to run through text files called manifests. A manifest says, for example, “run three copies of this program,” or “expose this program on this port.” A small demo may need only one or two manifests. A real application needs many: one for the program itself, one for its network address, one for its settings, one for its secret passwords, one for its storage, one for permissions, and often more. A typical production application can easily need twenty or thirty files.

Managing that pile of files by hand creates several painful problems. You must apply them in the right order. You must edit the same values in many places, such as the name of the application or the version of the software. If you want to run the same application in a test environment and a production environment, you must copy all the files and change a few details in each copy. Over time, the copies drift apart, and nobody is sure which version is running where.

Simple Analogy

Think of a restaurant that writes every recipe on a separate loose page, one page for the sauce, one for the dough, one for the toppings, and one for the oven settings. To make a pizza for a different customer with less salt, someone must find the right pages and edit each one. A cookbook that keeps all pages together and lets you change a single “salt level” setting is far easier to manage. Helm is that cookbook.

The questions teams kept asking

Teams found themselves asking the same questions again and again. How do I install this whole application with one command? How do I change one setting without editing ten files? How do I upgrade safely, and go back if the upgrade goes wrong? How do I share my application with other teams, or use one built by someone else? Helm was created to answer these questions in a standard way.

1
Package for a whole application
Many
Environments from one package
Undo
One step to roll back a release
i
Good to know

This guide assumes you have heard of pods and Deployments, but every new term is explained when it first appears. You do not need to write any templates to follow along; the goal is to understand the ideas so the tool feels natural when you use it.

2So, What Exactly Is Helm?

A package manager and templating tool that installs and tracks whole applications on Kubernetes.

Helm is an open-source tool that acts as the package manager for Kubernetes. If you have used a package manager on a computer, such as the software store on a phone or the tool that installs programs on a server, the idea is the same. Instead of downloading and configuring every piece of a program yourself, you ask the package manager to install it by name. It finds the package, applies your choices, installs everything in the right order, and keeps a record of what it did.

Helm packages are called charts. A chart is a collection of files that together describe a Kubernetes application, including templates for the manifests and a set of default settings. When you install a chart, Helm combines the templates with your settings, produces the final manifests, and sends them to the cluster. The resulting installed application is called a release, and Helm tracks each release so that it can upgrade, roll back, or remove it later.

Simple Analogy

A chart is like a blueprint together with a checklist of adjustable options. A release is a specific house built from that blueprint with your chosen options. You can build many houses from the same blueprint, each with different options, and the builder keeps a logbook for every house.

A brief history

Helm began as a project to make Kubernetes applications easier to share and install, and it became one of the most widely adopted tools in the ecosystem. It is maintained under the Cloud Native Computing Foundation, the same organisation that hosts Kubernetes. The first major version relied on a server-side component inside the cluster called Tiller, which caused security concerns because it held broad permissions. The third major version removed Tiller entirely, and Helm now works as a simple client that talks directly to the cluster using the permissions of the person running it.

!
Common Misconception

Helm is not a replacement for Kubernetes and does not run your application. It only prepares and sends manifests to the cluster and keeps records. Kubernetes itself still starts the pods, restarts them when they fail, and handles networking.

3Core Vocabulary: Chart, Release, Repository, Values

Five words explain almost everything Helm does.

Term 1

Chart

A package that describes a Kubernetes application. It contains templates, default settings, and information about itself such as its name and version.

Term 2

Release

One installed instance of a chart in a cluster. The same chart can be installed many times, each with its own release name and settings.

Term 3

Repository

A place where charts are stored and shared, so that you can search for and download them, much like an app store.

Term 4

Values

The adjustable settings of a chart, such as the number of copies, the image version, or the domain name. You override defaults with your own values.

Term 5

Template

A manifest with blanks in it. Helm fills the blanks with values to produce the final manifest that is sent to the cluster.

Term 6

Revision

A numbered version of a release. Every install, upgrade, or rollback creates a new revision, which is what makes history and rollback possible.

flowchart LR
    R[Repository
stores charts] --> C[Chart
templates and defaults] V[Your values
your choices] --> H[Helm renders] C --> H H --> M[Final manifests] M --> K[Kubernetes cluster] K --> REL[Release
tracked by Helm]
FIG 1 — A chart plus your values produces manifests, and the installed result is a release
Simple Analogy

Consider a cake. The chart is the recipe book. The values are your choices, such as chocolate or vanilla and small or large. The release is the actual cake you baked. The repository is the library where you found the recipe book, and each new attempt at the cake is a new revision in your baking diary.

i
Chart Version and App Version

A chart carries two version numbers that people often mix up. The chart version says how the package itself has changed. The app version says which version of the packaged software the chart deploys by default. They can move independently.

4Anatomy of a Chart

A chart is just a folder with a predictable layout.

A chart is a directory of files arranged in a standard way. Because the layout is standard, every chart in the world can be understood by the same tool and read by anyone familiar with Helm. Knowing what each part is for makes charts far less mysterious.

PartWhat It IsWhy It Matters
Chart metadata fileDescribes the chart: name, description, chart version, app version, dependencies, and compatibilityIdentifies the package and tells Helm how to treat it
Default values fileThe full set of adjustable settings with their default choicesDocuments every option and gives sensible defaults
Templates folderThe manifests with blanks that are filled from valuesContains the real content of the application
Helper templatesReusable snippets, such as standard names and labelsKeeps templates short and consistent
Notes fileA message shown to the person after installingExplains how to reach or use the application
Charts folderOther charts this chart depends on, called subchartsLets a chart include a database or cache as a part
CRDs folderCustom resource definitions installed before the restPrepares the cluster for custom object types
Values schema fileAn optional description of which values are allowedRejects mistakes before anything is installed
flowchart TD
    CH[Chart folder] --> META[Metadata
name and versions] CH --> VAL[Default values] CH --> TPL[Templates folder] CH --> SUB[Subcharts folder] CH --> CRD[CRDs folder] TPL --> D[Deployment template] TPL --> S[Service template] TPL --> CM[ConfigMap template] TPL --> H[Helper snippets]
FIG 2 — The standard layout of a chart
Simple Analogy

A chart folder is like a flat-pack box. The label on the outside is the metadata. The list of adjustable options is the values file. The parts inside are the templates. Some boxes even contain smaller boxes, which are the subcharts, and the sheet of tips at the top is the notes file.

!
Custom Resource Definitions

Helm installs files from the CRDs folder before anything else, but it does not upgrade or delete them later. This is deliberate, because removing a definition can destroy all custom objects of that kind. Plan a separate process for evolving them.

5How Helm Works Behind the Scenes

A small client program that renders manifests and talks to the cluster.

Helm is a command-line program that runs on your computer or in an automation pipeline. When you ask it to install a chart, it reads the chart, combines the templates with your values to create the final manifests, and then sends those manifests to the Kubernetes API server, which is the front door of the cluster. Helm then stores a record of what it did inside the cluster, so it can recognise the release later.

sequenceDiagram
    participant U as You
    participant H as Helm client
    participant R as Chart source
    participant API as Kubernetes API Server
    participant C as Cluster
    U->>H: Install chart with my values
    H->>R: Fetch the chart if not local
    R-->>H: Chart files
    H->>H: Merge values and render templates
    H->>API: Send final manifests
    API->>C: Create the resources
    H->>API: Store the release record
    H-->>U: Report success and notes
        
FIG 3 — Helm renders manifests locally and sends them to the API server

No server component in the cluster

In the current major version, Helm has no server part running in your cluster. Everything it does happens with your own credentials, exactly as if you had sent the manifests yourself. This is a security improvement, because the permissions Helm uses are the same as the person or pipeline that runs it, and no extra powerful component sits in the cluster waiting to be attacked.

1

Load the chart

Helm reads the chart from a folder, an archive, or a repository, and checks that it is valid.

2

Merge the values

The chart’s defaults are combined with the values you provide. Your choices override the defaults.

3

Render the templates

Every template is filled in with the merged values, producing plain manifests that Kubernetes understands.

4

Send to the cluster

The manifests are submitted to the API server, which creates or updates the resources.

5

Record the release

Helm saves the release information, including the rendered manifests and values, as a new revision.

i
Old versus new

If you read older articles that mention Tiller, they describe the first major version. Advice about installing or securing Tiller no longer applies to the current version.

6Templates and the Rendering Process

Templates are manifests with blanks that Helm fills in.

A plain manifest contains fixed text, such as the exact name of the application and the exact number of copies. A template is the same manifest but with placeholders where you want flexibility. A placeholder might say “put the image version here,” or “put the number of replicas here.” When Helm renders the template, it replaces each placeholder with the corresponding value and produces an ordinary manifest.

Helm’s templates use a text-templating language with a rich set of built-in functions. These functions can supply a default when a value is missing, insist that a required value is present, convert data structures into the right format, and add indentation. Templates can also contain conditions, such as “only create this resource if ingress is turned on,” and loops, such as “create one entry for each item in this list.”

Feature 1

Placeholders

Fill in names, versions, sizes, and addresses from values, so the same template serves many environments.

Feature 2

Conditions

Include or skip whole resources depending on a value, such as creating storage only when persistence is enabled.

Feature 3

Loops

Repeat a block for every item in a list, such as multiple ports, hosts, or environment variables.

Feature 4

Named helpers

Define a reusable snippet once, such as a standard label block, and include it wherever needed.

Feature 5

Built-in objects

Templates can read information about the release, such as its name and namespace, and about the chart itself.

Simple Analogy

A template is like a form letter that says “Dear [name], your order [number] will arrive on [date].” Mail merge fills in the blanks for each customer and produces a personal letter. Helm does the same with manifests, filling in the blanks for each release.

!
Whitespace Matters

The manifests Helm produces are written in a format where spaces and line breaks carry meaning. A template that inserts text with the wrong indentation creates a broken manifest. Rendering a chart locally and reading the result is the best way to catch these mistakes early.

“A template is a manifest with questions in it, and values are the answers.”

7Values and How Overrides Work

One chart, many environments, thanks to layered settings.

Every chart ships with a file of default values. These defaults describe a working installation with sensible choices. You rarely want to edit the chart itself. Instead, you supply your own values, either in a file of your own or as small overrides on the command line. Helm combines all of them, and the more specific ones win over the general ones.

1

Chart defaults

The lowest priority. They are used whenever nothing else says otherwise.

2

Parent chart values

If the chart is used as a subchart, its parent can override its defaults.

3

Your values files

Files you supply override the defaults. When several files are given, later files override earlier ones.

4

Command-line overrides

The highest priority. Individual settings given directly on the command line override everything else.

EnvironmentTypical Values File ContentResult
DevelopmentOne copy, small resources, debug logging, no public addressCheap, quick environment for developers
StagingTwo copies, production-like settings, test domainRealistic rehearsal before release
ProductionMany copies, larger resources, real domain, strict limitsReliable, scalable service
Simple Analogy

Think of a coffee order. The shop has a standard drink, which is the default. You can hand over a card with your usual changes, such as oat milk and no sugar, which is your values file. Then, when ordering, you can say “extra hot today,” a last-minute override that beats everything else.

Keeping values safe and correct

A chart can include a schema that describes which values are allowed and what type each must be. When a schema is present, Helm checks your values against it before doing anything, and rejects mistakes such as a text where a number is expected. This turns confusing failures deep inside the cluster into clear messages at the start.

i
Practical Tip

Keep one values file per environment in version control, and keep them small. Only list what differs from the chart defaults. A short file is easy to review and hard to get wrong.

8The Release Lifecycle: Install, Upgrade, Rollback, Uninstall

Four actions cover the whole life of an application.

Action 1

Install

Creates a new release from a chart and your values. Helm renders the manifests, sends them, and records revision one.

Action 2

Upgrade

Applies a new chart version or new values to an existing release. Helm computes what changed and updates only that, creating a new revision.

Action 3

Rollback

Returns a release to an earlier revision. Helm reapplies the older manifests and records the rollback as a new revision.

Action 4

Uninstall

Removes the resources that the release created. By default, the history is removed too, unless you ask to keep it.

flowchart LR
    I[Install
revision 1] --> U1[Upgrade
revision 2] U1 --> U2[Upgrade
revision 3] U2 --> RB[Rollback to 2
revision 4] RB --> U3[Upgrade
revision 5] U3 --> X[Uninstall]
FIG 4 — Every change to a release creates a new numbered revision, including rollbacks

How an upgrade decides what to change

When you upgrade a release, Helm does more than blindly resend everything. It compares three things: the manifest from the previous revision, the current live state of the resources in the cluster, and the newly rendered manifest. This three-way comparison lets Helm notice changes made by the chart and also respect certain manual changes made directly in the cluster, producing a more sensible update than a simple overwrite.

Simple Analogy

Editing a shared document with tracked changes works the same way. The editor looks at the original version, the current version, and your proposed version, and merges them sensibly instead of throwing away everything that changed in between.

i
Install or upgrade in one step

Automation often uses a combined action that installs the release if it does not exist and upgrades it if it does. This makes pipelines simple and repeatable, because the same command works on the first run and every run after.

!
Rollback Is Not Magic

Rollback restores the earlier manifests, not the earlier data. If an upgrade changed a database structure or wrote new data, rolling back the application does not undo those changes. Always think about data before relying on rollback.

9Where Helm Remembers Releases: Storage and History

Helm keeps its records inside the cluster, next to the application.

For Helm to upgrade or roll back a release, it must remember what it installed. In the current version, each revision of a release is stored as an object inside the cluster, by default as a Secret in the same namespace as the release. The record includes the chart, the values that were used, and the manifests that were rendered. Because the records live in the cluster, any person or pipeline with access to the namespace can see and manage the release, and no separate database is needed.

Fact 1

One record per revision

Each install, upgrade, or rollback stores a new record, so the full history of a release can be inspected and any older revision can be restored.

Fact 2

Namespace scoped

Release names are unique within a namespace. The same name can be reused in different namespaces without conflict.

Fact 3

History is limited

To avoid endless growth, upgrades keep only a limited number of past revisions, ten by default. Older ones are pruned automatically.

Fact 4

Alternative storage

Helm can be configured to store records in configuration maps or a database instead of secrets, although secrets are the default.

Simple Analogy

Imagine a mechanic who staples a service note to the car every time it is repaired. Anyone who opens the glove box can read the history and know exactly what was done and when. The notes travel with the car, and no separate filing cabinet is needed.

Why the records deserve protection

The stored record includes the values you supplied and the final manifests. If those contained passwords or keys, the record contains them as well. Treat access to the release records as access to those secrets, and restrict who can read secrets in the release namespace accordingly.

!
Size Limit

Kubernetes limits the size of a single stored object. A very large chart with many resources and big values can produce a release record that exceeds the limit, and upgrades fail with a size error. Splitting the application into several smaller charts avoids the problem.

10Repositories, Registries, and Finding Charts

Charts are shared the same way software packages are.

A large part of Helm’s popularity comes from the huge number of charts already written by others. Popular software such as databases, message brokers, monitoring stacks, and ingress controllers is available as ready-made charts. You add a repository, search it, and install a chart by name, instead of writing manifests yourself.

Source 1

Chart repositories

A simple web server that hosts packaged charts and an index describing them. You add its address and then search or install from it.

Source 2

OCI registries

Charts can also be stored in the same kind of registry that holds container images. This lets teams reuse their existing registry, login, and access control.

Source 3

Public discovery hub

A public catalogue lists charts from many publishers, with descriptions and versions, making it easy to find what you need and compare choices.

Source 4

Local folders and archives

Helm can install from a folder on your computer or from a packaged file, which is ideal for developing your own charts and for testing.

flowchart TD
    A[Publisher writes a chart] --> B[Package and sign the chart]
    B --> C[Publish to a repository or registry]
    C --> D[User searches or names the chart]
    D --> E[Helm downloads the chart]
    E --> F[Values applied and release installed]
        
FIG 5 — The journey of a chart from publisher to running release
Simple Analogy

Repositories are like bookshops and libraries for recipe books. A public catalogue is the search engine that tells you which shop stocks the book you want, and OCI registries are libraries that you already belong to, where the books sit beside your other borrowed items.

i
Practical Tip

Always pin the chart version you install, especially in production. Leaving the version open means a future install may fetch a newer chart with different behaviour and surprise you.

11Dependencies and Subcharts

Charts can be built from other charts, like boxes inside boxes.

Many applications need supporting software, such as a database or a cache. Instead of copying those manifests into your chart, you can declare the other chart as a dependency. Helm downloads the dependency, places it in the charts folder as a subchart, and installs it together with your chart as one release. You can also pass values down to the subchart, and you can switch a dependency on or off with a simple condition.

flowchart TD
    P[Parent chart
my application] --> S1[Subchart
database] P --> S2[Subchart
cache] P --> T[Own templates
web service and settings] V[Your values] --> P V -->|values under the subchart name| S1 V -->|values under the subchart name| S2
FIG 6 — A parent chart bundles subcharts and passes values down to them

Umbrella charts

An umbrella chart is a chart with little or no templates of its own that exists only to bundle several other charts into one installable unit. It is a common way to deploy a whole platform made of many services with a single release, and to control all of their versions in one place.

Advantages of subcharts

  • Reuse well-tested charts instead of writing your own
  • Install a whole stack as one unit
  • Turn optional parts on or off with a switch
  • Share common settings through global values

Disadvantages / Trade-offs

  • The release becomes larger and slower to upgrade
  • Upgrading a dependency can change behaviour unexpectedly
  • Parent and subchart values can become confusing to trace
  • A failure in one part can block the whole release
i
Design Advice

Bundle a database as a subchart for development and testing convenience, but for production, many teams prefer a managed database service or a separately managed release, so that application upgrades never risk the data store.

12Hooks and Tests

Running special tasks at specific moments in a release.

Some applications need extra steps at particular times: a database migration before an upgrade, a cleanup job before deletion, or a smoke test after installation. Helm supports this through hooks, which are ordinary Kubernetes resources marked to run at a certain point of the release lifecycle. Because they are resources like any other, a hook is often a short-lived job.

Hook MomentWhen It RunsTypical Use
Before installAfter templates render, before any resource is createdPrepare prerequisites
After installAfter all resources are createdSeed data, send a notification
Before upgradeBefore changes are appliedRun database migrations, take a backup
After upgradeAfter changes are appliedWarm caches, verify health
Before deleteBefore resources are removedExport data, deregister from external systems
After deleteAfter resources are removedClean up external resources
Before or after rollbackAround a rollbackUndo migrations or notify teams
TestOnly when tests are explicitly runCheck that the release works
sequenceDiagram
    participant H as Helm
    participant M as Pre-upgrade hook job
    participant K as Cluster
    H->>M: Run migration job
    M->>K: Update the database structure
    M-->>H: Job completed
    H->>K: Apply upgraded application resources
    K-->>H: Resources ready
    H->>K: Run post-upgrade hook if defined
        
FIG 7 — A pre-upgrade hook completes before the main upgrade proceeds
Simple Analogy

Hooks are like the safety checks before and after a flight. Before take-off, the crew runs a checklist. After landing, they run another. The flight is the release, and the checklists are the hooks that must complete at the right moment.

!
Hooks Are Not Managed Like Other Resources

Resources created by hooks are not tracked as part of the release in the usual way, so they are not removed automatically with the release unless you give them a cleanup policy. Old hook jobs left behind can clutter the cluster or block the next run with a name clash.

13Helm Compared with kubectl and Kustomize

Three ways to deploy, each with a different philosophy.

Helm is not the only way to deploy to Kubernetes. Applying manifests directly with the standard command-line tool is the simplest approach. Kustomize is another popular tool that customises plain manifests using overlays and patches rather than templates. Each has strengths, and many teams use more than one.

AspectPlain kubectl applyKustomizeHelm
ApproachSend manifests as they arePatch and overlay plain manifestsFill templates with values
Packaging and sharingNone built inLimited, folders and basesCharts, repositories, and registries
Release tracking and rollbackNo release conceptNo release conceptNumbered revisions with rollback
Per-environment differencesCopy and edit filesOverlays for each environmentValues files for each environment
Learning curveLowestModerateModerate to high because of templating
Readability of the sourceVery clear, plain manifestsClear, plain manifests plus patchesTemplates can become hard to read
Best forSmall, simple setupsYour own manifests with light variationPackaged, reusable, and third-party software
Simple Analogy

Plain manifests are like ordering every dish separately from the menu. Kustomize is like taking a standard meal and asking the chef to change a few things. Helm is like a meal kit with a recipe card and adjustable portions, delivered with a record of what you ordered.

i
Combining Them

Helm and Kustomize work together. You can render a Helm chart and then apply extra patches to the output before it reaches the cluster. This is useful when you need to adjust a third-party chart in a way its values do not allow.

flowchart TD
    Q1{Need to package and share the application?} -->|Yes| H[Use Helm]
    Q1 -->|No| Q2{Need light changes per environment?}
    Q2 -->|Yes| K[Use Kustomize]
    Q2 -->|No| P[Plain manifests are enough]
    Q3{Installing third-party software?} -->|Yes| H
        
FIG 8 — A simple guide for picking a deployment approach

14When to Use Helm

Situations where a package manager pays for itself.

Installing third-party software

Databases, monitoring tools, ingress controllers, and certificate managers are available as maintained charts. Installing them through Helm saves days of writing and testing manifests and gives you a standard path for upgrades.

Deploying the same application to many environments

One chart with a values file for each environment guarantees that development, staging, and production differ only in the ways you intended.

Distributing your product to customers

Software vendors ship charts so that customers can install a complex product on their own clusters with a few choices and a single command.

Managing many similar services

Organisations with dozens of microservices often create a shared chart that encodes company standards, and each service supplies only a small values file.

Needing controlled upgrades and rollbacks

Because every change is a numbered revision, teams can see what changed, roll back quickly, and audit the history of a release.

Short-lived preview environments

Pipelines install a release for each pull request and uninstall it afterwards, with one command in each direction and no leftover resources.

!
When Helm May Be Too Much

For a tiny application with a couple of manifests that never vary, Helm adds complexity without much benefit. Plain manifests or a light overlay may be easier for everyone to read and maintain.

15Helm in CI/CD and GitOps

Automating releases so that people do not type commands at midnight.

Helm fits naturally into automated delivery. A pipeline builds a container image, updates the chart version or values, and runs a single install-or-upgrade action against the cluster. The chart and the values live in version control, so every release can be traced back to a commit, reviewed by teammates, and reproduced later.

flowchart LR
    C[Developer commits code] --> B[Pipeline builds image]
    B --> V[Update values with new image version]
    V --> L[Lint and render the chart]
    L --> T[Deploy to staging release]
    T --> A[Run tests]
    A --> P[Deploy to production release]
        
FIG 9 — A typical pipeline that uses Helm to deliver each change

The push model and the pull model

In a push model, a pipeline runs Helm and pushes changes into the cluster. This is easy to understand, but the pipeline needs credentials to the cluster. In a pull model, often called GitOps, a controller running inside the cluster watches a Git repository and applies the chart itself whenever the repository changes. The cluster pulls the desired state, and nobody needs to push into it from outside.

Model 1

Pipeline push

The pipeline runs Helm with cluster credentials. Simple and direct, but credentials must be protected and drift is only corrected when the pipeline runs.

Model 2

GitOps pull

An in-cluster controller renders and applies the chart from Git. It continuously compares the cluster with the repository and can correct drift automatically.

i
Practical Tip

Whatever the model, render and validate the chart in the pipeline before deploying. Catching a template error in a check that runs in seconds is far better than discovering it during a failed rollout.

16Making Upgrades Safe

A few options turn a hopeful upgrade into a controlled one.

By default, Helm sends the manifests and reports success as soon as the API server accepts them. That does not mean the pods started or became healthy. To make upgrades safer, Helm offers options that wait for resources to become ready and automatically undo a failed upgrade.

Option 1

Wait for readiness

Helm waits until the resources it created are ready before reporting success, so a stuck rollout is noticed by the pipeline instead of by users.

Option 2

Timeout

A limit on how long Helm waits. If resources do not become ready in time, the upgrade is reported as failed.

Option 3

Atomic upgrades

If the upgrade fails, Helm automatically rolls back to the previous revision, leaving the release in a known good state.

Option 4

Dry run and diff

Render and validate without changing anything, and use a comparison plugin to see exactly what an upgrade would modify.

Traps that cause upgrade failures

Immutable fields

Some fields of Kubernetes objects cannot be changed once created, such as the selector of a Deployment. A chart change that touches them makes the upgrade fail, and the object must be recreated deliberately.

Configuration changes that do not restart pods

Changing a configuration map does not automatically restart the pods that use it. A common technique is to add a checksum of the configuration to the pod template, so a change in settings changes the template and triggers a rollout.

Custom resource definitions

Because Helm does not upgrade definitions from the CRDs folder, definition changes need their own process, such as a separate chart or a manual step.

Stuck release states

If an operation is interrupted, a release may be left in a pending or failed state that blocks further changes. It must be inspected and, if needed, rolled back or repaired before continuing.

!
Do Not Skip Waiting

A pipeline that finishes as soon as manifests are accepted can report a green result for a release that never becomes healthy. Always wait for readiness in automated deployments.

17Performance and Scale Considerations

Helm is light, but big charts and many releases bring their own limits.

Helm itself does little work: it renders text and talks to the API server. Rendering even a large chart takes moments. The real costs appear elsewhere. Large releases produce large records that must be stored and read on every operation. Charts with hundreds of resources take longer to apply and to wait for. Repositories with thousands of chart versions produce large index files that slow searches.

Advantages

  • Client-only design, no extra components to scale
  • Rendering is fast and can happen anywhere
  • Release records are stored with the application
  • Works with the same permissions and audit trail as other cluster actions

Disadvantages / Trade-offs

  • Very large releases can hit object size limits
  • Large umbrella charts make upgrades slow and risky
  • Many revisions stored per release use cluster storage
  • Waiting for many resources can lengthen pipelines
Tip 1

Keep releases focused

Split a huge platform into several releases with clear responsibilities. Each is quicker to upgrade and easier to understand.

Tip 2

Limit history

Keep a sensible number of past revisions. A handful is usually enough for rollback and audit without filling the namespace.

Tip 3

Avoid huge values

Do not embed large files in values. Store big content in separate objects or external storage and reference it.

18Security Considerations

A chart is code that creates resources in your cluster, so trust matters.

A chart can create almost anything in a cluster: workloads, permissions, network rules, and even resources that grant wide access. Installing a chart from a source you do not trust is like running a program from the internet with your own permissions. Security with Helm therefore starts with knowing what you install and who is allowed to install it.

Review charts before installing them

Render the chart and read the output, especially the permissions it creates and the images it uses. A few minutes of reading prevents surprises such as broad administrative roles or containers running with excessive privileges.

Use trusted sources and pinned versions

Prefer charts from publishers you know, pin exact chart versions, and mirror important charts into your own registry so a change upstream cannot silently alter your deployments.

Verify provenance

Charts can be signed, and Helm can verify the signature and integrity before installing. Signing proves who published a chart and that nobody changed it afterwards.

Keep secrets out of plain values files

Passwords and keys placed in values files end up in version control and in the release record. Use an external secret manager or an encryption approach for values, and reference secrets instead of embedding them.

Limit who can run Helm and where

Because Helm uses your permissions, restrict them with role-based access control. Give pipelines access only to the namespaces they deploy to, not the whole cluster.

Protect the release records

Anyone who can read secrets in a namespace can read the release history, including rendered manifests and values. Restrict that access just as you would for any sensitive secret.

!
Do Not Assume

A popular chart is not automatically a safe or well-configured chart. Defaults are chosen for convenience, and production needs often call for tighter settings on permissions, network access, and resource limits.

19Troubleshooting, Monitoring, and Metrics

Most Helm problems are visible if you look at the rendered output and the release status.

When something goes wrong, there are usually only three places it can have gone wrong: the values were not what you expected, the template rendered something different from what you intended, or the cluster rejected or could not run the result. Working through them in order finds the cause quickly.

1

Check the release status and history

See whether the release is deployed, failed, or stuck in a pending state, and which revision is current. The history shows what changed and when.

2

Look at the values actually used

Retrieve the values stored with the release and compare them with what you thought you supplied. Many problems are simply a value in the wrong file or with the wrong name.

3

Render the chart locally

Produce the final manifests without installing and read them. This reveals indentation errors, missing values, and unexpected resources.

4

Lint the chart

Run the built-in checker to catch structural problems, such as invalid metadata or malformed templates, before they reach a cluster.

5

Inspect the cluster resources

Look at events and pod status for the resources that Helm created. Image pull errors, failed probes, and quota problems appear there, not in Helm’s output.

SymptomLikely CauseWhat To Do
Upgrade fails with an immutable field messageThe chart changed a field that cannot be modifiedRecreate the object deliberately or revert the change
Release stuck in a pending stateA previous operation was interruptedInspect history, then roll back or repair
Rendered output is brokenIndentation or missing value in a templateRender locally and fix the template
Values seem ignoredWrong key path or overridden by a later sourceCheck precedence and the exact nesting of the value
Install says a resource already existsThe object was created outside HelmAdopt it deliberately or remove it first
Pods do not restart after a settings changePod template did not changeAdd a checksum of the settings to the pod template
Signal 1

Release status

Track releases that are failed or pending. A release that is not in the deployed state needs attention before the next change.

Signal 2

Pipeline duration and failures

Watch how long deployments take and how often they fail. A slowly growing duration often hints at a chart that has grown too big.

Signal 3

Chart and image versions in use

Keep an inventory of which chart versions run where, so outdated or vulnerable ones are found and upgraded.

Signal 4

Drift from the desired state

Compare what runs in the cluster with what the chart and values describe. Manual edits create differences that surprise the next upgrade.

20Design Patterns for Good Charts

Habits that make charts easy to use and safe to change.

Pattern: Sensible defaults, minimal required values

Design the chart so that it installs with very few choices, and let users override only what they need. A chart that requires twenty values before it works is hard to adopt.

Pattern: Document every value

Comment each setting in the default values file, with its meaning and allowed choices. The values file is the user manual of the chart.

Pattern: Validate with a schema

Describe the allowed values in a schema so mistakes are caught immediately with a clear message, rather than deep inside a failed rollout.

Pattern: Reusable helpers for names and labels

Define standard names and labels once and reuse them everywhere, so all resources are consistent and selectors always match.

Pattern: Checksum annotations for settings

Add a checksum of configuration to the pod template so that a settings change automatically triggers a rolling restart.

Pattern: Optional features behind switches

Let users turn features such as ingress, persistence, or autoscaling on or off. The chart stays small for simple cases and powerful for complex ones.

Pattern: Library charts for shared standards

Put company-wide conventions, such as standard labels, security settings, and probes, into a shared library chart that many application charts reuse.

flowchart TD
    L[Library chart
company standards] --> A[Application chart A] L --> B[Application chart B] L --> C[Application chart C] A --> RA[Release in staging and production] B --> RB[Release in staging and production] C --> RC[Release in staging and production]
FIG 10 — A shared library chart keeps many application charts consistent

21Anti-patterns to Avoid

Mistakes that make charts fragile and releases painful.

ANTI-PATTERN-01 Avoid
Problem

Putting real passwords and keys in values files kept in version control.

Why It’s Harmful

Secrets spread to every person and system that can read the repository and are also stored in the release record.

Correct Approach

Use an external secret manager or encrypted values, and pass only references to secrets through the chart.

ANTI-PATTERN-02 Avoid
Problem

Installing charts without pinning the version.

Why It’s Harmful

A later install may fetch a newer chart with different behaviour, making environments differ and breaking repeatability.

Correct Approach

Pin the chart version and upgrade it deliberately after testing.

ANTI-PATTERN-03 Avoid
Problem

Editing resources in the cluster by hand after a release.

Why It’s Harmful

The cluster drifts from the chart, so the next upgrade may overwrite the change or fail in a confusing way, and nobody knows what is really running.

Correct Approach

Make every change through the chart and values, and let the version-controlled files be the single source of truth.

ANTI-PATTERN-04 Avoid
Problem

Building one enormous chart for an entire platform.

Why It’s Harmful

Upgrades are slow and risky, any failure blocks everything, and the release record may exceed size limits.

Correct Approach

Split the platform into focused charts and releases with clear ownership.

ANTI-PATTERN-05 Avoid
Problem

Templates with heavy logic and deep nesting.

Why It’s Harmful

Nobody can predict what is rendered, and small changes cause surprising results, defeating the purpose of a readable package.

Correct Approach

Keep templates simple, move repeated logic into helpers, and prefer more values over cleverness.

ANTI-PATTERN-06 Avoid
Problem

Running upgrades without waiting for readiness or a way back.

Why It’s Harmful

Pipelines report success for releases that never become healthy, and failures are found by users.

Correct Approach

Wait for readiness with a sensible timeout and use automatic rollback on failure where it is safe.

ANTI-PATTERN-07 Avoid
Problem

Relying on rollback to protect data.

Why It’s Harmful

Rollback restores manifests, not data. A migration that has already changed the database stays changed.

Correct Approach

Take backups before risky upgrades and design migrations so that the previous version still works with the new data structure.

22Best Practices and Common Mistakes

A short checklist for confident use of Helm.

Best Practices

  • Keep charts and values files in version control
  • Pin chart and image versions for repeatable releases
  • Render and lint charts in the pipeline before deploying
  • Wait for readiness and consider automatic rollback on failure
  • Use a values file per environment, listing only differences
  • Review third-party charts and verify their sources
  • Keep secrets out of values files and out of version control

Common Mistakes

  • Believing Helm runs or heals applications
  • Forgetting that rollback does not undo data changes
  • Assuming custom definitions are upgraded with the chart
  • Editing live resources directly and causing drift
  • Confusing chart version with application version
  • Overriding values in an unexpected order
!
Practise Before You Need It

Try an upgrade and a rollback of a test release before you depend on them in production. Seeing how revisions and history behave makes stressful moments much calmer.

23Real-World Scenarios

How teams use Helm in everyday operations.

A retailer standardising forty services

A retailer had forty services, each with its own hand-written manifests that had drifted apart. The platform team created one shared chart that encoded standard probes, limits, and labels. Each service now supplies a short values file, upgrades are consistent, and a change to company standards is made in one place.

A startup building preview environments

A small company installs a release for every pull request in its own namespace, with a temporary address, and removes it when the request is merged. Reviewers see the change running before approving it, and no leftovers accumulate because uninstalling removes everything the release created.

A bank controlling third-party software

A bank mirrors approved charts into its own registry, verifies their signatures, and pins exact versions. Teams can install monitoring and ingress components quickly, but only from charts that security has reviewed, and every upgrade is a reviewed change to a values file.

A software vendor shipping to customers

A vendor packages its product as a chart with a schema and documented values. Customers install it on their own clusters with a handful of choices, and the vendor ships upgrades as new chart versions, with clear notes on any values that changed.

An operations team recovering from a bad release

After a release caused errors, the team looked at the revision history, identified the previous good revision, and rolled back in seconds. They then checked that no database change had been part of the release, and fixed the chart before trying again.

24Frequently Asked Questions

Q1What is Helm in simple words?

Helm is the package manager for Kubernetes. It bundles the many files of an application into one package called a chart, lets you customise it with values, installs it as a release, and keeps a history so you can upgrade or roll back.

Q2What is the difference between a chart and a release?

A chart is the package, the blueprint. A release is one installed instance of that chart in a cluster. You can install the same chart many times, each as a separate release with its own name and values.

Q3Does Helm need anything installed inside the cluster?

No. The current major version is client-only. The older Tiller component was removed, and Helm now works with the permissions of the person or pipeline that runs it.

Q4Where does Helm store release information?

By default, as secrets in the same namespace as the release, one record per revision. It can be configured to use configuration maps or a database instead.

Q5How do values override each other?

Chart defaults have the lowest priority, then parent chart values, then your values files with later files winning, and finally individual overrides given on the command line, which win over everything.

Q6Does rollback restore my data?

No. Rollback reapplies earlier manifests, but it does not reverse changes to data or database structure. Take backups and design migrations with this in mind.

Q7Is Helm better than Kustomize?

They solve different problems. Helm packages, shares, and tracks applications using templates. Kustomize customises plain manifests with overlays. Many teams use both, for example rendering a chart and patching the result.

Q8What are hooks used for?

Hooks run special resources, usually jobs, at particular moments such as before an upgrade or after an install. They are used for migrations, cleanups, and checks, and they need their own cleanup policy.

Q9Why did my upgrade fail with an immutable field error?

The chart change modified a field that Kubernetes does not allow to change after creation, such as a workload selector. The object must be deleted and recreated deliberately, or the change must be reverted.

Q10Does Helm upgrade custom resource definitions?

No. Definitions in the CRDs folder are installed on first install but are not upgraded or removed later, to avoid deleting custom objects by accident. Handle definition changes with a separate process.

Q11Is it safe to install any chart from the internet?

Not automatically. A chart can create powerful resources. Review the rendered output, prefer trusted publishers, pin versions, and verify signatures where available.

Q12How does Helm fit with GitOps?

GitOps controllers can render and apply Helm charts from a Git repository automatically. The chart and values live in Git, and the controller keeps the cluster in line with them, correcting drift.

25Summary and Key Takeaways

Helm is the package manager for Kubernetes. It solves the problem of managing many separate manifest files by bundling them into charts, letting you customise them with values, and installing them as tracked releases. Each install, upgrade, and rollback creates a numbered revision, so you always know what changed and can return to an earlier state with a single action.

Helm is light and flexible, but it rewards care. Charts should be simple, versions should be pinned, secrets should stay out of plain files, and pipelines should render, lint, wait for readiness, and be ready to roll back. It does not run your application or undo your data, and it sits alongside tools such as Kustomize and GitOps controllers rather than replacing them. Used thoughtfully, Helm turns complicated deployments into repeatable, reviewable, and reversible routines.

Key Takeaways

  • Helm is a package manager for Kubernetes — it bundles an application’s manifests into a chart and installs it as a release with one action.
  • Charts, values, and releases are the core ideas — the chart is the blueprint, values are your choices, and the release is the installed result with numbered revisions.
  • Helm is client-only — it renders templates locally and sends manifests to the API server using your own permissions, with no server component in the cluster.
  • Values layer from defaults to command line — later and more specific sources override earlier ones, so one chart serves many environments.
  • Upgrades and rollbacks are tracked — every change is a revision, but rollback restores manifests, not data, so plan backups and migrations carefully.
  • Security needs attention — review charts, pin and verify versions, keep secrets out of values files, and protect access to release records.
  • Automate with care — render and lint in pipelines, wait for readiness, prefer atomic upgrades where safe, and consider GitOps to keep clusters in line with Git.