Panduan Komprehensif: Membangun Kluster Kubernetes Ringan K3S (1 Master & 2 Node)

Panduan Komprehensif: Membangun Kluster Kubernetes Ringan K3S (1 Master & 2 Node)

Kekuatan Kubernetes di Lingkungan Minimalis

 

Kubernetes (K8S) telah menjadi standar de facto untuk orkestrasi container, tetapi kluster K8S tradisional seringkali menuntut resource yang besar, terutama pada komponen Control Plane (seperti etcd dan API Server).

K3S, dikembangkan oleh Rancher Labs, mengatasi masalah ini dengan menciptakan distribusi yang “setengah ukuran” dari K8S. K3S mencapai efisiensi luar biasa ini dengan:

  1. Mengganti etcd: Secara default, K3S menggunakan basis data SQLite yang jauh lebih ringan dan cepat, alih-alih etcd yang high-availability dan resource-intensive.

  2. Menghapus Komponen Warisan: Menghilangkan fitur-fitur yang tidak penting di lingkungan cloud atau edge (misalnya, beberapa plugin cloud provider lama).

  3. Pengemasan yang Ringkas: Seluruh komponen server dan agent dikemas menjadi satu binary tunggal.

Panduan ini akan memandu Anda membangun kluster K3S yang terdiri dari satu Master (yang menjalankan Control Plane) dan dua Node Agent (yang menjalankan workload aplikasi Anda), menggunakan Ubuntu 24.04 LTS sebagai sistem operasi dasar.


 

Pilar 1: Persiapan Server Fisik/Virtual

 

Kluster K3S ini membutuhkan total tiga server (VM atau fisik) yang saling terhubung dalam jaringan yang sama.

 

1.1 Persyaratan Hardware dan Software

 

Pastikan server Anda memiliki spesifikasi minimum ini:

ServerPeran K3SOSCore CPURAM (Minimum)Alokasi Disk
Server 1Master (Server)Ubuntu 24.0422 GB20 GB (SSD/NVMe)
Server 2Node Agent 1Ubuntu 24.0411 GB10 GB (SSD/NVMe)
Server 3Node Agent 2Ubuntu 24.0411 GB10 GB (SSD/NVMe)

 

1.2 Konfigurasi Dasar dan Hostname

 

Lakukan langkah-langkah berikut di SEMUA SERVER (Master dan kedua Node Agent).

  1. Pembaruan Sistem:

    Bash
     
    sudo apt update && sudo apt upgrade -y
    
  2. Penetapan Hostname: Tetapkan hostname yang berbeda dan jelas untuk memudahkan manajemen kluster.

    Bash
     
    # Di Server 1 (Master)
    sudo hostnamectl set-hostname k3s-master
    
    # Di Server 2 (Node 1)
    sudo hostnamectl set-hostname k3s-node-01
    
    # Di Server 3 (Node 2)
    sudo hostnamectl set-hostname k3s-node-02
    
  3. Menonaktifkan SWAP: Kubernetes sangat rentan terhadap swap space yang aktif. Matikan secara permanen.

    Bash
     
    # Di SEMUA SERVER
    sudo swapoff -a
    
    # Hapus entri swap dari fstab agar perubahan permanen setelah reboot
    sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
    
  4. Konfigurasi Firewall (UFW): K3S membutuhkan port terbuka tertentu untuk komunikasi Control Plane dan networking antar-Node (Flannel CNI).

    Bash
     
    # Di SEMUA SERVER
    
    # Standard: SSH
    sudo ufw allow 22/tcp 
    
    # Port K3S Master API (Hanya dibutuhkan di Master, tetapi diizinkan di semua untuk kemudahan)
    sudo ufw allow 6443/tcp 
    
    # Port Kubelet (Node Agent)
    sudo ufw allow 10250/tcp
    
    # Flannel VXLAN/CNI (Node ke Node)
    sudo ufw allow 8472/udp 
    
    # Port NodePort Range (Untuk Service yang diekspos)
    sudo ufw allow 30000:32767/tcp
    
    sudo ufw enable
    sudo ufw status
    

 

Pilar 2: Instalasi dan Konfigurasi Master K3S

 

Instalasi Master hanya dilakukan di Server 1 (k3s-master).

 

2.1 Langkah 1: Instalasi K3S Master

 

