Instalasi Helm pada Kluster Kubernetes

Helm adalah package manager untuk Kubernetes, sebagaimana npm adalah package manager untuk JavaScript di dalam lingkungan Node.js atau seperti package manager Chocolatey untuk Windows. Helm memudahkan tim DevOps melakukan deployment aplikasi ke dalam kluster Kubernetes.

Apa itu Helm?

Helm adalah package manager untuk kubernetes, sebagaimana npm adalah package manager untuk JavaScript di dalam lingkungan Node.js atau seperti package manager Chocolatey untuk Windows. Helm memudahkan tim DevOps melakukan deployment aplikasi ke dalam kluster kubernetes.

Helm sendiri terdiri dari dua bagian: Helm client (helm) dan Helm server (Tiller). Ikuti langkah-langkah di bawah ini untuk memasang Helm pada kluster Kubernetes anda.

Persiapan Awal

  1. Kluster Kubernetes yang telah berjalan.
  2. Tools kubectl di mesin lokal.
Langkah 1

Lakukan hal berikut di shell Linux. Masuk ke direktori /tmp kemudian unduh script dari repo Helm di GitHub:

$ cd /tmp
$ curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh

Agar script tsb dapat dijalankan gunakan perintah chmod:

$ chmod u+x install-helm.sh

Lanjutkan dengan menjalankan script berikut:

$ install ./install-helm.sh

Output:

helm installed into /usr/local/bin/helm
Run 'helm init' to configure helm.

Selanjutnya anda perlu memasang komponen Tiller pada kluster Kubernetes.

Langkah 2 – Memasang Tiller
Apa itu Tiller?

Tiller merupakan komponen yang berjalan di dalam kluster Kubernetes dan bertanggung jawab untuk melakukan interaksi dengan Helm client dan melakukan proses antarmuka dengan Kubernetes API Server. Singkatnya Helm client mengelola helm charts dan Tiller akan mengelola release. Pada Helm versi 3 yang sedang dikembangkan, Tiller akan dihilangkan untuk alasan keamanan dan penyederhanaan proses pemasangan charts pada kluster Kubernetes.

Agar Tiller dapat berjalan di dalam kluster Kubernetes maka perlu dibuat serviceaccount dengan role cluster-admin.

$ kubectl -n kube-system create serviceaccount tiller

Lanjutkan dengan memberi role cluster-admin:

$ kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

Kemudian pasanglah Tiller dengan perintah helm init:

helm init --service-account tiller

Output:

. . .

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!

Sampai di sini sudah selesai proses instalasi Helm pada kluster Kubernetes anda. Selanjutnya anda bisa mulai mencoba melakukan instalasi helm charts.

Langkah 3 – Memulai helm charts

Paket aplikasi Helm disebut charts. Cara paling mudah adalah dengan memasang contoh charts yang disediakan oleh Helm.

Lakukan terlebih dahulu pembaruan daftar charts yang tersedia:

helm repo update

Sebagai contoh, memasang aplikasi basisdata mysql dengan charts mysql:

helm install stable/mysql

Output:

NAME:   angry-fox
LAST DEPLOYED: Sun Jul 14 18:55:13 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/ConfigMap
NAME                  DATA  AGE
angry-fox-mysql-test  1     1s

==> v1/PersistentVolumeClaim
NAME             STATUS   VOLUME   CAPACITY  ACCESS MODES  STORAGECLASS  AGE
angry-fox-mysql  Pending  default  1s

==> v1/Pod(related)
NAME                              READY  STATUS   RESTARTS  AGE
angry-fox-mysql-6c45b64686-55ksv  0/2    Pending  0         1s

==> v1/Secret
NAME             TYPE    DATA  AGE
angry-fox-mysql  Opaque  2     1s

==> v1/Service
NAME             TYPE       CLUSTER-IP  EXTERNAL-IP  PORT(S)   AGE
angry-fox-mysql  ClusterIP  10.0.33.9   <none>       3306/TCP  1s

==> v1beta1/Deployment
NAME             READY  UP-TO-DATE  AVAILABLE  AGE
angry-fox-mysql  0/1    0           0          1s


NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
angry-fox-mysql.default.svc.cluster.local

To get your root password run:

    MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default angry-fox-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)

To connect to your database:

1. Run an Ubuntu pod that you can use as a client:

    kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il

2. Install the mysql client:

    $ apt-get update && apt-get install mysql-client -y

3. Connect using the mysql cli, then provide your password:
    $ mysql -h angry-fox-mysql -p

To connect to your database directly from outside the K8s cluster:
    MYSQL_HOST=127.0.0.1
    MYSQL_PORT=3306

    # Execute the following command to route the connection:
    kubectl port-forward svc/angry-fox-mysql 3306

    mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD}

Untuk melihat release aplikasi yang telah dilakukan Helm, lakukan perintah helm ls:

$ helm ls
NAME            REVISION        UPDATED                         STATUS          CHART                   APP VERSION    NAMESPACE
angry-fox       1               Sun Jul 14 18:55:13 2019        DEPLOYED        mysql-0.15.0            5.7.14         default

Untuk melakukan uninstall release, gunakan perintah helm delete:

$ helm delete angry-fox
release angry-fox deleted

Untuk melihat status release:

LAST DEPLOYED: Sun Jul 14 18:55:13 2019
NAMESPACE: default
STATUS: DELETED

Selamat mencoba Helm! Dokumentasi lengkap mengenai Helm dapat anda lihat di sini.

Lihat Juga: Instalasi Istio pada Kluster Kubernetes