Kubernetes & Helm: Cara Menginstal dan Operasi Dasar
Kubernetes
Definition
Kubernetes, atau disingkat K8s (8 ini sepertinya dari jumlah karakter antara K dan S, seperti internationalization yang disingkat menjadi i18n), adalah sebuah open-source container orchestration engine yang digunakan untuk mengotomatisasi deployment, scaling, dan management dari aplikasi yang sudah dikemas (containerized). Maksud dari container orchestration engine adalah mesin atau engine ini dapat mengelompokkan container untuk dapat membuat aplikasi menjadi unit-unit logis agar lebih mudah diatur dan ditemukan. Kubernetes sudah dibangun dengan pengalaman selama 15 tahun dengan production workload di Google, digabungkan dengan ide dan praktek terbaik dari komunitasnya.
Features
Fitur-fitur kubenetes:
- Planet scale: didesain dengan prinsip yang sama yang memungkinkan Google untuk menjalankan milyaran container setiap minggu, kubernetes dapat melakukan scale (memperbesar dan memperkecil) tanpa menambah jumlah tim ops.
- Never outgrow: mulai dari testing secara local atau menjalankan perusahaan global, fleksibilitas kubernetes dapat menyesuaikan untuk menghasilkan aplikasi secara konsisten dan mudah terlepas dari seberapa kompleks kebutuhannya.
- Run anywhere: kubernetes adalah produk open source sehingga memberikan kebebasan untuk menggunakan infrastruktur on-premise, hybrid, atau public cloud infrastructure, membuat kita dengan mudah memindahkan workload kemanapun.
Informasi lebih lanjut: https://kubernetes.io/docs/home/
Helm
Definition
Helm adalah package and operations manager untuk kubernetes. Menggunakan packaging manager yang dinamakan Charts, helm membuat kita dapat mengemas release dari kubernetes menjadi file zip (.tgz). Sebuah helm chart dapat berisi sejumlah objek kubernetes, yang semuanya di-deploy sebagai bagian dari chart tersebut. Sebuah helm chart umumnya berisi sebuah Deployment dan Service, tetapi juga bisa berisi Ingress, Persistent Volume Claims, atau objek kubernetes lainnya.
Helm chart digunakan untuk men-deploy sebuah aplikasi, atau suatu komponen dari aplikasi yang lebih besar. Daftar dari helm chart yang official bisa dilihat di sini: https://github.com/helm/charts. Chart-chart tersebut dapat diinstal as-is (sebagaimana adanya tanpa modifikasi), atau dimodifikasi untuk menyesuaikan kebutuhan, seperti menginstal plugin tertentu atau menggunakan custom Docker image.
Installation
Helm dapat diinstal pada OS Linux, Mac, dan Windows. Hal berikut ini diperlukan untuk menggunakan helm dengan baik dan aman:
- kubernetes cluster
- menentukan konfigurasi keamanan, jika ada
- menginstal dan mengonfigurasi helm
Untuk dapat menjalankan command pada kubernetes cluster kita harus menginstal kubernetes command-line tool bernama kubectl.
1. Download versi terbaru dengan menjalankan command berikut pada terminal:
//macOS
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/darwin/amd64/kubectl//Windows
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.19.0/bin/windows/amd64/kubectl.exe
2. Buat agar binary kubectl dapat di-execute:
chmod +x ./kubectl
3. Pindahkan binary ke PATH:
sudo mv ./kubectl /usr/local/bin/kubectl
Untuk Windows, kita dapat membuat folder baru (misal: C:\Program Files\Kubernetes) lalu menambahkan path folder tersebut pada PATH di Control Panel >Environment Variables.
4. Untuk mengecek versi sudah up-to-date:
kubectl version --client
Jika sukses maka seharusnya tampil seperti ini:
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"9e991415386e4cf155a24b1da15becaa390438d8", GitTreeState:"clean", BuildDate:"2020-03-25T14:58:59Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"darwin/amd64"}
Pada macOS, kubectl juga dapat diinstal menggunakan Homebrew dengan command:
brew install kubectl
atau
brew install kubernetes-cli
Setelah itu download helm binary pada link berikut: https://github.com/helm/helm/releases
Unpack file tersebut, cari file “helm” dan pindahkan ke /usr/local/bin/helm untuk macOS atau ke C:\Program Files\Kubernetes (atau folder lain yang anda buat tadi) untuk Windows.
// macOS
mv darwin-amd64/helm /usr/local/bin/helm
Jika berhasil maka kita sudah bisa menjalankan command “helm help” pada terminal.
Pada macOS, helm juga dapat diinstal menggunakan Hombrew dengan command:
brew install helm
Brew akan menginstal helm versi terbaru, jika ingin menginstal versi 2 maka ganti “helm” dengan “helm@2”.
Initialize Helm Chart Repository
Setelah helm sudah dapat digunakan, kita dapat membuat chart repository. Ada 2 cara, yaitu menggunakan official chart atau membuat sendiri dari awal.
Untuk menggunakan salah satu dari official chart:
helm repo add stable https://kubernetes-charts.storage.googleapis.com/
Lalu kita dapat menampilkan list dari chart yang bisa diinstal:
helm search repo stable
Untuk membuat sendiri gunakan command (chartname dapat diganti sesuai nama yang diinginkan):
helm create chartname
Folder chartname akan di-generate, di dalamnya ada beberapa file. File values.yaml berisi value yang akan di-consume oleh file deployment.yaml.
Contoh:
- values.yaml
image:
repository: jenkins/jenkins
tag: lts
pullPolicy: IfNotPresent
- deployment.yaml
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
Deploy With Helm
Jika chart sudah selesai diedit, gunakan command berikut untuk membuat .tgz package:
helm package chartname
Kita dapat meng-upload package ini ke chart repository atau instal ke cluster. Chart juga bisa diinstal atau di-upgrade tanpa di-package terlebih dahulu.
Untuk melakukan deploy, install chartnya:
helm install chartname
Dari output command tersebut akan diketahui langkah untuk connect ke aplikasi melalui localhost. Contoh:
$ export POD_NAME=$(kubectl get pods -l "app.kubernetes.io/name=buildachart,app.kubernetes.io/instance=my-cherry-chart" -o jsonpath="{.items[0].metadata.name}")
$ echo "Visit http://127.0.0.1:8080 to use your application"
Visit http://127.0.0.1:8080 to use your application
$ kubectl port-forward $POD_NAME 8080:80
Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80
Untuk melihat aplikasi, buka 127.0.0.1:8080 pada browser.