Kita akan menggunakan skrip instalasi resmi, yang secara otomatis menginstal semua komponen yang diperlukan (k3s-server, containerd, CNI, dan kubectl).

Kami menyertakan dua opsi penting:

  1. --write-kubeconfig-mode "0644": Memastikan user non-root dapat mengakses kubectl.

  2. --node-taint Critical:NoSchedule: Mencegah workload aplikasi umum (pod biasa) berjalan di Master, menjaganya agar tetap berdedikasi pada tugas Control Plane.

Bash
 
# Di Server 1 (k3s-master)

# Ganti [MASTER_IP] dengan IP Address Server 1
MASTER_IP="192.168.1.10" 

curl -sfL https://get.k3s.io | sh -s - \
    --write-kubeconfig-mode "0644" \
    --node-taint Critical:NoSchedule \
    --advertise-address $MASTER_IP

 

2.2 Langkah 2: Verifikasi Master dan Ambil Token

 

Setelah instalasi selesai, verifikasi bahwa layanan K3S berjalan dan ambil token rahasia yang akan digunakan oleh Node Agent untuk bergabung.

  1. Periksa Status Layanan:

    Bash
     
    # Di Server 1 (k3s-master)
    sudo systemctl status k3s
    
  2. Ambil Node Token:

    Bash
     
    # Di Server 1 (k3s-master)
    NODE_TOKEN=$(sudo cat /var/lib/rancher/k3s/server/node-token)
    echo "Simpan Token ini: $NODE_TOKEN"
    

    Simpan token ini dengan aman; ini adalah kunci bagi Node Agent untuk otentikasi ke Master.

  3. Verifikasi Node (Awal):

    Bash
     
    # Di Server 1 (k3s-master)
    sudo /usr/local/bin/kubectl get nodes
    

    Output yang diharapkan hanya menampilkan k3s-master dengan status Ready.


 

Pilar 3: Menambahkan Node Agent ke Kluster

 

Sekarang kita akan menginstal Node Agent di Server 2 dan Server 3, menggunakan token yang didapatkan dari Master.

 

3.1 Langkah 3: Instalasi Node Agent 1 dan 2

 

Perintah instalasi K3S untuk Node Agent membutuhkan dua argumen penting: alamat API Master (--server) dan Token rahasia kluster (--token).

Ganti [MASTER_IP] dan [NODE_TOKEN] dengan nilai yang sebenarnya.

  1. Instalasi Node Agent:

    Bash
     
    # Di Server 2 (k3s-node-01) dan Server 3 (k3s-node-02)
    
    MASTER_IP="192.168.1.10" # Ganti dengan IP Master yang sebenarnya
    NODE_TOKEN="[TOKEN_YANG_ANDA_SIMPAN]" # Ganti dengan token yang sebenarnya
    
    curl -sfL https://get.k3s.io | sh -s - agent \
        --server https://$MASTER_IP:6443 \
        --token $NODE_TOKEN
    

    Keterangan: Skrip akan menginstal k3s-agent dan secara otomatis memulai koneksi WebSocket ke Master API, menyelesaikan proses bergabung.

  2. Verifikasi Layanan Node Agent:

    Bash
     
    # Di Server 2 dan Server 3
    sudo systemctl status k3s-agent
    

 

3.2 Langkah 4: Verifikasi Kluster Penuh

 

Kembali ke Master untuk memastikan ketiga server telah bergabung dengan status Ready.

  1. Cek Status Kluster:

    Bash
     
    # Di Server 1 (k3s-master)
    sudo /usr/local/bin/kubectl get nodes -o wide
    
    • Output yang Diharapkan:

      Plaintext
       
      NAME          STATUS   ROLES                  AGE     VERSION        INTERNAL-IP      OS-IMAGE
      k3s-master    Ready    control-plane,master   15m     v1.28.5+k3s1   192.168.1.10     Ubuntu 24.04 LTS
      k3s-node-01   Ready    <none>                 5m      v1.28.5+k3s1   192.168.1.11     Ubuntu 24.04 LTS
      k3s-node-02   Ready    <none>                 4m      v1.28.5+k3s1   192.168.1.12     Ubuntu 24.04 LTS
      

    Jika Anda melihat ketiga server dengan status Ready, kluster K3S Anda telah berhasil dibangun.


 

