Panduan Komprehensif: Membangun Kluster Kubernetes Ringan K3...
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:- 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.
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) |
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 mengakseskubectl.--node-taint Critical:NoSchedule: Mencegah workload aplikasi umum (pod biasa) berjalan di Master, menjaganya agar tetap berdedikasi pada tugas Control Plane.
# 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
Simpan token ini dengan aman; ini adalah kunci bagi Node Agent untuk otentikasi ke Master.# Di Server 1 (k3s-master) NODE_TOKEN=$(sudo cat /var/lib/rancher/k3s/server/node-token) echo "Simpan Token ini: $NODE_TOKEN" - Verifikasi Node (Awal):
Bash
Output yang diharapkan hanya menampilkan# Di Server 1 (k3s-master) sudo /usr/local/bin/kubectl get nodesk3s-masterdengan statusReady.
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
Keterangan: Skrip akan menginstal# 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_TOKENk3s-agentdan 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 statusReady.
- 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
Ready, kluster K3S Anda telah berhasil dibangun. - Output yang Diharapkan:
Plaintext
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
Verifikasi: Pod akan di-schedule disudo /usr/local/bin/kubectl get pods -l app=nginx-test -o widek3s-node-01atauk3s-node-02, bukan dik3s-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 mengonfigurasikubectl 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.1yang ada di barisserver: https://127.0.0.1:6443menjadi 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 fileconfig. - Pastikan Anda sudah menginstal
kubectldi desktop Anda.
- Uji Akses Lokal:
Bash
Akses kluster Anda sekarang tersedia dari desktop Anda.# Di Desktop Lokal Anda kubectl get nodes
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
Post Terkait
Membangun Frontend Vendor-Agnostic yang Tahan Perubahan
Artikel ini membahas pendekatan arsitektur frontend yang berfokus pada kontrak internal agar aplikasi web tetap stabil,...
CI/CD: Continuous Integration dan Continuous Deployment untuk Developer Modern
Membahas konsep CI/CD (Continuous Integration/Continuous Deployment) dengan fokus pada implementasi praktis dan real-wor...
Sentry.io: Platform Error Monitoring untuk Developer Modern
Artikel ini membahas Sentry.io sebagai platform error monitoring dan performance tracking untuk aplikasi modern dengan f...