Mdr{dani} Notes

Orchestration Modern dengan Helm & Kubernetes (Minikube)

·

7 min read

Cover Image for Orchestration Modern dengan Helm & Kubernetes (Minikube)

Setelah berhasil mengotomatisasi build dan push Docker Image ke Registry, kita sampai pada tahap akhir yang paling krusial: menjalankan aplikasi di lingkungan produksi yang stabil dan terukur. Namun, mengelola puluhan file manifest YAML secara manual untuk setiap komponen Kubernetes sangatlah melelahkan dan rentan terhadap kesalahan (human error).

Oleh karena itu, di artikel ini kita akan menggunakan Helm, sebuah package manager untuk Kubernetes. Jika Docker adalah kontainer yang membawa barang, maka Kubernetes adalah pelabuhan yang mengatur ribuan kontainer tersebut agar tetap berjalan 24 jam. Helm bertindak seperti sistem apt atau npm yang membungkus seluruh konfigurasi infrastruktur menjadi satu paket modular bernama Chart.

Mengapa Kita Menggunakan Helm & Kubernetes?

Sebelum masuk ke teknis, mari kita pahami konsep inti yang akan kita implementasikan:

  • Templating & Reusability (Helm): Dibandingkan menulis YAML statis, Helm memungkinkan kita menggunakan variabel melalui values.yaml. Kita bisa mengubah image tag, jumlah replika, atau konfigurasi database hanya dari satu file pusat.

  • Self-Healing & Scaling (Kubernetes): Kubernetes memastikan aplikasi kamu selalu hidup. Jika sebuah Pod mati, ia akan otomatis menyalakannya kembali. Kita juga bisa melakukan Scaling (menambah jumlah Pod) secara instan saat trafik melonjak.

  • Horizontal Pod Autoscaler (HPA): Inilah fitur "cerdas" yang akan kita pelajari. Kubernetes secara otomatis akan menambah atau mengurangi jumlah Pod berdasarkan beban CPU atau RAM aplikasi, layaknya AC otomatis yang menyesuaikan suhu ruangan.

  • Rollback (Safety Net): Helm mencatat setiap riwayat deployment. Jika versi terbaru aplikasi kamu bermasalah di produksi, kamu bisa kembali ke versi stabil sebelumnya hanya dengan satu perintah dalam hitungan detik.

Persiapan Environment

Untuk mensimulasikan lingkungan produksi di mesin lokal tanpa biaya cloud yang mahal, pastikan kamu sudah menyiapkan dua alat utama berikut:

  1. Minikube: Sebagai cluster Kubernetes satu node lokal untuk simulasi. Pastikan kamu sudah mengaktifkan metrics-server agar fitur autoscaling bisa berjalan (Gunakan perintah: minikube addons enable metrics-server).

  2. Helm CLI: Alat baris perintah yang terinstal di mesin kamu untuk mengelola, menginstal, dan melakukan upgrade pada Chart yang kita buat.

Instalasi Helm di Linux

Helm didistribusikan dalam bentuk biner yang sudah dikompilasi. Proses instalasinya sangat sederhana: kita mengunduh arsipnya, mengekstrak, dan memindahkannya ke folder binary sistem agar bisa diakses dari mana saja.

Prosedur Instalasi

Jalankan perintah berikut secara berurutan di terminal kamu:

# 1. Unduh paket biner Helm (Versi 3.12.0)
wget https://get.helm.sh/helm-v3.12.0-linux-amd64.tar.gz

# 2. Ekstrak file arsip
tar -zxvf helm-v3.12.0-linux-amd64.tar.gz

# 3. Pindahkan biner helm ke folder path sistem
sudo mv linux-amd64/helm /usr/local/bin/helm

# 4. Verifikasi instalasi
helm version

Memahami Perintah Dasar Helm

Setelah berhasil terinstal, kamu akan sering berinteraksi dengan beberapa perintah utama berikut:

  • helm search: Mencari charts yang tersedia di repositori publik.

  • helm pull: Mengunduh chart ke direktori lokal untuk dipelajari isinya.

  • helm install: Mengunggah dan menjalankan chart ke dalam cluster Kubernetes.

  • helm list: Menampilkan daftar aplikasi (releases) yang sedang berjalan di cluster.