Pilar 4: Pengujian dan Manajemen Kluster

 

Setelah kluster siap, langkah terakhir adalah menguji fungsionalitasnya dan menyiapkan akses manajemen yang lebih nyaman.

 

4.1 Langkah 5: Pengujian Deployment Pertama

 

Uji apakah pod dapat di-schedule ke Node Agent (dan tidak ke Master) dan apakah networking (Flannel CNI) berfungsi.

  1. Deployment Nginx:

    Bash
     
    # Di Server 1 (k3s-master)
    sudo /usr/local/bin/kubectl create deployment nginx-test --image=nginx
    
  2. Periksa Lokasi Pod:

    Bash
     
    sudo /usr/local/bin/kubectl get pods -l app=nginx-test -o wide
    

    Verifikasi: Pod akan di-schedule di k3s-node-01 atau k3s-node-02, bukan di k3s-master, yang memvalidasi node taint berhasil.

  3. Expose Service (NodePort): Ekspos deployment ini ke dunia luar melalui port yang dialokasikan secara dinamis (NodePort).

    Bash
     
    sudo /usr/local/bin/kubectl expose deployment nginx-test --type=NodePort --port=80
    
    # Ambil Port yang dialokasikan
    sudo /usr/local/bin/kubectl get service nginx-test
    # Output akan menunjukkan port: 80:[PORT_ALOKASI]/TCP (misalnya, 31111)
    
  4. Akses Uji Coba: Buka browser dan akses port yang dialokasikan pada IP Node Agent mana pun. URL Uji Coba: http://[IP_k3s-node-01]:[PORT_ALOKASI] Jika Anda melihat halaman Welcome to nginx!, berarti kluster dan networking berfungsi penuh.

 

4.2 Langkah 6: Mengelola Kluster dari Lokal (Opsional, tetapi Direkomendasikan)

 

Mengelola kluster melalui SSH ke Master setiap saat tidaklah efisien. Sebaiknya, Anda mengonfigurasi kubectl di desktop lokal Anda.

  1. Ambil File kubeconfig:

    Bash
     
    # Di Server 1 (k3s-master)
    sudo cat /etc/rancher/k3s/k3s.yaml
    
  2. Modifikasi dan Simpan Lokal:

    • Salin seluruh konten file YAML tersebut.

    • Ganti 127.0.0.1 yang ada di baris server: https://127.0.0.1:6443 menjadi IP Address Master yang sebenarnya (misalnya, 192.168.1.10).

    • Di desktop lokal Anda, simpan konten yang sudah dimodifikasi ini di direktori ~/.kube/ dengan nama file config.

    • Pastikan Anda sudah menginstal kubectl di desktop Anda.

  3. Uji Akses Lokal:

    Bash
     
    # Di Desktop Lokal Anda
    kubectl get nodes
    

    Akses kluster Anda sekarang tersedia dari desktop Anda.


 

Kesimpulan: Kluster K3S Anda Telah Beroperasi

 

Dengan mengikuti panduan ini, Anda telah berhasil membangun kluster Kubernetes yang stabil dan ringan dengan K3S (1 Master dan 2 Node Agent). Arsitektur yang dipilih, termasuk node taint pada Master, memastikan Control Plane beroperasi secara optimal sementara Node Agent siap menerima workload aplikasi.

Kluster K3S ini adalah fondasi yang ideal untuk mempelajari, testing, atau bahkan menjalankan layanan produksi berskala kecil hingga menengah dengan biaya resource yang minimal.

 

Perintah Kunci untuk Manajemen Kluster

 

Gunakan perintah-perintah ini untuk maintenance harian kluster K3S Anda:

Bash
 
# Perintah Kunci: Melihat Taint Node (Di Master)
sudo /usr/local/bin/kubectl describe node k3s-master | grep Taints

# Perintah Kunci: Restart Master Service (Di Master)
sudo systemctl restart k3s

# Perintah Kunci: Restart Node Agent Service (Di Node Agent)
sudo systemctl restart k3s-agent

# Perintah Kunci: Melihat Log K3S Master
sudo journalctl -u k3s -f

# Perintah Kunci: Menghapus Instalasi K3S secara Total (Gunakan dengan sangat hati-hati!)
sudo /usr/local/bin/k3s-uninstall.sh
Share the Post:

Related Posts