Skip to main content

Helm Deep Dive V2


Intro Video

Photo of Michael McClaren

Michael McClaren

Linux Training Architect I in Content

Michael was always the guy that fixed the computers in his family, and eventually decided he wanted to prove he had the chops to become a true IT professional. He had worked as a master mechanic and was tired of turning wrenches every day. After his first certification, an MCSE in server 2003, doors started opening. He then proceeded to work as an entry-level sysadmin, and eventually found his way to Linux Academy. He credits one certification as making the difference and changing his life for the better.







Hands-on Labs


Course Details

In this course we will be learning Helm the package manager for Kubernetes. We will start with the pre-requisites such as getting a Kubernetes cluster where we can install Tiller, the server side of helm, and ensure that our installation is working and that we are able to create a release. We will then cover charts, these are the packages that helm installs. We will cover the anatomy of a chart and how to make a chart from scratch. We will also show how to customize existing charts so that they can be used as templates for our own releases with Helm.

Interactive Diagram:


What Are We Doing Here?

About the Author


Lesson Description:

Hello everyone, and welcome to the course!

Course Intro


Lesson Description:

In this short intro I wanted to explain the reasons for the pre-requisite courses that I have listed, and talk about some of the things that you will need to know ahead of time to get the most out of this course. There are several skills you should have already developed before diving into this Helm course. I name several in this video, and give some resources that will help you with any deficiencies.

What is Helm and What Does It Do?

What Is Package Management?


Lesson Description:

In this short lesson, we will discuss what package management is and why it is the preferred method of handling software and application installation on systems. We will cover the primary functions of a package manager and show examples of these functions using apt on an Ubuntu server.

Package Management in Kubernetes


Lesson Description:

In this lesson we will be looking at using Helm for package management in Kubernetes. We will review the features that are provided by a package manager, and how these get invoked in Helm.

High Level Overview of Helm and Tiller


Lesson Description:

In the lesson we will see the two parts of Helm: the client, helm, and the server, Tiller. We will discuss the job of each componenet and see how helm and Tiller interact.

Creating an Environment

Making a Kubernetes Cluster


Lesson Description:

In this lesson we will do a quick review of getting a Kubernetes cluster up and running. This will be the basis for all of the future work that we do using Helm. We will also cover the installation of the Rook volume provisioner. All of this takes place on our Cloud Playground servers using the Ubuntu 18.04 Bionic Beaver image. During the installation you might see a warning message in the pre-flight checks indicating that the version of Docker is not validated. It is safe to ignore this warning, the version of Docker that is installed works correctly with the installed Kubernetes version We will be installing version 1.13.12 of Kubernetes using the following commands on all servers/nodes.

apt install -y
systemctl enable docker
curl -s | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb kubernetes-xenial main
apt-get update
apt-get install -y kubeadm=1.13* kubectl=1.13* kubelet=1.13* kubernetes-cni=0.7*
On the master node we will run the init command for the version of Kubernetes that we are installing. The following commands are run only on the master node.
kubeadm init --kubernetes-version stable-1.13 --token-ttl 0 --pod-network-cidr=
be sure that you run the token command on the worker nodes, also you need to run the post install commands to make the .kube directory and cp the config and chown it. Then install the specific version of flannel for compatiblity,
kubectl apply -f
Make sure that you get the correct version of rook, in this course we are using rook 0.9
git clone ./rook
cd ./rook/cluster/examples/kubernetes/ceph

kubectl create -f operator.yaml
Once the agent, operator and discover pods are started in the rook-ceph-system namespace then setup the cluster
kubectl create -f cluster.yaml
Once this is run wait for the appearance of the OSD pods in the name space rook-ceph
kubectl get pods -n rook-ceph
Create a storage class so that we can attach to it.
kubectl create -f storageclass.yaml

Installing Helm and Tiller part 1


Lesson Description:

In this lesson, we will look at installing Helm using available packages. These methods include package management with Snap and installing from binaries that are precompiled. As some commands have changed in recent versions, please ensure that you are installing the same version that is being installed in the video. We will explore the commands:

helm init
as well as:
helm init --upgrade
and when to use each one.

Installing Helm and Tiller part 2


Lesson Description:

In this lesson we continue with the installation of Helm and Tiller as we compile the Helm binaries from source code. We will also quickly cover in setup of the golang environment required to compile Helm. Once we have the binaries available we will install Helm and Tiller. Then we'll discuss service accounts and ensure that our installation is able to create a release. The installation for golang can be found at : The glide project is located at: The official helm repo is located at Here is a command reference for this lesson: Install Go

cd gotar
sudo tar -C /usr/local -xzf ./go1.11.2.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
go version
cd ~
Install Glide, Helm, Tiller
curl | sh
export GOPATH=$HOME/go
echo $GOPATH

cd go/src/
rm -fr helm
git clone 
cd helm
Build command for Helm:
make bootstrap build
Move Helm and Tiller, check version
cd bin
sudo mv ./helm /usr/local/bin
sudo mv ./tiller /usr/local/bin

cd ~
helm version
Kubernetes service account:
kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

Hands-on Labs are real live environments that put you in a real scenario to practice what you have learned without any other extra charge or account to manage.


Putting Helm to Work

Charts, Where Do I Get Them?


Lesson Description:

In this lesson we will be exploring where charts can be sourced. We will discuss the official chart repository, as well as private repositories and local sources. We will touch on the reasons that you might want to maintain your own repository.

Charts, What Are They?


Lesson Description:

In this lesson we will take a look into the composition of a chart. We will be downloading a local copy of a chart, and then we will look at each of the files and directories that comprise a chart to see how they interact.

Customizing Charts part 1


Lesson Description:

Locating and knowing how to install charts is great, but we need to be able to configure the charts so that they can be used in our clusters. In this lesson we will take the knowledge that we have about the makeup of a chart and use that to see how we can customize a chart. We will see how to override values using switches in the install command, as well as how to fetch and hardcode our values. This is a longer lesson, so it's broken into 2 parts.

Customizing Charts part 2


Lesson Description:

This is the second part of the lesson on customizing charts, and here we will be finishing up exploring this topic.



Lesson Description:

In this lesson we will take a look at repositories. We'll see where a repository can be hosted, as well as how to create a repository using the Helm client and GitHub. Then, we will walk through the steps needed to create a repository, and finally install the chart that we have placed in the repository.



Lesson Description:

In this lesson we will explore how to create a release in Helm. We will be updating a chart that we have previously released and we will look at the process for packing that chart into an existing repository, as well as updating the index for that repository. Once we have it updated, we will update the local cache for the repository so that search reflects our changes. Once we have the repository updated we will look at releasing a specific version of a chart, and then upgrading to the current version of the chart. Note: The process and techniques used in this lesson are meant to teach commands and the result of those commands. Deleting stateful sets and persistent volumes and the volume claims will result in data loss.

Hands-on Labs are real live environments that put you in a real scenario to practice what you have learned without any other extra charge or account to manage.


Hands-on Labs are real live environments that put you in a real scenario to practice what you have learned without any other extra charge or account to manage.


Looking Forward

Where Do We Go from Here?


Lesson Description:

In this short video we'll see how to search for additional Kubernetes courses using the advanced search tool on the Linux Academy site. I will also recommend the courses that I think should be next if you are in pursuit of more Kubernetes knowledge. Thanks for allowing me to bring you this course, and I hope that you feel that your time here was well spent.

Take this course and learn a new skill today.

Transform your learning with our all access plan.

Start 7-Day Free Trial