Konfigurasi Chart: values.yaml & secrets.yaml

Dalam Helm, kita memisahkan antara konfigurasi umum dan konfigurasi sensitif. Hal ini dilakukan agar kita bisa membagikan konfigurasi infrastruktur tanpa membocorkan kredensial database atau app key.

Konfigurasi Aplikasi: helm/values.yaml

File ini berisi blueprint dasar aplikasi, seperti lokasi image di Docker Hub dan pengaturan environment non-sensitif.

php:
  repository: "cehamot/rssejahterapp"
  tag: "8" # Gunakan tag spesifik atau 'latest'
  fpmEnabled: false
  resources:
    limits:
      cpu: 500m
      memory: 512Mi
    requests:
      cpu: 200m
      memory: 256Mi
  envVars:
    - name: APP_ENV
      value: "production"
    - name: APP_DEBUG
      value: "false"
    - name: DB_PORT
      value: "3306"
    - name: DB_HOST
      value: "localhost" # Sesuaikan jika menggunakan service database internal

Konfigurasi Sensitif: helm/secrets.yaml

File ini menampung data yang tidak boleh diketahui publik. Catatan Penting: Di produksi, file ini wajib dienkripsi (misal menggunakan Helm Secrets atau Sops).

mysql:
  rootPassword: "secret123"
  user: "dani"
  password: "secret123"
  database: "db_rssejahtera"

php:
  envVars:
    - name: APP_KEY
      value: "base64:V0xAWsrcyAPMY1+kgysAWm2ptVSA11+UAu78o/MqDjI="
    - name: DB_DATABASE
      value: "db_rssejahtera"
    - name: DB_USERNAME
      value: "dani"
    - name: DB_PASSWORD
      value: "secret123"

Mengamankan Data Sensitif

Jangan pernah membiarkan password database bocor ke repositori Git atau masuk ke dalam Docker Image. Kita akan mendaftarkan secrets.yml ke dalam daftar abaikan (ignore list).

# Pastikan file rahasia tidak ter-upload ke Git dan Docker Image
echo "helm/secrets.yml" >> .gitignore
echo "helm/secrets.yml" >> .dockerignore

Inisialisasi Cluster & Repositori

Kita akan menggunakan Minikube sebagai simulasi cluster dan menambahkan repositori LAMP (Linux, Apache, MySQL, PHP) yang sudah menyediakan template siap pakai untuk aplikasi Laravel.

# Jalankan cluster Kubernetes lokal
minikube start

# Tambahkan repositori Helm LAMP
helm repo add lamp https://lead4good.github.io/lamp-helm-repository
helm repo update
helm install rssejahteraapp -f helm/values.yml -f helm/secrets.yml lamp/lamp
minikube service rssejahteraapp-lamp --url

Setelah semua komponen (PHP-FPM/Apache dan MySQL) berjalan di Kubernetes, langkah terakhir adalah mengisi struktur database aplikasi Laravel kamu. Karena database MySQL di dalam Kubernetes masih kosong, kita perlu menjalankan perintah migrasi dari dalam Pod aplikasi.

Eksekusi Migrasi

Pastikan Pod kamu sudah berstatus Running dengan mengeceknya melalui kubectl get pods. Setelah itu, jalankan perintah berikut:

# Ganti <nama-pod-php> dengan nama pod yang muncul di kubectl get pods
kubectl exec <nama-pod-php> -- php artisan migrate:fresh --seed --force

Upgrade

Dalam siklus DevOps, perubahan kode adalah hal yang rutin. Dengan Helm, kita bisa memperbarui versi aplikasi tanpa harus menghapus dan mengulang instalasi dari awal. Kubernetes akan mengganti Pod lama dengan Pod baru secara bertahap (Rolling Update), sehingga pengguna tidak akan merasakan gangguan akses.

Langkah-langkah Pembaruan:

  1. Update Versi Image: Buka file konfigurasi dan perbarui tag image ke versi terbaru yang sudah kamu push ke Docker Hub.

    Bash

     nano helm/values.yaml
     # Ubah tag: "8" menjadi tag: "9" (misalnya)
    
  2. Eksekusi Upgrade: Jalankan perintah upgrade untuk menerapkan perubahan. Helm akan membandingkan konfigurasi lama dengan yang baru, lalu melakukan pembaruan secara cerdas.

    Bash

     helm upgrade rssejahteraapp lamp/lamp -f helm/values.yml -f helm/secrets.yml
    

