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:
- Mengganti etcd: Secara default, K3S menggunakan basis data SQLite yang jauh lebih ringan dan cepat, alih-alih etcd yang high-availability dan resource-intensive.
- Menghapus Komponen Warisan: Menghilangkan fitur-fitur yang tidak penting di lingkungan cloud atau edge (misalnya, beberapa plugin cloud provider lama).
- 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:
| Server |
Peran K3S |
OS |
Core CPU |
RAM (Minimum) |
Alokasi Disk |
| Server 1 |
Master (Server) |
Ubuntu 24.04 |
2 |
2 GB |
20 GB (SSD/NVMe) |
| Server 2 |
Node Agent 1 |
Ubuntu 24.04 |
1 |
1 GB |
10 GB (SSD/NVMe) |
| Server 3 |
Node Agent 2 |
Ubuntu 24.04 |
1 |
1 GB |
10 GB (SSD/NVMe) |
Export to Sheets
1.2 Konfigurasi Dasar dan Hostname
Lakukan langkah-langkah berikut di
SEMUA SERVER (Master dan kedua Node Agent).
- Pembaruan Sistem:
Bash
sudo apt update && sudo apt upgrade -y
- 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
- 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
- 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:
--write-kubeconfig-mode "0644": Memastikan user non-root dapat mengakses kubectl.
--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.
- Periksa Status Layanan:
Bash
# Di Server 1 (k3s-master)
sudo systemctl status k3s
- 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.
- 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.
- 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.
- 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.
- Cek Status Kluster:
Bash
# Di Server 1 (k3s-master)
sudo /usr/local/bin/kubectl get nodes -o wide
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.
- Deployment Nginx:
Bash
# Di Server 1 (k3s-master)
sudo /usr/local/bin/kubectl create deployment nginx-test --image=nginx
- 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.
- 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)
- 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.
- Ambil File
kubeconfig:
Bash
# Di Server 1 (k3s-master)
sudo cat /etc/rancher/k3s/k3s.yaml
- 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.
- 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