Helm 3.13

Fri, Sep 29, 2023

Helm 3.13 brings some significant and useful changes for Helm users. This ranges from longtime bugs being fixed to some new features that can have an impact on performance.

Dry-run & Template Can Connect To Servers

The dry-run feature on install and upgrade, and Helm template has not been able to communicate with Kubernetes servers. This is for security and because Helm template was designed for template rendering alone.

With Helm 3.13, there is now an opt-in option to communicate with Kubernetes by setting --dry-run=server. This tells Helm to communicate with the server for gathering information but not to perform updates. This flag also works on helm template. If you use --dry-run without setting a value it works as it did before.

Helm SDK users will find a new property, named DryRunOption, that allows you to tell the SDK to communicate with the server.

Values Handling Improvements

Values handling has had a number of bugs filed about it. For example, importing values was inconsistent. Some of the handling even depended on ordering. Using null to remove properties was inconsistent, too. It worked in some cases but not others. That's fixed in Helm 3.13.

The order you can expect for a value to be used is:

  1. User specified values (e.g CLI)
  2. Imported values from dependencies
  3. Parent chart values
  4. Sub-chart values

JSON Indexes

Helm repositories have an index in YAML containing details about the charts and versions of charts it contains. When this file grows large it can be expensive (e.g., processing time and memory) to parse. This is in part because YAML has anchors and aliases which are handy but cause more work to deal with.

Those index.yaml files can now contain JSON instead of YAML. Helm will generate them when the --json flag is set. The index.yaml file is used so the same file location can continue to be used for backwards compatibility. The structure for the data is the same. Helm going all the way back to 3.0.0 can handle parsing index.yaml files with JSON instead of YAML.

Tests were run on very large indexes to look at the perform difference. The results found that:

  • Helm 3 versions before 3.13:
    • Parsed JSON in ~80% the time of parsing YAML
    • Used ~93% the memory parsing JSON compared to YAML
  • Helm 3.13+, with special case handling to detect and handle JSON:
    • Parsed JSON in ~13% the time of parsing YAML
    • Used ~5% the memory parsing JSON compared to YAML

Get Metadata Command

helm get provides the ability to get information about a release in a cluster. It has been able to get values, notes, hooks, and the generated manifests. In addition to those it can now get information about the metadata of the chart the release is based on.

To illustrate this, I installed WordPress and retrieved the metadata:

$ helm get metadata wp
NAME: wp
CHART: wordpress
VERSION: 17.1.13
APP_VERSION: 6.3.1
NAMESPACE: default
REVISION: 1
STATUS: deployed
DEPLOYED_AT: 2023-09-28T16:28:30-04:00

And More...

These are just some of the highlights. Helm 3.13 includes even more features. You can read the details in the release notes.

Matt Farina
@mattfarina

Subscribe to RSS feed