Giridharaprasad
5 min readJun 27, 2018

--

Installing Helm in Kubernetes cluster and its usage

Pre-requisites:

  • Bring up a k8s cluster.
  • Make sure that all the nodes are ready.

There are two parts to Helm: The Helm client (helm) and the Helm server (Tiller). Helm now has an installer script that will automatically fetchthe latest version of the Helm client and install it locally.

You can fetch that script, and then execute it locally,

$ curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
$ chmod 700 get_helm.sh
$ ./get_helm.sh

Helm client would be installed as part of above execution. In order to install tiller, do

$ helm initubuntu@kubemaster-01:~$ helm init
Creating /home/ubuntu/.helm
Creating /home/ubuntu/.helm/repository
Creating /home/ubuntu/.helm/repository/cache
Creating /home/ubuntu/.helm/repository/local
Creating /home/ubuntu/.helm/plugins
Creating /home/ubuntu/.helm/starters
Creating /home/ubuntu/.helm/cache/archive
Creating /home/ubuntu/.helm/repository/repositories.yaml
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
Adding local repo with URL: http://127.0.0.1:8879/charts
$HELM_HOME has been configured at /home/ubuntu/.helm.
Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!

To ensure the successful deployment, check if the tiller pod is running in kube-system namespace,

ubuntu@kubemaster-01:~$ kubectl get pods -n kube-system | grep tiller
tiller-deploy-f9b8476d-vgfvr 1/1 Running 0 3m

Check the versions of both client and server through the following command.

ubuntu@kubemaster-01:~$ helm version
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

HELM USAGE:

There are three concepts of helm:

  • Chart
  • Repository
  • Release

A Chart is a Helm package. It contains all of the resource definitions necessary to run an application, tool, or service inside of a Kubernetes cluster. Think of it like the Kubernetes equivalent of a Homebrew formula, an Apt dpkg, or a Yum RPM file.

A Repository is the place where charts can be collected and shared.

A Release is an instance of a chart running in a Kubernetes cluster. One chart can often be installed many times into the same cluster. And each time it is installed, a new release is created. Consider a MySQL chart. If you want two databases running in your cluster, you can install that chart twice. Each one will have its own release, which will in turn have its own release name.

You can find the charts using,

helm search <relevant string for chart> For example:ubuntu@kubemaster-01:~$ helm search openebs
NAME CHART VERSION APP VERSION DESCRIPTION
stable/openebs 0.5.5 0.5.3 Containerized Storage for Containers

Use ```helm inspect``` command to view the chart description and the default values associated with the chart.

ubuntu@kubemaster-01:~$ helm inspect stable/openebs
apiVersion: v1
appVersion: 0.5.3
description: Containerized Storage for Containers
home: http://www.openebs.io/
icon: https://raw.githubusercontent.com/openebs/chitrakala/master/OpenEBS%20logo/openebs%20logos-03.png
keywords:
- cloud-native-storage
- block-storage
- iSCSI
- storage
maintainers:
- email: kiran.mova@openebs.io
name: kmova
name: openebs
sources:
- https://github.com/openebs/openebs
version: 0.5.5
---
# Default values for openebs.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
rbac:
# Specifies whether RBAC resources should be created
create: true
serviceAccount:
create: true
name:
image:
pullPolicy: IfNotPresent
apiserver:
image: "openebs/m-apiserver"
imageTag: "0.5.3"
replicas: 1
ports:
externalPort: 5656
internalPort: 5656
nodeSelector: {}
tolerations: {}
affinity: {}
provisioner:
image: "openebs/openebs-k8s-provisioner"
imageTag: "0.5.3"
replicas: 1
nodeSelector: {}
tolerations: {}
affinity: {}
jiva:
image: "openebs/jiva"
imageTag: "0.5.3"
replicas: 3
policies:
monitoring:
enabled: true
image: "openebs/m-exporter"
imageTag: "0.5.3"
---
OpenEBS
=======
[OpenEBS](https://github.com/openebs/openebs) is an open source storage platform that provides persistent and containerized block storage for DevOps and container environments.OpenEBS can be deployed on any Kubernetes cluster - either in cloud, on-premise or developer laptop (minikube). OpenEBS itself is deployed as just another container on your cluster, and enables storage services that can be designated on a per pod, application, cluster or container level.Introduction
------------
This chart bootstraps OpenEBS deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.## Prerequisites
- Kubernetes 1.7.5+ with RBAC enabled
- iSCSI PV support in the underlying infrastructure
## Installing OpenEBS
```
helm install stable/openebs
```
## Installing OpenEBS with the release name `my-release`:
```
helm install --name `my-release` stable/openebs
```
## To uninstall/delete the `my-release` deployment:
```
helm ls --all
helm delete `my-release`
```
## ConfigurationThe following table lists the configurable parameters of the OpenEBS chart and their default values.| Parameter | Description | Default |
| ------------------------------------ | --------------------------------------------- | --------------------------------- |
| `rbac.create` | Enable RBAC Resources | `true` |
| `serviceAccount.create` | Specify if Service Account should be created | `true` |
| `serviceAccount.name` | Specify the name of service account | `openebs-maya-operator` |
| `image.pullPolicy` | Container pull policy | `IfNotPresent` |
| `apiserver.image` | Docker Image for API Server | `openebs/m-apiserver` |
| `apiserver.imageTag` | Docker Image Tag for API Server | `0.5.3` |
| `apiserver.replicas` | Number of API Server Replicas | `1` |
| `provisioner.image` | Docker Image for Provisioner | `openebs/openebs-k8s-provisioner` |
| `provisioner.imageTag` | Docker Image Tag for Provisioner | `0.5.3` |
| `provisioner.replicas` | Number of Provisioner Replicas | `1` |
| `jiva.image` | Docker Image for Jiva | `openebs/jiva` |
| `jiva.imageTag` | Docker Image Tag for Jiva | `0.5.3` |
| `jiva.replicas` | Number of Jiva Replicas | `3` |
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`.Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,```shell
helm install --name `my-release` -f values.yaml stable/openebs
```
> **Tip**: You can use the default [values.yaml](values.yaml)

To install a new package, use the helm install command followed by the chart name.

helm install <chart name>

In case, if you want to change the default values use — set key=value argument in the installation command as follows:

helm install stable/openebs --set apiserver.imageTag=ci --set provisioner.imageTag=ci --set jiva.imageTag=ci --namespace openebs

You can also define the name for release by using the flag — name in the above command.

Note: The installation may take time according to the size of docker images used.

To view the releases, use the following command

helm ls --allubuntu@kubemaster-01:~$ helm ls --all
NAME REVISION UPDATED STATUS CHART NAMESPACE
bilging-maltese 1 Wed Jun 27 06:46:53 2018 DEPLOYED openebs-0.5.5 openebs

To view the status of chart, use ```helm status``` command followed by the release name.

helm status <release name>

To delete the release completely from the K8s cluster, use the following command.

helm del --purge <release name>

--

--