Rollback

Salah satu keunggulan terbesar menggunakan Helm adalah kemampuannya untuk menyimpan riwayat setiap perubahan yang kita lakukan. Jika proses upgrade sebelumnya menyebabkan masalah pada aplikasi, kita bisa melakukan undo dalam hitungan detik.

1. Cek Riwayat Rilis

Sebelum melakukan rollback, kita perlu melihat daftar revisi yang pernah kita buat untuk menentukan versi stabil mana yang akan kita tuju.

$ helm history rssejahteraapp

Perintah ini akan menampilkan daftar REVISION, DESCRIPTION, dan STATUS dari setiap deployment kamu.

2. Eksekusi Rollback

Misalkan rilis terakhir (Revisi 2) bermasalah, dan kita ingin kembali ke kondisi awal (Revisi 1), jalankan perintah berikut:

$ helm rollback rssejahteraapp 1

Scale

Terkadang, kamu sudah tahu bahwa trafik akan melonjak (misalnya saat pengumuman pendaftaran atau promo). Dalam kondisi ini, kamu tidak perlu menunggu sistem otomatis bekerja. Kamu bisa menambah jumlah "tenaga" (Pod) aplikasi Laravel kamu secara manual dalam hitungan detik.

1. Identifikasi Deployment

Sebelum melakukan scaling, kita perlu memastikan nama deployment yang sedang berjalan di cluster kita.

kubectl get deployments

2. Eksekusi Scale Up

Jika saat ini aplikasi hanya berjalan dengan 1 Pod, kita bisa meningkatkannya menjadi 2 atau lebih sesuai kebutuhan spesifikasi server kamu.

# Mengubah jumlah replika menjadi 2 pod secara instan
kubectl scale --replicas 2 deployment/rssejahteraapp-lamp

delete salah satu pod, agar terlihat akan mereplica kembali pod yang sudah di delete.

Autoscaling

Manual scaling sangat berguna, namun dalam dunia nyata, trafik tidak selalu bisa diprediksi. Kita tidak mungkin memantau layar terminal 24 jam hanya untuk menambah Pod. Di sinilah Horizontal Pod Autoscaler (HPA) berperan. HPA secara otomatis akan menambah atau mengurangi jumlah Pod berdasarkan beban kerja (CPU/RAM) secara real-time.

1. Implementasi: hpa.yml

Buatlah file konfigurasi untuk mendefinisikan aturan main autoscaling kamu.

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: rssejahteraapp-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: rssejahteraapp-lamp # Pastikan nama sesuai dengan Deployment kamu
  minReplicas: 1 # Jumlah minimum Pod saat trafik sepi
  maxReplicas: 4 # Jumlah maksimum Pod saat trafik memuncak
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60 # Kubernetes akan menambah Pod jika CPU rata-rata > 60%

2. Eksekusi Konfigurasi

Terapkan file tersebut ke dalam cluster kamu:

kubectl apply -f helm/hpa.yml

Setelah kita selesai bereksperimen dan mempelajari seluruh alur kerja Kubernetes, jangan lupa untuk membersihkan kembali resource di cluster kamu. Hal ini sangat penting untuk menjaga performa mesin lokal (Minikube) agar tidak terbebani oleh aplikasi yang sudah tidak digunakan.

Menghapus Aplikasi & Menghentikan Cluster

Jalankan perintah berikut untuk menghapus seluruh deployment Helm dan mematikan Minikube dengan aman:

# 1. Menghapus seluruh resource aplikasi (Deployment, Service, HPA)
helm delete rssejahteraapp

# 2. Menghentikan cluster Minikube agar menghemat RAM/CPU laptop kamu
minikube stop

Mdr{dani} Notes

A digital garden where I plant ideas, share thoughts on DevOps, cloud infrastructure, open-source, and my journey in tech. Keep exploring and happy automating!

Explore Topics

Web DevelopmentReactNext.jsGolangOpen SourceTutorials

Supported By

Codeathome
LampungDev

Made with© 2026 Muhamad Dani Ramanda

Powered by HashnodeHosted on Vercel