Using Helm

Wanted to just write some quick notes down here of what I've seen attempting to use Helm

So here we're using Kubernetes, it likes to use yaml files to do lots of desired state of running various bits of content (containers, pods that kind of thing).

Helm is there to reduce the overhead of the complex yaml to define packages of services and applications that run and making values very parameterisable.

Good video here by Donovan Brown to give you the gist:

In classic youtube style, "Let's get started...."

First we need to install tools. Have a look at my Getting Started with Kube article. This'll get you starting to be able to play with Kubernetes.

Next quick few tools (I'm going to install via brew) you can find the installs at

1#installs brew
2/bin/bash -c "$(curl -fsSL"
4#installs helm
5brew install helm
7#installs watch and tree (handy tools to watch progress of stuff)
8brew install watch
9brew install tree

So thats our installs. I'm going to use minikube in this walkthrough, start your kube engines and check its working

1minikube start
2kubectl configs get-contexts
5CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
6          kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   
7*         minikube                      minikube     minikube           default

This shows I've got two configured connections to clusters, of which my minikube one is the default and current one.

in a second terminal window, lets start a watch on the current state of the minikube cluster, as you can see he's not busy:

1watch kubectl get all
3NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
4service/kubernetes   ClusterIP    <none>        443/TCP   14h

So we're ready for a bit of helm. I'm going to start a jenkins pod in my minikube cluster

Helm first needs a repo to point at

1helm repo add jenkins
2helm repo update

Now in the video above, Donovan Brown discusses using the raw yaml to mess about with helm charts, when we use the repo we download a compressed *.tgz file of that which contains everything needed to run on the cluster. So we could either just run the package by doing:

1helm install jenkins/jenkins --generate-name 
5helm pull jenkins/jenkins
6tar xfz jenkins-3.2.1.tgz
7cd jenkins
8helm install . --generate-name

if you quickly switch over to your kubectl watch window you can now see it deploy:

 1NAME                       READY   STATUS     RESTARTS   AGE
 2pod/jenkins-1615378175-0   2/2     Running  0          2m8s
 4NAME                               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE
 5service/jenkins-1615378175         ClusterIP   <none>        8080/TCP    2m8s
 6service/jenkins-1615378175-agent   ClusterIP     <none>        50000/TCP   2m8s
 7service/kubernetes                 ClusterIP        <none>        443/TCP     14h
 9NAME                                  READY   AGE
10statefulset.apps/jenkins-1615378175   1/1     2m8s

...and now to tidy up. (xxxxx is the name of the jenkins install you want to delete)

1helm ls
2helm uninstall jenkins-xxxxxxxx
3minikube stop

Helm looks to save a lot of kubectl'ing commands.