HELM : Sebuah Package Manager Untuk Kubernetes

Reza Aditya
Aug 25, 2017 · 6 min read

HELM adalah sebuah package manager yang di kembangkan oleh tim dari Deis (https://deis.com/), helm membantu kita untuk menginstall, upgrade sebuah aplikasi yang berada dalam Kubernetes.

Kita dapat menggunakan HELM untuk:

- Find and use popular software packaged as Kubernetes charts

- Share your own applications as Kubernetes charts

- Create reproducible builds of your Kubernetes applications

- Intelligently manage your Kubernetes manifest files

- Manage releases of Helm packages

TIGA KONSEP BESAR PADA HELM:

  1. Chart

HELM menggunakan packaging yang di namakan Chart, ini adalah sebuah kumpulan file pre-configured resource applikasi yang kita gunakan pada Kubernetes.

Satu buah chart dapat di gunakan untuk mendeploy sebuah simple application, seperti memcached pod atau sesuatu yang kompleks seperti full web app stact with HTTP servers, databases, caches dan lain-lain.

2. REPOSITORY (REPO, CHART REPOSITORY)

Repo adalah tempat di mana chart di kumpulkan dan share, ini seperti Perl’s CPAN archive atau Fedora Package Database, tapi untuk Kubernetes pakcage

3. RELEASE

Sebuah release adalah kode unik turunan dari sebuah chart yang berjalan pada cluster Kubernentes. Satu chart dapat terpasang lebih dari sekali pada cluster yang sama dan setiap saat chart terinstall sebuah release di buat. Sebagai contoh ketika anda ingin memasang dua buah MySQL chart pada cluster, anda dapat install MySQL chart dua kali dan setiap chart akan memiliki release masing-masing.

Dari tiga konsep diatas dapat kita garis besar cara kerja Helm dapat di gariskan seperti ini:

Helm installs chart ke Kuberntes, membuat sebuah release baru untuk setiap instalasi. dan untuk mencari charts kita dapat menggunakan Helm chart repositori

GET STARTED

PREREQUISITES:

  • Kuberntes version 1.4.1 or later
  • pastikan command tool kubectl sudah di pasang.
  • Minikube adalah tool yang memudahkan kita menjalankan Kuberntes secara mudah di local, ikuti instruksi untuk install
  • Install HELM dengan mengikuti instruksi disini

INITIALIZE HELM AND INSTALL TILLER

Jika semua Prerequisites sudah siap, anda bisa langsung intialize local CLI dan juga install Tillter ke cluster Kubernetes dalam satu perintah:

$ helm init

perintah ini akan menginstall sebuah cluster Tiller pada kubernetes, Tiller adalah Helm server side yang berjalan di dalam cluster Kubernetes dan menangani Helm packages.

Helm memudahkan kita dalam mencari chart.

$helm search mysqlNAME VERSION DESCRIPTION 
stable/mysql 0.2.8 Fast, reliable, scalable, and easy to use open-…
stable/percona 0.2.1 free, fully compatible, enhanced, open source d…
stable/gcloud-sqlproxy 0.1.1 Google Cloud SQL Proxy
stable/mariadb 1.0.2 Fast, reliable, scalable, and easy to use open-…

Membuat Helm Chart

Saya sudah membuat sebuah web api sederhana yang akan kita masukan ke dalam Chart

git clone https://github.com/evo3cx/helm-chart.git && cd helm-chart

perintah di atas akan mencopy/clone source code pada github ke komputer anda dan pindah directory kedalam helm-chart.

build docker image dari source code yang tadi kita clone dari github jalankan perintah berikut.

make buildDocker

jika pesan yang muncul sama seperti berikut berarti anda telah berhasil membuat docker image

make build \
&& docker build -t helmchart:0.0.1 .
make[1]: Entering directory ‘/home/reza/work/src/github.com/evo3cx/helm-chart’
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o bin/helmChart main.go
make[1]: Leaving directory ‘/home/reza/work/src/github.com/evo3cx/helm-chart’
Sending build context to Docker daemon 8.283MB
Step 1/3 : FROM scratch
— ->
Step 2/3 : COPY bin/helmChart /helmChart
— -> 4c3b1e2b5629
Removing intermediate container 7907a2a40b0e
Step 3/3 : ENTRYPOINT /helmChart
— -> Running in 3a36f19511f7
— -> 46d3ef178e80
Removing intermediate container 3a36f19511f7
Successfully built 46d3ef178e80
Successfully tagged helmchart:0.0.1

sekarang kita akan menjalankan perintah pada command line untuk membuat structure singleton chart.

helm create mychart

helm akan membuat folder mychart ada beberapa file yang perlu kita ketahui dalam Chart.

  • Chart.yaml deskripsi tentang chart di dalamnya berisi nama, description dan version.
  • values.yaml meyimpan nilai variable untuk template file pada folder templates.
  • NOTES.txt ini adalah pesan yang muncul setelah chart selesai di deployment oleh user. Sebaai contoh bagian ini menjelaskan bagaimana menggunakan chart, list dari default setting dan lain-lain.

Buka Chart.yaml pada folder charts dan ini berisi detail dari aplikasi yang kita sedang deploy. ini adalah isi dari file Chart.yml yang tadi kita buat.

apiVersion: v1
description: A Helm chart for Kubernetes
name: mychart
version: 0.1.0

sekarang buka file value.yml dan ubah seperti berikut.

replicaCount: 1
image:
repository: helmchart # ini adalah image yang tadi kita buat
tag: 0.0.1
pullPolicy: IfNotPresent
service:
name: mychart
type: ClusterIP
externalPort: 8080
internalPort: 8080
ingress:
enabled: false
# Used to create an Ingress record.
hosts:
- chart-example.local
resources: {}

jalankan

helm lint

pada folder mychart jika berhasil bararti anda tidak membuat kesalahan. selanjutnya kita tinggal membuat package dari folder mychart yang telah kita kerjakan tadi.

helm package . --debug

perintah di atas akan membuat sebuah file dengan nama `mychart-0.1.0.tgz`. untuk deploy release ini kita dapat langsung install helm chart

helm install mychart-0.1.0.tgz

pastikan minikube anda telah berjalan, perintah di atas akan membuat satu buah deployment dan service kedalam kubenetes cluster pada minikube. dan akan menghasilkan sebuah release

NAME:   illmannered-frog
LAST DEPLOYED: Thu Sep 7 16:43:39 2017
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==> v1/Service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
illmannered-frog-mychart 10.0.0.53 <nodes> 80:30018/TCP 1s
==> v1beta1/Deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
illmannered-frog-mychart 1 1 1 0 1s
NOTES:
1. Get the application URL by running these commands:
export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services illmannered-frog-mychart)
export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT

illmannered-frog adalah nama release dari deployment kita diatas, dan tampilan screen ketika ada berhasil mendeploy sebuah chart dapat dilihat di atas sebuah deployment telah di buath pada kubernetes, dan file NOTES.txt memberitahu kita bagaiamana cara untuk mengakses pod.

Daftar package yang telah di deploy berserta versi nya dengan menjalankan perintah:

helm ls 

jika anda melakuka perubahan pada chart anda dapat langsung menjalankan perintah

helm upgrade illmannered-frog mychart/

dan jika berhasil.

Release “illmannered-frog” has been upgraded. Happy Helming!
LAST DEPLOYED: Thu Sep 7 16:45:35 2017
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==> v1/Service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
illmannered-frog-mychart 10.0.0.53 <nodes> 80:30018/TCP 1m
==> v1beta1/Deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
illmannered-frog-mychart 1 1 1 0 1m
NOTES:
1. Get the application URL by running these commands:
export NODE_PORT=$(kubectl get — namespace default -o jsonpath=”{.spec.ports[0].nodePort}” services illmannered-frog-mychart)
export NODE_IP=$(kubectl get nodes — namespace default -o jsonpath=”{.items[0].status.addresses[0].address}”)
echo http://$NODE_IP:$NODE_PORT

jika anda mengecek cluster pada kubuernetes anda maka akan terlihat sebuah deployment yang tadi kita kerjakaan. jika anda menggunakan minikube jalankan perintah minikube dashboard untuk membuka kubenetes dashboard anda.

Tampilan dashboard kubenetes

untuk mengakses API yang telah kita buat kita dapat melihatnya dengan perintah:

export NODE_PORT=$(kubectl get — namespace default -o jsonpath=”{.spec.ports[0].nodePort}” services illmannered-frog-mychart) export NODE_IP=$(kubectl get nodes — namespace default -o jsonpath=”{.items[0].status.addresses[0].address}”) echo http://$NODE_IP:$NODE_PORT

pada localhost saya ipaddress yang keluar adalah http://192.168.99.100:32567 dan inin adalah tampilan ketika API berhasil di akses.

Yeay,,, kita telah berhasil membuat sebuah chart dan berhasil mengkasesnya pada kubernetes.

Kesimpulan:

helm memudahkan kita dalam berbagi aplikasi/webservice melalui chart yang dapat di akses oleh seluruh tim.

source:

)
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade