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:
- User specified values (e.g CLI)
- Imported values from dependencies
- Parent chart values
- Sub-chart values
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.
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
These are just some of the highlights. Helm 3.13 includes even more features. You can read the details in the release notes.