Cara Membuat Cluster Kubernetes Ringan dengan K3s
Langkah memasang K3s di satu atau beberapa VPS, menggabungkan worker, deploy aplikasi contoh, membukanya lewat ingress Traefik, dan memahami batasnya.
Jawaban singkat
Pasang server K3s dengan satu perintah dari get.k3s.io, ambil token di /var/lib/rancher/k3s/server/node-token, lalu gabungkan worker dengan K3S_URL dan K3S_TOKEN. K3s sudah membawa Traefik sebagai ingress dan ServiceLB, jadi aplikasi bisa langsung dibuka lewat domain.
Daftar isi
- Berapa spesifikasi VPS yang dibutuhkan K3s?
- Port apa yang harus dibuka?
- Langkah membangun cluster K3s
- Langkah 1. Siapkan setiap VPS
- Langkah 2. Pasang server pertama
- Langkah 3. Ambil token untuk worker
- Langkah 4. Gabungkan worker
- Langkah 5. Deploy aplikasi contoh
- Langkah 6. Buka lewat ingress Traefik
- Langkah 7. Akses cluster dari laptop
- Apa batas K3s yang perlu kamu tahu?
- Pertanyaan yang sering diajukan
Ingin belajar atau memakai Kubernetes, tapi yang kamu punya hanya dua atau tiga VPS kecil? K3s adalah jawaban yang paling sering dipakai untuk situasi ini. K3s adalah distribusi Kubernetes ringan dari proyek k3s-io yang dikemas dalam satu biner, dan bisa dipasang dengan satu perintah. Satu server K3s sudah merupakan cluster Kubernetes lengkap: datastore, control plane, kubelet, dan container runtime ada di dalamnya.
Per 4 November 2026, rilis terbaru di GitHub adalah lini v1.37. Langkah di bawah mengikuti dokumentasi resmi K3s, dari satu VPS sampai cluster beberapa node dengan aplikasi yang bisa dibuka dari domain.
Berapa spesifikasi VPS yang dibutuhkan K3s?
Dokumentasi resmi menyebut kebutuhan minimum berikut:
| Peran node | CPU minimum | RAM minimum |
|---|---|---|
| Server (control plane) | 2 core | 2 GB |
| Agent (worker) | 1 core | 512 MB |
Itu batas bawah untuk K3s sendiri, belum termasuk aplikasimu. Dokumentasi juga menyarankan SSD karena kinerja K3s sangat dipengaruhi kinerja datastore. Hitung kebutuhan aplikasi di atas angka ini, dengan bantuan panduan memilih spesifikasi VPS.
Setiap node juga butuh hostname yang unik. Bila hostname VPS kamu sama, tetapkan nama lain lewat variabel K3S_NODE_NAME saat instalasi.
Port apa yang harus dibuka?
| Port | Protokol | Untuk |
|---|---|---|
| 6443 | TCP | API Kubernetes, agent ke server |
| 8472 | UDP | Flannel VXLAN antar node |
| 10250 | TCP | Kubelet dan metrics, antar node |
| 2379-2380 | TCP | Etcd tertanam, hanya untuk server HA |
| 51820/51821 | UDP | Flannel WireGuard (IPv4/IPv6), bila dipakai |
Dokumentasi menegaskan port VXLAN 8472 jangan dibuka ke internet publik. Izinkan hanya dari IP node lain. Port 80 dan 443 tentu perlu dibuka untuk trafik web.
Langkah membangun cluster K3s
Langkah 1. Siapkan setiap VPS
Perbarui sistem, pasang SSH key, dan atur firewall dasar seperti di langkah awal mengamankan VPS. Dokumentasi K3s menyarankan menonaktifkan firewalld atau UFW. Bila tetap memakainya, buka port 6443 dan izinkan rentang pod 10.42.0.0/16 dan service 10.43.0.0/16.
Langkah 2. Pasang server pertama
Di VPS yang akan menjadi server:
curl -sfL https://get.k3s.io | sh -
Skrip memasang K3s sebagai service yang otomatis menyala kembali setelah reboot atau crash, berikut alat kubectl, crictl, k3s-killall.sh, dan k3s-uninstall.sh. Cek hasilnya:
sudo kubectl get nodes
File kubeconfig ada di /etc/rancher/k3s/k3s.yaml dan otomatis dipakai oleh kubectl bawaan K3s.
Langkah 3. Ambil token untuk worker
sudo cat /var/lib/rancher/k3s/server/node-token
Simpan token ini dengan aman. Siapa pun yang memegangnya bisa menggabungkan node ke cluster kamu.
Langkah 4. Gabungkan worker
Di setiap VPS worker:
curl -sfL https://get.k3s.io | K3S_URL=https://IP-SERVER:6443 K3S_TOKEN=isi-token sh -
Adanya K3S_URL membuat installer memasang node sebagai agent, bukan server. Kembali ke server dan jalankan sudo kubectl get nodes. Dalam beberapa saat, worker baru muncul dengan status Ready.
Bila VPS berada di jaringan berbeda dan komunikasi antar node lewat internet, pertimbangkan backend Flannel WireGuard agar lalu lintas antar node terenkripsi, atau hubungkan node lewat jaringan privat.
Langkah 5. Deploy aplikasi contoh
Buat file contoh.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-contoh
spec:
replicas: 2
selector:
matchLabels: { app: web-contoh }
template:
metadata:
labels: { app: web-contoh }
spec:
containers:
- name: web
image: nginx:stable
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: web-contoh
spec:
selector: { app: web-contoh }
ports:
- port: 80
targetPort: 80
Terapkan dengan sudo kubectl apply -f contoh.yaml, lalu cek sudo kubectl get pods -o wide. Dua pod akan tersebar ke node yang tersedia.
Langkah 6. Buka lewat ingress Traefik
K3s membawa Traefik v3 sebagai ingress controller dan otomatis memasangnya saat server menyala. Tambahkan Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-contoh
spec:
ingressClassName: traefik
rules:
- host: app.domainmu.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-contoh
port:
number: 80
Arahkan record DNS app.domainmu.com ke IP publik node (cara membuat record ada di apa itu DNS), lalu buka di browser. Traefik dipublikasikan sebagai Service bertipe LoadBalancer yang dilayani ServiceLB bawaan K3s, yang memakai hostPort di node.
Untuk menyesuaikan Traefik, jangan mengedit /var/lib/rancher/k3s/server/manifests/traefik.yaml karena file itu ditimpa saat K3s start. Gunakan manifest HelmChartConfig di folder yang sama. Dokumentasi juga menjelaskan cara mengaktifkan dukungan Gateway API di Traefik lewat cara ini.
Langkah 7. Akses cluster dari laptop
Salin /etc/rancher/k3s/k3s.yaml ke laptop sebagai ~/.kube/config, lalu ganti alamat 127.0.0.1 di dalamnya dengan IP server. Batasi akses port 6443 hanya dari IP kamu, karena file itu memberi hak admin penuh atas cluster.
Apa batas K3s yang perlu kamu tahu?
K3s tetap Kubernetes yang sesungguhnya, jadi manifest dan Helm chart umumnya bisa dipakai. Batasnya lebih ke arsitektur yang kamu pilih:
- Satu server berarti satu titik gagal. Kalau server mati, aplikasi di worker bisa tetap berjalan, tapi kamu tidak bisa mengubah apa pun di cluster. Untuk ketersediaan tinggi, K3s mendukung beberapa server dengan etcd tertanam, yang butuh jumlah server ganjil.
- Penyimpanan lokal. Penyimpanan bawaan menyimpan volume di disk node tempat pod berjalan. Bila node itu mati, datanya tidak otomatis pindah. Database penting sebaiknya punya replikasi sendiri atau memakai layanan database terkelola.
- ServiceLB memakai port node. Service LoadBalancer akan tertahan "Pending" bila tidak ada node dengan port yang dibutuhkan masih kosong.
- Beban operasional tetap ada. Pembaruan versi, backup datastore, dan pemantauan menjadi tugasmu.
Untuk satu atau dua aplikasi sederhana, Docker Compose di satu VPS sering lebih ringkas. Dasarnya ada di apa itu Docker. K3s mulai terasa manfaatnya saat aplikasi banyak, butuh rolling update, atau tim sudah terbiasa dengan Kubernetes.
Pertanyaan yang sering diajukan
Apakah K3s cocok untuk produksi?
README resmi K3s menyebutnya distribusi Kubernetes yang "fully conformant" dan siap produksi. Kesiapan produksi lebih ditentukan oleh desainmu: HA control plane, backup, penyimpanan, dan pemantauan.
Bagaimana mematikan Traefik bila ingin ingress lain?
Jalankan semua server dengan opsi --disable=traefik, lalu pasang ingress controller atau implementasi Gateway API pilihanmu.
Bagaimana menghapus K3s dari node?
Di server jalankan k3s-uninstall.sh, di worker jalankan k3s-agent-uninstall.sh. Skrip ini dibuat otomatis oleh installer.
Apakah K3s bisa jalan di ARM?
Bisa. Dokumentasi menyebut dukungan x86_64, armhf, dan arm64. Untuk Raspberry Pi, disarankan SSD eksternal karena kartu SD tidak kuat menahan beban IO.
Checklist sebelum menaruh aplikasi sungguhan:
- Setiap node memenuhi spesifikasi minimum dan punya hostname unik
- Port antar node hanya terbuka untuk IP node lain
- Token node dan kubeconfig disimpan aman
- Ingress dan DNS sudah diuji dengan aplikasi contoh
- Rencana untuk datastore: satu server dengan backup, atau beberapa server HA
- Data penting tidak hanya bergantung pada penyimpanan lokal satu node


