VPS Murah Nevacloud

K3s di VPS: Kenapa Satu Server 2 GB Cukup untuk Kubernetes

Bayangkan satu VPS kecil dengan RAM 2 GB, lalu kita ingin menaruh beberapa layanan di atasnya tanpa drama “port-nya tabrakan lagi”. Di titik itu, K3s di VPS jadi opsi yang menarik: Kubernetes yang utuh, tapi dikemas sebagai satu binary ringan yang bisa hidup di server murah. Bukan Kubernetes “versi kurangsatu”, melainkan distribusi yang memang dirancang untuk lingkungan terbatas sumber daya.

Oke, lanjuutt.. Mari kita bedah kenapa K3s bisa seringan itu, lalu pasang dari nol sampai aplikasi pertama jalan.

Kenapa K3s di VPS Bisa Cukup 2 GB RAM?

Kubernetes biasa memisahkan komponen control plane — API server, scheduler, controller manager, etcd — jadi beberapa proses dan beberapa container. K3s memadatkannya: seluruh control plane berjalan dalam satu binary dan satu proses, dan binary-nya sendiri sekitar 80 MB (aset rilis v1.37.1+k3s1 berukuran 81.590.528 byte, sekitar 81,6 MB). Sejak lama proyek ini juga mengemas komponen pendukung supaya kita tidak perlu memasangnya satu per satu:

  • CoreDNS untuk DNS antar-service di dalam cluster.
  • Traefik sebagai ingress controller, langsung melayani port 80 dan 443.
  • metrics-server untuk kubectl top.
  • local-path-provisioner supaya PersistentVolumeClaim bisa langsung dapat disk lokal.
  • SQLite sebagai datastore bawaan untuk satu server, lewat lapisan kine.

Poin terakhir itu yang paling sering luput. K3s tidak wajib etcd. Pada instalasi satu server tanpa konfigurasi tambahan, datastore-nya adalah SQLite tertanam, jadi tidak ada proses etcd yang harus dijaga tetap sehat. Etcd baru dipakai kalau kita memang menyiapkan cluster dengan beberapa server. Efeknya jelas: RAM yang biasanya “dihabiskan” etcd bisa kita pakai untuk pod.

Versi terbaru yang bisa kita jadikan patokan per 30 September 2026 adalah K3s v1.37.1+k3s1, yang mengikuti Kubernetes v1.37.1. K3s juga tercatat sebagai proyek CNCF Sandbox, dan ritme rilisnya mengejar patch Kubernetes tiap minggu serta minor baru dalam 30 hari.

Cek Spesifikasi dan Port Sebelum Memasang

Menurut dokumentasi K3s, kebutuhan minimum untuk node server adalah 2 core CPU dan 2 GB RAM — itu belum termasuk beban aplikasi yang nanti kita jalankan. Jadi VPS 1 GB bisa dipasang, tapi jangan berharap bisa menampung banyak pod. Untuk eksperimen di VPS 2 GB, kita masih punya sisa sekitar 1–1,4 GB setelah control plane, cukup untuk 3–5 pod kecil.

Beberapa hal yang wajib dicek dulu:

  1. Hostname harus unik dan tidak sama dengan node lain. Kalau ragu, pakai opsi --with-node-id atau set K3S_NODE_NAME.
  2. Disk sebaiknya SSD. K3s bergantung pada performa database-nya, dan SQLite di disk lambat akan terasa di respons API.
  3. Port 6443/tcp terbuka untuk API server, dan 8472/udp hanya kalau kita menambah node lain (Flannel VXLAN). Untuk satu server, 8472 tidak perlu dibuka ke internet — dokumentasi K3s justru memperingatkan agar port VXLAN tidak diekspos.
  4. Firewall: kalau memakai UFW, minimal izinkan 6443/tcp plus rentang pod dan service (10.42.0.0/16 dan 10.43.0.0/16). Kalau memakai firewalld, dokumentasi menyarankan mematikannya dulu karena K3s mengelola aturan iptables sendiri.

Langkah Memasang K3s di VPS

Semua perintah di bawah dijalankan sebagai root atau lewat sudo.

  1. Perbarui sistem dan set hostname.

   apt update && apt upgrade -y
   hostnamectl set-hostname k3s-node-01
  1. Siapkan aturan UFW kalau firewall aktif.

   ufw allow 6443/tcp
   ufw allow from 10.42.0.0/16 to any
   ufw allow from 10.43.0.0/16 to any
  1. Jalankan installer resmi.

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

Script ini memasang K3s sebagai service systemd, menambahkan kubectl, crictl, ctr, k3s-killall.sh, dan k3s-uninstall.sh, lalu menulis kubeconfig ke /etc/rancher/k3s/k3s.yaml.

  1. Pastikan node benar-benar siap.

   systemctl status k3s --no-pager
   sudo k3s kubectl get node

Status node biasanya berubah jadi Ready dalam 30 detik atau kurang. Kalau masih NotReady, tunggu sebentar dan cek sudo journalctl -u k3s -n 50.

  1. Buat kubectl biasa bisa dipakai tanpa sudo k3s. Salin kubeconfig ke direktori user:

   mkdir -p ~/.kube
   sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
   sudo chown $(id -u):$(id -g) ~/.kube/config
   kubectl get nodes

