Managing stacks with Helm
- Introduction
- Helm concepts
- Installing Helm
- Installing Tiller
- Fix account permissions
- View available charts
- Install a chart
- Inspecting a chart
- Viewing installed charts
- Creating a chart
- Exporting the YAML for our application
- Testing our helm chart
Introduction
We created our first resources with
kubectl run
,kubectl expose
...We have also created resources by loading YAML files with
kubectl apply -f
For larger stacks, managing thousands of lines of YAML is unreasonable
These YAML bundles need to be customized with variable parameters
(E.g.: number of replicas, image version to use ...)
It would be nice to have an organized, versioned collection of bundles
It would be nice to be able to upgrade/rollback these bundles carefully
Helm is an open source project offering all these things!
Helm concepts
helm
is a CLI tooltiller
is its companion server-side componentA "chart" is an archive containing templatized YAML bundles
Charts are versioned
Charts can be stored on private or public repositories
Installing Helm
- If the
helm
CLI is not installed in your environment, install it
Exercise
Check if
helm
is installed:helm
If it's not installed, run the following command:
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
Installing Tiller
Tiller is composed of a service and a deployment in the
kube-system
namespaceThey can be managed (installed, upgraded...) with the
helm
CLI
Exercise
Deploy Tiller:
helm init
If Tiller was already installed, don't worry: this won't break it.
At the end of the install process, you will see:
Happy Helming!
Fix account permissions
Helm permission model requires us to tweak permissions
In a more realistic deployment, you might create per-user or per-team service accounts, roles, and role bindings
Exercise
Grant
cluster-admin
role tokube-system:default
service account:kubectl create clusterrolebinding add-on-cluster-admin \ --clusterrole=cluster-admin --serviceaccount=kube-system:default
(Defining the exact roles and permissions on your cluster requires a deeper knowledge of Kubernetes' RBAC model. The command above is fine for personal and development clusters.)
View available charts
A public repo is pre-configured when installing Helm
We can view available charts with
helm search
(and an optional keyword)
Exercise
View all available charts:
helm search
View charts related to
prometheus
:helm search prometheus
Install a chart
Most charts use
LoadBalancer
service types by defaultMost charts require persistent volumes to store data
We need to relax these requirements a bit
Exercise
Install the Prometheus metrics collector on our cluster:
helm install stable/prometheus \ --set server.service.type=NodePort \ --set server.persistentVolume.enabled=false
Where do these --set
options come from?
Inspecting a chart
helm inspect
shows details about a chart (including available options)
Exercise
See the metadata and all available options for
stable/prometheus
:helm inspect stable/prometheus
The chart's metadata includes an URL to the project's home page.
(Sometimes it conveniently points to the documentation for the chart.)
Viewing installed charts
- Helm keeps track of what we've installed
Exercise
- List installed Helm charts:
helm list
Creating a chart
We are going to show a way to create a very simplified chart
In a real chart, lots of things would be templatized
(Resource names, service types, number of replicas...)
Exercise
Create a sample chart:
helm create dockercoins
Move away the sample templates and create an empty template directory:
mv dockercoins/templates dockercoins/default-templates mkdir dockercoins/templates
Exporting the YAML for our application
- The following section assumes that DockerCoins is currently running
Exercise
Create one YAML file for each resource that we need:
while read kind name; do kubectl get -o yaml --export $kind $name > dockercoins/templates/$name-$kind.yaml done <<EOF deployment worker deployment hasher daemonset rng deployment webui deployment redis service hasher service rng service webui service redis EOF
Testing our helm chart
Exercise
Let's install our helm chart! (
dockercoins
is the path to the chart)helm install dockercoins
Since the application is already deployed, this will fail:
Error: release loitering-otter failed: services "hasher" already exists
To avoid naming conflicts, we will deploy the application in another namespace