The Chart Repository Guide – Helm

This section explains how to create and work with Helm graphics repositories. At a high level, a graphics repository is a location where packaged graphics can be stored and shared.

The distributed community’s Helm graphics repository is located on the Artifact Hub and welcomes participation. But Helm also makes it possible to create and run your own graphics repository. This guide explains how to do this.

Prerequisites

  • See the Quick Start Guide
  • Read the document Charts

Create

a graphics repository

A graphics repository is an HTTP server that hosts an index.yaml file and, optionally, some packaged graphics. When you’re ready to share your charts, the preferred way to do so is by uploading them to a graphics repository.

Starting with Helm 2.2.0, client-side SSL authentication is supported for a repository. Other authentication protocols may be available as add-ons.

Because a graphics repository can

be any HTTP server that can serve YAML and tar files and can respond to GET requests, you have a wealth of options when it comes to hosting your own graphics repository. For example, you can use a Google Cloud Storage (GCS) bucket, an Amazon S3 bucket, GitHub pages, or even create your own web server.

The structure

of the graphics repository A graphics repository consists of

packaged charts and a special file called index.yaml that contains an index of all the charts in the repository. Often, the charts that index.yaml describes are also hosted on the same server, as are the source files.

For example, the repository layout might https://example.com/charts look like this:In this

case, the index file

would contain information about a chart, the alpine chart, and provide the https://example.com/charts/alpine-0.1.2.tgz download URL for that chart

.

A graphics package does not need to be on the same server as the index.yaml file. However, doing so is often the easiest.

The index file

The

index file

is a yaml file named index.yaml. Contains some metadata about the package, including the contents of a chart Chart.yaml file. A valid graphics repository must have an index file. The index file contains information about each chart in the graphics repository. The helm repo index command will generate an index file based on a particular local directory that contains packaged graphics.

Here is an

example of an index file:

Hosting Chart Repositories

This part shows several ways to serve a chart repository

.

Google Cloud Storage

The first step is to create your GCS bucket. We will call our graphics fantastic.

<img src="https://helm.sh/img/create-a-bucket.png" alt="

Create a GCS

bucket” />

Then make the bucket public by editing the bucket permissions.

Edit permissions

Insert this line item to make your bucket public:

Make Bucket Public¡

Congratulations, you now have an empty GCS bucket ready to serve charts!

You can upload your graphics repository using the Google Cloud Storage command-line tool or the GCS web UI. A GCS public bucket can be accessed over simple HTTPS at this address: https://bucket-name.storage.googleapis.com/.

Cloudsmith

You can also set up graph repositories using Cloudsmith. Read more about

graphics repositories with Cloudsmith here JFrog Artifactory Similarly, you can also configure graphics repositories using

JFrog Artifactory

. Read more about graphics repositories with JFrog Artifactory here

GitHub Pages example

Similarly, you can create a graphics repository using GitHub Pages.

GitHub allows you to serve static web pages in two different ways:

When setting up a project to serve the

  • contents of your docs/ directory. When setting up a project to serve a
  • particular

branch,

we’ll take the second approach, although the first is just as easy

.

The first step will be to create your gh-pages branch. You can do it locally like.

Or through the web browser using the Branch button in

your GitHub repository:<img src="https://helm.sh/img/create-a-gh-page-button.png" alt="Create GitHub Pages Branch

” />

Next, you’ll want to make sure your gh-pages branch is set to GitHub Pages, click on your repository settings and scroll down to the GitHub pages section and set the following:

Create GitHub Page Branch

By default Source is usually set to the gh-pages branch. If it is not configured by default, select it.

You can use a custom domain there if you want.

And verify that Enforce HTTPS is checked, so HTTPS will be used when graphics are served.

In such a configuration, you can use its default branch to store your graphics code and the gh-pages branch as a graphics repository, for example: https://USERNAME.github.io/REPONAME. The TS Charts demo repository is available on https://technosophos.github.io/tscharts/.

If you’ve decided to use GitHub pages to host your graphics repository, see Chart Liberator Action. Chart Releaser Action is a GitHub Action workflow for converting a GitHub project into a self-hosted Helm chart repository, using the helm/chart-releaser CLI tool.

Ordinary

web servers

To configure a regular web server to serve Helm charts, simply do the following:

Place the index

  • and charts in a directory
  • that the server can serve Make sure that the

  • index.yaml file can be accessed without authentication Make sure
  • that

  • yaml files are served with the correct content type (text/yaml or text/x-yaml)

For example, if you want to serve your charts outside of $WEBROOT/charts, make sure there is a charts/ directory in your web root, and place the index file and charts inside that folder.

ChartMuseum

Repository Server ChartMuseum

is an open source Helm graphics repository server written in Go (Golang), with support for cloud storage backends, including Google Cloud Storage, Amazon S3, Microsoft Azure Blob Storage, Alibaba Cloud OSS Storage, Openstack Object Storage, Oracle Cloud Infrastructure Object Storage, Baidu Cloud BOS Storage, Tencent Cloud Object Storage, DigitalOcean Spaces, Minio and etcd.

You can also use the ChartMuseum server to host a graphics repository from a local file system.

GitLab Package Registration

With GitLab, you can publish Helm charts to your project’s Package Log. Read more about setting up a helm package repository with GitLab here.

Managing graphics repositories

Now that you have a graphics repository, the

last part of this guide explains how to maintain

graphics in that repository.

Store

charts in your graphics repository

Now that you have a graphics repository, let’s upload a chart and index file to the repository. Charts in a graphics repository must be packaged (helm package chart-name/) and versioned correctly (following SemVer 2 guidelines).

These following steps make up a sample workflow, but you can use any workflow you want to store and update graphics in your graphics repository.

Once you have a packaged chart

ready, create a new

directory and move the packaged chart to that directory.

The last command takes the path of the local directory you just created and the URL of your remote graphics repository and composes an index.yaml file within the given directory path.

You can now upload the chart and index file to your chart repository using a sync tool or manually. If you’re using Google Cloud Storage, check out this sample workflow with the gsutil client. For GitHub, you can simply place the charts in the appropriate target branch.

Add new charts

to an existing repository

Each time you want to add a new chart to the repository, you must rebuild the index. The helm repo index command will completely rebuild the index.yaml file from scratch, including only the charts it finds locally.

However, you can use the -merge flag to gradually add new charts to an existing index.yaml file (a great choice when working with a remote repository like GCS). Run helm repo index -help for more information,

be sure to upload both the revised index.yaml file and the chart. And if you generated a source file, upload it too.

Share

your charts with others

When you’re ready to share your charts, just let someone know what your

repository URL is.

From there, they will add the repository to their helm client via the helm repo add [NAME] [URL] command with any name they wish to use to reference the repository.

If the graphics are supported by HTTP Basic authentication, You can also provide the username and password here

:Note:

A repository will not be added if it does not contain a valid index.yaml. Note

: If your helm repository is, for example, using a self-signed certificate, you can use helm repo add -insecure-skip-tls-verify … to bypass CA verification.

After that, your users will be able to search through your charts. After updating the repository, they can use the helm repo update command to get the latest chart information.

Under the hood, the helm repo add and helm

repo update commands get the index.yaml file and store them in the $XDG_CACHE_HOME/helm/repository/cache/ directory. This is where the rudder search function finds information about charts.