KUBERNETES CLOUD-NATIVE LOCAL-DEVELOPMENT DEVOPS DEVELOPER-EXPERIENCE CONTAINERIZATION INNER-LOOP TESTING DEVELOPMENT-ENVIRONMENT KIND K3S MICROSERVICES PRODUCTIVITY CI-CD

Mengembangkan Aplikasi Cloud-Native Secara Lokal dengan Kind dan K3s: Simulasi Lingkungan Kubernetes yang Ringan dan Efisien

⏱️ 13 menit baca
👨‍💻

Mengembangkan Aplikasi Cloud-Native Secara Lokal dengan Kind dan K3s: Simulasi Lingkungan Kubernetes yang Ringan dan Efisien

1. Pendahuluan

Di era aplikasi modern, “cloud-native” dan “microservices” sudah menjadi mantra bagi banyak developer. Kita membangun aplikasi yang berjalan di Kubernetes, memanfaatkan container, dan mengandalkan infrastruktur cloud yang dinamis. Namun, ada satu tantangan yang sering muncul: bagaimana kita bisa mengembangkan dan menguji aplikasi-aplikasi ini secara efisien di mesin lokal kita? 🧐

Seringkali, prosesnya terasa lambat. Kita perlu melakukan deploy ke klaster pengembangan jarak jauh hanya untuk menguji perubahan kecil, yang memakan waktu dan mengganggu alur kerja. Atau, kita menggunakan alat yang berat dan memakan banyak resource, membuat laptop kita menjerit kesakitan. 😩

Inilah mengapa memiliki lingkungan Kubernetes lokal yang ringan dan efisien menjadi sangat penting. Artikel ini akan membawa Anda menyelami Kind (Kubernetes in Docker) dan K3s, dua solusi canggih yang memungkinkan Anda mensimulasikan klaster Kubernetes di mesin lokal Anda dengan mudah, mempercepat iterasi pengembangan, dan mengurangi frustrasi “works on my machine.” Mari kita mulai! 🚀

2. Mengapa Lingkungan Kubernetes Lokal Itu Penting?

Bayangkan skenario ini: Anda sedang mengembangkan microservice baru yang akan berinteraksi dengan beberapa layanan lain di klaster Kubernetes. Anda membuat perubahan kecil, lalu harus push kode, menunggu CI/CD berjalan, dan deploy ke klaster dev bersama. Jika ada masalah, proses ini harus diulang. Buang-buang waktu, bukan? ⏰

Memiliki klaster Kubernetes lokal memberikan beberapa keuntungan signifikan:

Sebelum Kind dan K3s, pilihan untuk klaster Kubernetes lokal seringkali terbatas pada Minikube atau Docker Desktop Kubernetes, yang terkadang bisa terasa berat atau kurang fleksibel untuk skenario tertentu. Kind dan K3s hadir sebagai alternatif yang lebih ringan dan cepat.

3. Kind (Kubernetes in Docker): Klaster K8s di Dalam Kontainer

Kind, singkatan dari “Kubernetes in Docker,” adalah sebuah alat yang memungkinkan Anda menjalankan klaster Kubernetes di dalam container Docker. Ya, Anda tidak salah baca. Setiap node Kubernetes (master dan worker) akan berjalan sebagai container Docker. Ini membuatnya sangat ringan, cepat untuk di-setup, dan mudah diintegrasikan dengan workflow Docker yang mungkin sudah Anda kenal.

Cara Kerja Kind

Ketika Anda membuat klaster Kind, ia akan meluncurkan satu atau beberapa container Docker. Setiap container ini akan berfungsi sebagai node Kubernetes. Ini berarti Kind memanfaatkan Docker sebagai “hypervisor” virtualisasi yang ringan untuk menjalankan klaster K8s.

Kelebihan Kind

Contoh Penggunaan Kind

Pastikan Anda sudah menginstal Docker dan Kind CLI.

  1. Instalasi Kind (jika belum):

    go install sigs.k8s.io/kind@v0.22.0

    Atau unduh binary-nya dari rilis GitHub Kind.

  2. Membuat Klaster Kind: Secara default, Kind akan membuat klaster single-node.

    kind create cluster --name my-local-cluster

    Untuk klaster multi-node, Anda bisa menggunakan file konfigurasi:

    # kind-config.yaml
    kind: Cluster
    apiVersion: kind.x-k8s.io/v1alpha4
    nodes:
    - role: control-plane
    - role: worker
    - role: worker

    Kemudian buat klaster:

    kind create cluster --name multi-node-cluster --config kind-config.yaml

    📌 Tips: Kind secara otomatis akan mengatur kubeconfig Anda agar mengarah ke klaster yang baru dibuat. Anda bisa memeriksanya dengan kubectl config get-contexts.

  3. Deploy Aplikasi Sederhana: Mari kita deploy Nginx.

    kubectl create deployment nginx --image=nginx
    kubectl expose deployment nginx --port=80 --type=NodePort

    Untuk mengakses aplikasi dari host lokal, Anda perlu mengetahui port NodePort dan IP klaster (IP container Docker Kind).

    kubectl get service nginx
    # Contoh output:
    # NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    # nginx   NodePort   10.96.160.155   <none>        80:30000/TCP   2m
    
    # Dapatkan IP container Kind
    docker inspect -f '{{.NetworkSettings.IPAddress}}' my-local-cluster-control-plane
    # Contoh output: 172.18.0.2

    Anda bisa mengakses Nginx di http://172.18.0.2:30000 (sesuaikan IP dan port Anda).

  4. Menghapus Klaster:

    kind delete cluster --name my-local-cluster

