KUBERNETES LOCAL-DEVELOPMENT DEVOPS CONTAINERIZATION CLOUD-NATIVE DEVELOPER-EXPERIENCE MINIKUBE TUTORIAL

Minikube: Mengembangkan Aplikasi Kubernetes Secara Lokal dengan Mudah

⏱️ 10 menit baca
👨‍💻

Minikube: Mengembangkan Aplikasi Kubernetes Secara Lokal dengan Mudah

1. Pendahuluan

Sebagai developer modern, kita sering berhadapan dengan arsitektur mikroservis dan infrastruktur cloud-native. Kubernetes telah menjadi standar de facto untuk orkestrasi kontainer di lingkungan produksi. Namun, mengembangkan dan menguji aplikasi Kubernetes secara lokal seringkali terasa seperti labirin yang rumit. Bagaimana kita bisa mereplikasi lingkungan klaster yang kompleks di laptop kita sendiri? Apakah kita harus selalu bergantung pada klaster cloud yang boros biaya dan waktu deployment?

Di sinilah Minikube hadir sebagai penyelamat! 🚀 Minikube adalah alat yang memungkinkan Anda menjalankan klaster Kubernetes single-node di mesin lokal Anda. Ini seperti memiliki “mini data center” pribadi di laptop Anda, memungkinkan Anda bereksperimen, mengembangkan, dan menguji aplikasi Kubernetes tanpa perlu klaster cloud yang mahal atau konfigurasi yang memusingkan.

Artikel ini akan memandu Anda, para developer Indonesia, untuk menyelami Minikube. Kita akan belajar cara menginstalnya, menjalankan klaster pertama Anda, mendeploy aplikasi sederhana, dan memanfaatkan fitur-fitur praktisnya untuk mempercepat workflow pengembangan Anda. Siap untuk memulai petualangan Kubernetes lokal Anda? Mari kita mulai!

2. Apa Itu Minikube dan Mengapa Menggunakannya?

📌 Minikube adalah implementasi Kubernetes single-node yang dirancang untuk pengembangan lokal. Ini berarti semua komponen Kubernetes (master dan worker node) berjalan dalam satu mesin virtual (VM) atau kontainer di laptop Anda.

Mengapa Minikube sangat berguna untuk developer?

💡 Anggap saja Minikube ini seperti “simulator penerbangan” untuk pilot Kubernetes. Anda bisa berlatih menerbangkan pesawat (aplikasi Anda) di lingkungan yang terkontrol (klaster lokal) sebelum menerbangkannya di dunia nyata (klaster produksi).

3. Persiapan: Instalasi Minikube dan Dependensi

Sebelum kita bisa menjalankan Minikube, ada beberapa prasyarat yang perlu diinstal di sistem Anda:

  1. Container or Virtual Machine Manager:

    • Docker Desktop: Pilihan paling umum dan direkomendasikan karena kemudahannya. Minikube akan menggunakan Docker sebagai driver default.
    • VirtualBox, Hyper-V, atau KVM: Jika Anda tidak ingin menggunakan Docker sebagai driver atau memiliki preferensi lain.
  2. kubectl: Command-line tool resmi Kubernetes untuk berinteraksi dengan klaster.

Langkah 1: Instalasi kubectl

Pastikan kubectl sudah terinstal. Jika belum, ikuti langkah-langkah berikut:

Untuk macOS (menggunakan Homebrew):

brew install kubectl

Untuk Windows (menggunakan Chocolatey):

choco install kubernetes-cli

Untuk Linux (menggunakan curl):

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

✅ Verifikasi instalasi kubectl:

kubectl version --client

Anda akan melihat versi client kubectl yang terinstal.

Langkah 2: Instalasi Minikube

Sekarang, mari instal Minikube itu sendiri.

Untuk macOS (menggunakan Homebrew):

brew install minikube

Untuk Windows (menggunakan Chocolatey):

choco install minikube

Untuk Linux (menggunakan curl):

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

✅ Verifikasi instalasi Minikube:

minikube version

Anda akan melihat versi Minikube yang terinstal.

⚠️ Penting: Pastikan Docker Desktop (atau driver VM pilihan Anda) sedang berjalan sebelum Anda memulai Minikube.

4. Memulai Klaster Minikube Pertama Anda

Setelah semua prasyarat terinstal, Anda siap untuk memulai klaster Minikube Anda. Prosesnya sangat sederhana!

Cukup jalankan perintah berikut di terminal Anda:

minikube start

Secara default, Minikube akan mencoba menggunakan Docker sebagai driver. Jika Anda ingin menggunakan driver lain (misalnya VirtualBox), Anda bisa menentukannya:

minikube start --driver=virtualbox

Proses ini mungkin memakan waktu beberapa menit saat pertama kali dijalankan, karena Minikube perlu mengunduh image Kubernetes dan menyiapkan VM/kontainer. Anda akan melihat output yang menunjukkan progresnya:

😄  minikube v1.32.0 on Darwin 14.3.0 (arm64)
✨  Using the docker driver based on existing profile
👍  Starting control plane node minikube in cluster minikube
🚜  Pulling base image ...
💾  Downloading Kubernetes v1.28.3 preload image ...
    > preloaded-images-k8s-v18-v1.28.3-docker-overlay2-arm64.tar.lz4: 519.88 MiB / 519.88 MiB  100.00%
🔥  Creating docker container (CPUs=2, Memory=2200MB) ...
🐳  Preparing Kubernetes v1.28.3 on Docker 24.0.7 ...
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
🔗  Configuring CNI (Container Network Interface) ...
🔎  Verifying Kubernetes components...
🌟  Enabled addons: storage-provisioner, default-storageclass
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

Setelah selesai, Anda bisa memverifikasi status klaster Minikube Anda:

minikube status

Outputnya harus menunjukkan bahwa host dan kubelet berjalan.

Anda juga bisa menggunakan kubectl untuk melihat node di klaster Anda (yang seharusnya hanya satu):

kubectl get nodes

Mengakses Dashboard Kubernetes

Salah satu fitur keren Minikube adalah kemampuannya untuk meluncurkan Dashboard Kubernetes secara otomatis. Dashboard ini memberikan overview visual yang bagus tentang klaster Anda:

minikube dashboard

Perintah ini akan membuka browser Anda ke URL Dashboard Kubernetes.

Untuk menghentikan klaster saat tidak digunakan (dan menghemat sumber daya laptop Anda):

minikube stop

Dan untuk menghapus klaster Minikube sepenuhnya:

minikube delete

5. Mendeploy Aplikasi Sederhana ke Minikube

Mari kita coba mendeploy aplikasi web sederhana ke klaster Minikube kita. Kita akan menggunakan contoh aplikasi Node.js Express yang hanya mengembalikan “Hello, Minikube!”

Pertama, buat file app.js:

// app.js
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello, Minikube!');
});

app.listen(port, () => {
  console.log(`App listening at http://localhost:${port}`);
});

Kemudian, buat file Dockerfile untuk mengkontainerisasi aplikasi ini:

# Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]

Dan package.json:

{
  "name": "minikube-app",
  "version": "1.0.0",
  "description": "Simple Node.js app for Minikube",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "^4.18.2"
  }
}

Sekarang, kita perlu membuat image Docker untuk aplikasi ini. Karena Minikube menggunakan daemon Docker di dalam VM-nya, cara termudah adalah “membangun” image langsung di lingkungan Docker Minikube:

eval $(minikube docker-env) # Ini mengarahkan Docker CLI Anda ke daemon Docker Minikube
docker build -t hello-minikube:v1 .
eval $(minikube docker-env -u) # Kembalikan Docker CLI ke daemon lokal Anda (opsional, tapi baik untuk kejelasan)

Perintah eval $(minikube docker-env) sangat penting. Ini mengkonfigurasi terminal Anda sehingga perintah docker berikutnya akan berinteraksi dengan daemon Docker yang berjalan di dalam Minikube VM, bukan daemon Docker lokal Anda. Ini memastikan image yang Anda bangun tersedia di dalam klaster Minikube.