Alternatifnya, pasang dengan K3S_KUBECONFIG_MODE="644" supaya file kubeconfig langsung terbaca user biasa. Tapi ingat: kubeconfig itu berisi kredensial admin cluster, jadi jangan pakai 644 di server yang dipakai bersama.

  1. Simpan token untuk menambah node. Nilainya ada di /var/lib/rancher/k3s/server/node-token. Saat menambah agent, cukup jalankan installer dengan K3S_URL dan K3S_TOKEN.

Kalau Port 80/443 Sudah Dipakai Nginx atau Caddy

Ini jebakan yang paling sering bikin bingung. Traefik bawaan K3s dipasang sebagai Service bertipe LoadBalancer, dan lewat ServiceLB ia mengikat port 80 dan 443 di host. Kalau di VPS yang sama sudah ada Nginx atau Caddy yang memegang dua port itu, keduanya akan berebut dan salah satu gagal bind.

Solusinya: matikan Traefik sejak awal. Kalau proxy utamamu Nginx, tidak perlu dua ingress controller.


curl -sfL https://get.k3s.io | \
  INSTALL_K3S_EXEC="server --disable=traefik --disable=servicelb" sh -

Kalau lebih suka file konfigurasi yang tidak hilang saat installer dijalankan ulang, tulis saja ke /etc/rancher/k3s/config.yaml:


write-kubeconfig-mode: "0644"
disable:
  - traefik
  - servicelb

Dokumentasi K3s mengingatkan satu hal penting: konfigurasi yang diberikan saat installer dijalankan akan hilang kalau kita menjalankan ulang installer tanpa menyebutkannya lagi. Karena itu config.yaml lebih aman untuk jangka panjang. Setelah Traefik dimatikan, tinggal arahkan Nginx ke NodePort atau ke IP pod lewat Service ClusterIP.

Deploy Aplikasi Pertama

Kita mulai dari yang paling sederhana: dua replika Nginx.


kubectl create deployment web --image=nginx:alpine --replicas=2
kubectl get pods -o wide
kubectl expose deployment web --port=80 --type=NodePort
kubectl get svc web

Kolom PORT(S) pada output kubectl get svc menunjukkan port NodePort yang dipilih otomatis (rentang 30000–32767). Buka http://IP-VPS:<nodeport> dan halaman selamat datang Nginx akan muncul. Kalau tidak muncul, cek firewall untuk port tersebut.

Ada satu kebiasaan K3s yang enak dipakai: setiap file YAML di /var/lib/rancher/k3s/server/manifests otomatis diterapkan seperti kubectl apply, baik saat startup maupun ketika file berubah. Jadi kita bisa menyimpan manifest aplikasi di sana dan biarkan K3s yang mengurus penerapannya. Hanya saja, menghapus file dari direktori itu tidak menghapus resource yang sudah dibuat — kita tetap harus menghapusnya manual dengan kubectl delete.

Backup dan Perawatan yang Sering Terlupa

Karena datastore bawaannya SQLite, backup-nya tidak memakai k3s etcd-snapshot. Yang perlu disalin ada dua:

  • /var/lib/rancher/k3s/server/db/ — isi datastore SQLite.
  • /var/lib/rancher/k3s/server/token — tanpa token yang sama, snapshot tidak bisa dipakai karena token dipakai untuk mengenkripsi data rahasia di dalam datastore.

Untuk restore, kembalikan isi direktori db beserta token-nya. Untuk upgrade, jalankan ulang installer dan sebutkan versi yang diinginkan lewat INSTALL_K3S_VERSION. Untuk membongkar semuanya, ada k3s-uninstall.sh yang ikut terpasang.

Yang juga perlu diingat: satu server berarti tidak ada redundansi. Kalau VPS-nya mati, seluruh aplikasi di dalamnya ikut mati. K3s memudahkan kita menambah server kedua atau ketiga nanti, tapi jangan mengklaim cluster ini high availability hanya karena ada kata “Kubernetes” di dalamnya. Wkwk.

Kesimpulan

K3s membuktikan bahwa Kubernetes tidak harus identik dengan tagihan cloud dan cluster besar. Satu binary, SQLite sebagai datastore, ditambah Traefik serta CoreDNS yang sudah dibundel, cukup untuk membuat satu VPS 2 GB menjalankan beberapa aplikasi dalam satu bahasa konfigurasi yang sama. Yang perlu kita jaga cuma tiga hal: port 80/443 kalau sudah ada Nginx, sisa RAM untuk pod, dan backup direktori db plus token.

Kalau selama ini deploy aplikasi masih berupa git pull lalu systemctl restart di tiap layanan, mencoba K3s di satu VPS adalah cara murah untuk merasakan cara kerja Kubernetes tanpa harus menyewa cluster. Silakan mulai dari satu deployment Nginx, hapus lagi, lalu ulangi dengan aplikasi sendiri. Selamat mencoba, dan jangan lupa kubectl get all setiap kali ada yang terasa aneh.

Baca juga

Nevacloud VPS Indonesia

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *