Kubernetes adalah platform orkestrasi container open-source yang populer digunakan untuk mengelola deployment dan scaling aplikasi secara otomatis di banyak server. Untuk membangun cluster Kubernetes yang terdiri dari beberapa node (server), diperlukan konektivitas jaringan stabil antar node. Namun pada kondisi tertentu, tidak semua server memiliki IP publik, seperti pada server rumah atau server pribadi milik anggota tim.
Oleh karena itu, dalam dokumentasi ini, kita akan menggunakan WireGuard VPN untuk menyatukan semua server dalam jaringan virtual private (mesh). Hanya 1 server (master) yang wajib memiliki IP publik agar bisa diakses oleh server lain melalui VPN. Server lainnya (worker) bisa berada di jaringan lokal, rumah, atau bahkan menggunakan koneksi internet mobile, selama dapat terhubung ke WireGuard master.
Catatan: Kubernetes tidak bisa bersanding dengan docker.io karena containerd yang berbeda service
🛠️ Topologi Cluster
- Master Node (Server Kantor): Memiliki IP Publik, menjadi pusat kontrol Kubernetes.
- Worker Node (Server Home): Terhubung melalui WireGuard, tidak memiliki IP publik.
- Worker Node (Server Boz): Sama seperti server home, hanya terhubung via VPN.
1. Instalasi dan Konfigurasi WireGuard di Semua Server
Install WireGuard
sudo apt update
sudo apt install wireguard -y
🔑 Generate Key Pair di Tiap Server
Server master
mkdir -p /home/wg_config/master
wg genkey | tee /home/wg_config/master/master.key | wg pubkey > /home/wg_config/master/master.pub
Server home
mkdir -p /home/wg_config/home
wg genkey | tee /home/wg_config/home/home.key | wg pubkey > /home/wg_config/home/home.pub
Server boz
mkdir -p /home/wg_config/boz
wg genkey | tee /home/wg_config/boz/boz.key | wg pubkey > /home/wg_config/boz/boz.pub
Konfigurasi di Server Master (10.8.0.1) - /etc/wireguard/wg0.conf
nano /etc/wireguard/wg0.conf
Isi
[Interface]
ListenPort = 51820
Address = 10.8.0.1/24
PrivateKey =
[Peer]
PublicKey =
AllowedIPs = 10.8.0.2/32
[Peer]
PublicKey =
AllowedIPs = 10.8.0.3/32
Konfigurasi di Server Home (10.8.0.2)
[Interface]
Address = 10.8.0.2/24
PrivateKey =
[Peer]
PublicKey =
Endpoint = :51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Konfigurasi di Server Boz (10.8.0.3)
[Interface]
Address = 10.8.0.3/24
PrivateKey =
[Peer]
PublicKey =
Endpoint = :51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Aktifkan WireGuard
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
sudo systemctl restart wg-quick@wg0
Verifikasi Koneksi
ping 10.8.0.1 # dari client ke master
ping 10.8.0.2 # dari master ke home
ping 10.8.0.3 # dari master ke boz
Catatan Penting
Untuk konfigurasi peer pada home dan boz maka jika 0.0.0.0/0 akan merubah routing melalui wireguard termasuk internetnya, jika internet tetap menggunakan sumber saja maka bisa merubah peer di home dan boz menjadi
AllowedIPs = 10.8.0.0/24
2. Instalasi Kubernetes di Semua Node
Install Kubernetes Dependencies
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt install kubelet kubeadm kubectl -y
sudo apt-mark hold kubelet kubeadm kubectl
Install dan Konfigurasi Containerd
sudo apt install containerd -y
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
3. Inisialisasi Cluster di Master
sudo kubeadm reset -f # hanya untuk menghapus conf lama sudo rm -rf ~/.kube /etc/kubernetes # hanya untuk menghapus conf lama sudo rm -f /etc/kubernetes/manifests/*.yaml # hanya untuk menghapus conf lama sudo swapoff -a nano
/etc/fstab# ... swap swap sw 0 0
sudo systemctl restart containerd kubelet
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Note: Jangan lupa simpan kubeadm token yang dihasilkan
Set Kubeconfig untuk User
sudo mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Install CNI (Flannel)
systemctl restart kubelet
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml --validate=false
Ambil Perintah Join Token
kubeadm token create --print-join-command
4. Join Server Home dan Boz ke Cluster
Di Masing-masing Worker Node:
sudo kubeadm join 10.8.0.1:6443 --token \
--discovery-token-ca-cert-hash sha256:
Verifikasi di Master
kubectl get nodes
✅ Verifikasi dan Monitoring
kubectl get nodes
kubectl get pods --all-namespaces
🧠 Catatan
- Pastikan semua server tetap terhubung ke VPN untuk komunikasi cluster.
- Jika salah satu node tidak muncul, periksa konfigurasi WireGuard dan pastikan port 51820 terbuka di firewall.
- Untuk setup lanjutan: tambahkan Ingress Controller, Helm, dan Auto-Scaler sesuai kebutuhan.
🔧 Uninstall Kubernetes Secara Lengkap (Kubeadm-based Cluster)
# 1. Hentikan semua service Kubernetes
sudo systemctl stop kubelet
# 2. Reset cluster (hapus semua konfigurasi dan static pod)
sudo kubeadm reset -f
# 3. Hapus konfigurasi dan direktori Kubernetes
sudo rm -rf ~/.kube
sudo rm -rf /etc/kubernetes/
sudo rm -rf /var/lib/etcd
sudo rm -rf /var/lib/kubelet
sudo rm -rf /etc/cni
sudo rm -rf /opt/cni
sudo rm -rf /run/flannel
# 4. Hapus paket Kubernetes
sudo apt purge kubeadm kubelet kubectl kubernetes-cni
sudo apt autoremove
sudo apt autoclean
# 5. Cek dan bersihkan container runtime (opsional, jika pakai containerd atau docker)
sudo systemctl stop containerd
sudo rm -rf /var/lib/containerd