Selanjutnya, kita akan membuat Deployment dan Service Kubernetes untuk aplikasi kita. Buat file deployment.yaml:

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-minikube-deployment
spec:
  selector:
    matchLabels:
      app: hello-minikube
  replicas: 2 # Kita akan menjalankan 2 instance dari aplikasi kita
  template:
    metadata:
      labels:
        app: hello-minikube
    spec:
      containers:
      - name: hello-minikube
        image: hello-minikube:v1 # Nama image Docker yang sudah kita bangun
        imagePullPolicy: Never # Penting! Beritahu Kubernetes untuk tidak menarik dari registry eksternal
        ports:
        - containerPort: 3000

⚠️ Perhatikan imagePullPolicy: Never. Karena kita membangun image langsung di daemon Docker Minikube, image tersebut sudah ada secara lokal di Minikube. Jika kita tidak menyetel ini, Kubernetes akan mencoba menarik image dari Docker Hub atau registry lainnya, yang akan gagal karena image kita bersifat lokal.

Sekarang, buat file service.yaml untuk mengekspos aplikasi kita:

# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: hello-minikube-service
spec:
  selector:
    app: hello-minikube
  type: NodePort # Menggunakan NodePort agar bisa diakses dari luar klaster
  ports:
    - port: 80
      targetPort: 3000 # Port aplikasi Node.js kita
      nodePort: 30001 # Port yang akan dibuka di node Minikube (opsional, K8s akan memilih jika tidak ditentukan)

Terakhir, terapkan kedua manifest ini ke klaster Minikube Anda:

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

✅ Verifikasi deployment Anda:

kubectl get deployments
kubectl get pods
kubectl get services

Anda akan melihat deployment, pod, dan service Anda berjalan dengan status Running.

6. Mengakses Aplikasi Anda

Sekarang aplikasi Anda sudah berjalan di Minikube, bagaimana cara mengaksesnya dari browser lokal Anda? Minikube menyediakan perintah praktis untuk ini:

minikube service hello-minikube-service

Perintah ini akan secara otomatis membuka browser Anda ke URL yang benar untuk mengakses aplikasi hello-minikube-service Anda. Anda akan melihat “Hello, Minikube!” di browser.

Alternatif lain, Anda juga bisa menggunakan kubectl port-forward untuk meneruskan port dari pod atau service ke mesin lokal Anda:

kubectl port-forward service/hello-minikube-service 8080:80

Sekarang Anda bisa mengakses aplikasi Anda di http://localhost:8080.

🎯 Selamat! Anda telah berhasil mendeploy dan mengakses aplikasi pertama Anda di klaster Kubernetes lokal menggunakan Minikube.

7. Tips dan Triks untuk Pengembangan Lokal dengan Minikube

Minikube memiliki beberapa fitur tambahan yang dapat meningkatkan developer experience Anda:

Kesimpulan

Minikube adalah alat yang sangat berharga bagi setiap developer yang bekerja dengan Kubernetes. Dengan Minikube, Anda dapat mengubah laptop Anda menjadi lingkungan pengembangan cloud-native yang efisien, memungkinkan Anda untuk bereksperimen, menguji, dan mengiterasi aplikasi Kubernetes Anda dengan cepat dan tanpa biaya tambahan.

Mulai dari instalasi yang mudah hingga deployment aplikasi sederhana dan fitur debugging yang praktis, Minikube menghilangkan banyak hambatan awal dalam pengembangan Kubernetes lokal. Ini memberdayakan Anda untuk lebih memahami cara kerja aplikasi Anda di lingkungan klaster, memastikan transisi yang lebih mulus ke staging dan production.

Jadi, jika Anda belum mencobanya, ini saatnya untuk menginstal Minikube dan membawa pengembangan Kubernetes Anda ke tingkat berikutnya! Selamat mencoba!

🔗 Baca Juga