4. K3s: Kubernetes Ringan untuk Edge dan Dev Lokal

K3s adalah distribusi Kubernetes bersertifikat CNCF yang sangat ringan, dioptimalkan untuk lingkungan edge, IoT, dan tentunya, pengembangan lokal. Ia dikembangkan oleh Rancher Labs (sekarang bagian dari SUSE). K3s dirancang untuk footprint yang sangat kecil, menggunakan binary tunggal kurang dari 100MB, dan membutuhkan RAM yang jauh lebih sedikit dibandingkan Kubernetes standar.

Cara Kerja K3s

K3s mengurangi kompleksitas Kubernetes standar dengan menghapus komponen-komponen yang tidak esensial untuk lingkungan yang lebih kecil (misalnya, beberapa driver cloud lama atau storage provider tertentu). Ia mengganti etcd dengan SQLite (default) atau database eksternal lainnya, membuatnya sangat mandiri dan mudah di-deploy.

Kelebihan K3s

Contoh Penggunaan K3s

  1. Instalasi K3s: Cara paling mudah adalah dengan skrip instalasi K3s.

    curl -sfL https://get.k3s.io | sh -

    Ini akan menginstal K3s sebagai service systemd dan secara otomatis memulai server K3s, yang akan bertindak sebagai control plane dan worker node.

  2. Verifikasi Instalasi: Setelah instalasi, K3s akan menempatkan kubeconfig di /etc/rancher/k3s/k3s.yaml. Anda perlu mengarahkan kubectl ke sana.

    export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
    kubectl get nodes
    # Contoh output:
    # NAME    STATUS   ROLES                  AGE     VERSION
    # <hostname>   Ready    control-plane,master   2m   v1.28.3+k3s1
  3. Deploy Aplikasi Sederhana: Sama seperti Kind, mari kita deploy Nginx.

    kubectl create deployment nginx --image=nginx
    kubectl expose deployment nginx --port=80 --type=NodePort

    Untuk mengaksesnya, K3s secara default menggunakan node-external-ip sebagai IP host Anda sendiri (misalnya 127.0.0.1).

    kubectl get service nginx
    # Contoh output:
    # NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    # nginx   NodePort   10.43.160.155   <none>        80:30000/TCP   2m

    Anda bisa mengakses Nginx di http://127.0.0.1:30000 (sesuaikan port Anda).

  4. Menghapus K3s: K3s menyediakan skrip uninstall.

    /usr/local/bin/k3s-uninstall.sh

5. Memilih Antara Kind dan K3s: Kapan Menggunakan yang Mana?

Baik Kind maupun K3s adalah pilihan yang sangat baik untuk klaster Kubernetes lokal, tetapi mereka memiliki kekuatan dan kasus penggunaan yang sedikit berbeda:

Fitur / PertimbanganKind (Kubernetes in Docker)K3s (Lightweight Kubernetes)
Fokus UtamaKlaster multi-node di Docker, ideal untuk CI/CD dan pengujianKlaster sangat ringan, ideal untuk edge, IoT, dan dev lokal
Resource FootprintRingan, tapi sedikit lebih besar dari K3s karena DockerSangat ringan, binary tunggal, konsumsi RAM minimal
Kecepatan BootingSangat cepat (detik)Sangat cepat (detik)
Integrasi EkosistemSangat baik dengan Docker (image, network)Mandiri, bisa berjalan di VM/bare-metal, atau Docker/containerd
Multi-Node ClusterSangat mudah di-setup dan diujiBisa multi-node, tapi setup lebih manual daripada Kind
Persistensi DataData klaster hilang saat container Kind dihapusData klaster bisa persisten jika dijalankan di host fisik/VM
Kompatibilitas K8sPenuh, mengikuti rilis K8s upstreamPenuh, tetapi dengan beberapa komponen yang dihilangkan/diganti
Kasus Penggunaan IdealPengujian CI/CD, development yang membutuhkan multi-node, integrasi mendalam dengan DockerDevelopment lokal sehari-hari, lingkungan edge, IoT, demo, laptop dengan resource terbatas

🎯 Kapan menggunakan Kind?

🎯 Kapan menggunakan K3s?

6. Integrasi ke Workflow Developer Anda

Mengadopsi Kind atau K3s bukan hanya tentang menginstal tool, tetapi juga mengintegrasikannya ke dalam workflow pengembangan Anda agar manfaatnya maksimal.

Kesimpulan

Mengembangkan aplikasi cloud-native bisa jadi rumit, terutama dalam hal menyiapkan lingkungan lokal yang representatif. Kind dan K3s menawarkan solusi yang elegan, ringan, dan efisien untuk tantangan ini. Dengan mensimulasikan klaster Kubernetes di mesin Anda, Anda dapat mempercepat iterasi, meningkatkan konsistensi antara lingkungan, dan pada akhirnya, menjadi developer yang lebih produktif.

Baik Anda memilih Kind karena integrasinya dengan Docker dan kemudahan multi-node untuk CI/CD, atau K3s karena footprint-nya yang super ringan untuk development sehari-hari, keduanya adalah senjata ampuh di arsenal developer cloud-native modern. Jangan biarkan lingkungan pengembangan menjadi penghambat inovasi Anda. Mulailah bereksperimen dengan Kind atau K3s hari ini! 🛠️

🔗 Baca Juga