Publish your own Helm chart using GitHub Pages

Suren Raju
3 min readJun 5, 2021

Helm is a package manager for Kubernetes (think apt or yum). It works by combining several manifests into a single package that is called a chart. Helm also supports chart storage in remote or local Helm repositories that function like package registries such as Maven Central, Ruby Gems, npm registry, etc.

Let’s assume you want to develop a Helm chart and publish it for others to consume. For example, I want to create a Helm chart for deploying Kafka using the Strimzi kafka operator and also create a Kafka topic as part of the Kafka deployment. Strimzi provides container images and Operators for running Kafka on Kubernetes.

Create a GitHub repository for publishing the Helm charts

Create a new repository with README.md on GitHub.

git clone https://github.com/surenraju/kafka-helmcd kafka-helm

Make sure that master branch of the repository is published on GitHub Pages. In the settings section of your git repository, scroll down to Pages section and configure it as follow:

Create a helm chart from scratch (or copy your own)

As a pre-requisite, you need to have the Helm CLI installed and initialized. Please find here the instructions in case you haven’t install Helm client yet.

helm create kafka

# Push the change
git add *
git commit -m 'Adding charts'
git push origin master

Now your repository looks like:

/README.md
/kafka/Chart.yaml
/kafka/templates
/kafka/templates/NOTES.txt
/kafka/templates/_helpers.tpl
/kafka/templates/deployment.yaml
/kafka/templates/ingress.yaml
/kafka/templates/service.yaml
/kafka/values.yaml

I have edited the generated helm default configuration to deploy Strimzi kafka operator and also to deploy a Kafka topic. Refer my git repository for the code.

https://github.com/surenraju/kafka-helm.git

Lint the chart

As a good habit, helm lint runs a series of tests to verify that
the chart is well-formed:

$ helm lint kafka

Create the Helm chart package

$ helm package kafkaSuccessfully packaged chart and saved it to: /Users/surenraju/github/kafka-helm/kafka-0.1.0.tgz

Create the Helm chart repository index

According to Helm:

A repository is characterized primarily by the presence of a special file called index.yaml that has a list of all of the packages supplied by the repository, together with metadata that allows retrieving and verifying those packages.

So, follow below the commands to create is the index.yaml file

$ helm repo index --url https://surenraju.github.io/kafka-helm .$ cat index.yamlapiVersion: v1
entries:
kafka:
- apiVersion: v2
appVersion: 0.22.1
created: "2021-06-05T10:15:59.965459+04:00"
dependencies:
- condition: strimzi.enabled
name: strimzi-kafka-operator
repository: https://strimzi.io/charts
version: 0.23.0
description: A Helm chart for Kafka deployment using on strimzi-kafka-operator
digest: bcee5836b6e8edfca5fc893e9dfa9631a716fd09b39a991f29b84294e4188cea
name: kafka
type: application
urls:
- https://surenraju.github.io/kafka-helm/kafka-0.1.0.tgz
version: 0.1.0

Push the changes to GitHub

$ git add *$ git commit -a -m “Adding helm charts for Kafka”$ git push origin master

Configure Helm CLI

In order to use the newly created Helm chart, we need to configure the Helm client.

$ helm repo add kafka https://surenraju.github.io/kafka-helm"kafka" has been added to your repositories

Test the Helm chart

$ helm search repo kafkaNAME        CHART VERSION APP VERSION DESCRIPTION
kafka/kafka 0.1.0 0.22.1 A Helm chart for Kafka deployment using on stri...

Install Kafka using our Helm chart

Following step requires kubectlconfigured and a working kubernetes cluster with some default storage class.

$ kubectl create namespace kafka
$ helm install kafka kafka/kafka --namespace=kafka
NAME: kafka
LAST DEPLOYED: Sat Jun 5 06:32:36 2021
NAMESPACE: kafka
STATUS: deployed
REVISION: 1
TEST SUITE: None
--------------------------------------------------------------------
SUCCESS: helm install --namespace=kafka --timeout=10m0s --values=/home/shell/helm/values-kafka-0.1.0.yaml --version=0.1.0 --wait=true kafka /home/shell/helm/kafka-0.1.0.tgz
--------------------------------------------------------------------
$ kubectl get po -n kafkaNAME READY STATUS RESTARTS AGEkafka-kafka-0 0/1 Running 0 34skafka-kafka-1 0/1 Running 0 34skafka-kafka-2 0/1 Running 0 34skafka-zookeeper-0 1/1 Running 0 73skafka-zookeeper-1 1/1 Running 0 73skafka-zookeeper-2 1/1 Running 0 73sstrimzi-cluster-operator-cbb97bb58-2j5j6 1/1 Running 0 83s

--

--