For Helm Chart Dependencies, Depend on ChartCenter
UPDATE: As of May 1, 2021 – ChartCenter central repository has been sunset and all features deprecated. For more information on the sunsetting of the centers read the Centers deprecation blog post
ChartCenter is a free Helm chart central repository that was built to help the Helm community find immutable, secure, and reliable charts for publicly available Kubernetes apps. With ChartCenter, you have a single source of truth to proxy all public charts from one, always available location.
Without ChartCenter, you need to add each Helm chart’s repository to the Helm client for every Kubernetes app you want to install and update. When you add the ChartCenter repository to your Helm client, you’ll have immediate access to the Helm charts for over 250 public Kubernetes apps (and growing) proxied in ChartCenter. So, instead of many public Helm repositories, use just one.
When you author your own Helm charts, you can also make sure the public charts you use as dependencies are immutable and always available by referencing their proxies in ChartCenter. This avoids any unpleasant surprises that might later be caused by a force push or deletion in the chart’s original repo. When you go through ChartCenter, you’ll always know what you’re getting — even more so with ChartCenter’s rich metadata on dependencies, stats, and security.
Let’s look at how to reference ChartCenter from your dependency charts, and the small plugin for Helm that enables you to do so.
Using ChartCenter
It is so easy to set ChartCenter as your central Helm repository:
$ helm repo add center https://repo.chartcenter.io
$ helm repo update
Now your Helm client can access any of the over 30,000 versioned Helm charts available in ChartCenter, and many popular app charts are featured on ChartCenter’s homepage so you can conveniently locate them.
But ChartCenter might hold several different sets of Helm charts for the same Kubernetes app from alternative repos that may contain charts for specialty, duplicate, or deprecated editions.
For example, searching for the PostgreSQL database application in ChartCenter finds several matches:
In ChartCenter, a namespace identifies the Helm repository where the Helm chart versions were found, and you must reference the ChartCenter Helm chart by that namespace. For example, reference the official Bitnami Helm chart for PostgreSQL as bitnami\postgresql
.
To install PostgreSQL from the helm command line:
$ helm install postgresql center/bitnami/postgresql
Using ChartCenter for Dependency Charts
In the example above we have installed bitnami/postgresql
from the Helm repo https://repo.chartcenter.io
, and it works just fine.
But instead of installing PostgreSQL through the helm client’s command line, we would like to install it as a dependency in a Helm chart of our own creation.
To include Bitnami PostgreSQL in your Helm chart, your chart’s requirements.yaml
or Chart.yaml
file might specify under dependencies
the chart from the Bitnami repository
:
dependencies:
- name: postgresql
version: 9.2.1
repository: https://charts.bitnami.com/bitnami
condition: postgresql.enabled
But we want to use the immutable proxy of the Bitnami chart in ChartCenter. In this case, repository
would specify the URL for the ChartCenter repo, but the chart’s name
must also include the namespace:
dependencies:
- name: bitnami/postgresql
version: 9.2.1
repository: https://repo.chartcenter.io
condition: postgresql.enabled
The bitnami
namespace enables us to address the correct chart in ChartCenter but the problem is that the helm package
command doesn’t understand it yet.
There is an issue opened for the Helm v3 client to support an extra namespace in the helm package
command, but that could take awhile to be sorted. The Helm v2 client is not accepting any new features.
So how in the meantime we can solve the problem?
Using ChartCenter Plugin
To enable the Helm client to recognize the namespace, we’ve developed a ChartCenter plugin for Helm that can be used with either the Helm v3 or v2 client.
Let’s install the latest plugin version:
$ helm plugin install https://github.com/jfrog/chartcenter-plugin
The plugin replaces the helm dependency update
and helm package
commands with just one helm center
command:
$ helm center <CHART_NAME>
This new command will run helm dependency update
, pulling the sub chart(s) from the ChartCenter Helm repository and then package the main chart with sub chart(s) to the .tgz
file to be ready to be uploaded to any Helm repository.
Boom, a nice and easy way to use the ChartCenter plugin as a tool to package dependency charts from the ChartCenter helm repo.
Happy ChartCenter charting