Back to Home
Cloud Native

Instalasi Kubernetes High Availability (HA) Cluster dengan Kubeadm & Containerd

Zainun Kamal
7/23/2026
4 views

Introduction

Pada artikel ini, kita akan melakukan instalasi Kubernetes Cluster High Availability (HA). Untuk menjamin ketersediaan tinggi pada control-plane endpoint, kita menggunakan HAProxy sebagai Load Balancer.


Topology

---

Setup Haproxy

Kita akan menggunakan Haporxy sebagai loadbalancer untuk controlplane kubernetes.

frontend kubernetes_api
    bind *:6443
    mode tcp
    option tcplog
    default_backend kubernetes_masters

backend kubernetes_masters
    mode tcp
    option tcp-check
    balance roundrobin
    server master1 10.100.19.51:6443 check fall 3 rise 2
    server master2 10.100.19.52:6443 check fall 3 rise 2
    server master3 10.100.19.53:6443 check fall 3 rise 2

Persiapan & Hardening System (Semua Node)

Lakukan konfigurasi berikut di seluruh node (Control-plane & Worker).

Konfigurasi Firewall (UFW)

Aktifkan aturan forwarding pada UFW agar trafik antar-interface dapat saling berkomunikasi:

sudo sed -i 's/^DEFAULT_FORWARD_POLICY=.*/DEFAULT_FORWARD_POLICY="ACCEPT"/' /etc/default/ufw

Port yang Harus Dibuka pada Control-Plane Nodes:

  • 6443/tcp : Kubernetes API Server

  • 10250/tcp: Kubelet API

  • 10257/tcp: Kube-controller-manager

  • 10259/tcp: Kube-scheduler

  • 2380/tcp : etcd client/peer API

sudo ufw allow 6443/tcp
sudo ufw allow 10250/tcp
sudo ufw allow 10257/tcp
sudo ufw allow 10259/tcp
sudo ufw allow 2380/tcp

Port yang Harus Dibuka pada Worker Nodes:

  • 10250/tcp: Kubelet API
sudo ufw allow 10250/tcp

Konfigurasi Dasar OS (Semua Node)

  1. Ubah Timezone

    sudo timedatectl set-timezone Asia/Jakarta
    
  2. Ubah Hostname (Sesuaikan dengan nama node masing-masing)

    sudo hostnamectl set-hostname <hostname-server>
    
  3. Update & Upgrade Package

    sudo apt update && sudo apt upgrade -y
    
  4. Nonaktifkan Swap (Wajib untuk Kubernetes)

    sudo swapoff -a
    sudo sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
    
  5. Load Kernel Modules

    sudo modprobe overlay
    sudo modprobe br_netfilter
    
    # Buat permanen saat boot
    sudo tee /etc/modules-load.d/k8s.conf <<EOF
    overlay
    br_netfilter
    EOF
    
  6. Konfigurasi Sysctl / Kernel Parameter

    sudo tee /etc/sysctl.d/kubernetes.conf <<EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    EOF
    
    # Apply sysctl tanpa perlu reboot
    sudo sysctl --system
    
  7. Verifikasi Module & Sysctl

    # Cek modul kernel
    lsmod | grep -E "br_netfilter|overlay"
    
    # Cek parameter sysctl
    sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
    
  8. Reboot Server

    sudo reboot
    


Instalasi Containerd Runtime (Semua Node)

Kita akan menggunakan Containerd sebagai container runtime.

  1. Install Dependensi

    sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
    
  2. Tambah Repositori Docker / Containerd

    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/containerd.gpg
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" -y
    
  3. Install Containerd

    sudo apt update && sudo apt install -y containerd.io
    
  4. Konfigurasi Containerd menggunakan SystemdCgroup

    sudo mkdir -p /etc/containerd
    containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
    sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
    sudo systemctl restart containerd
    

Instalasi Komponen Kubernetes (Semua Node)

Kita akan menginstall Kubernetes versi v1.34 menggunakan kubeadm.

  1. Tambah Public Signing Key Kubernetes

    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.34/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/k8s.gpg
    
  2. Tambah Repositori Kubernetes

    echo 'deb [signed-by=/etc/apt/keyrings/k8s.gpg] https://pkgs.k8s.io/core:/stable:/v1.34/deb/ /' | sudo tee /etc/apt/sources.list.d/k8s.list
    
  3. Install Kubelet, Kubeadm, dan Kubectl

    sudo apt update
    sudo apt install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl
    
  4. Pre-pull Container Image (Direkomendasikan agar proses inisialisasi tidak terputus karena masalah koneksi)

    sudo kubeadm config images list
    sudo kubeadm config images pull
    

Inisialisasi Cluster (Hanya di Master 1)

Tips: Buat VM Snapshot terlebih dahulu sebelum menjalankan langkah ini agar lebih mudah melakukan rollback jika terjadi kesalahan.

Jalankan perintah inisialisasi berikut pada Master 1:

sudo kubeadm init \
  --pod-network-cidr=10.248.0.0/14 \
  --service-cidr=10.244.0.0/14 \
  --control-plane-endpoint=10.100.19.100:6443 \
  --upload-certs

Penjelasan Parameter:

  • --pod-network-cidr: Alokasi IP Address range untuk Pod Network.

  • --service-cidr: Alokasi IP Address range untuk ClusterIP Service.

  • --control-plane-endpoint: IP Virtual (VIP) atau FQDN dari Load Balancer (HAProxy).

  • --upload-certs: Mengunggah sertifikat control-plane ke Secret kubeadm-certs secara otomatis.

---

Menggabungkan Node ke Cluster

Setelah kubeadm init selesai, output terminal akan memberikan perintah join untuk Control-Plane dan Worker.

Join Additional Control-Plane (Master 2 & Master 3)

Jalankan perintah join dengan flag --control-plane pada Master 2 dan Master 3:

sudo kubeadm join 10.100.19.100:6443 --token <TOKEN> \
        --discovery-token-ca-cert-hash sha256:<HASH> \
        --control-plane --certificate-key <CERT-KEY>

Join Worker Nodes (Semua Worker)

Jalankan perintah join standar pada seluruh Worker Node:

sudo kubeadm join 10.100.19.100:6443 --token <TOKEN> \
        --discovery-token-ca-cert-hash sha256:<HASH>

Konfigurasi Kubectl & Verifikasi Cluster

Konfigurasi Akses Kubectl (Di Control-Plane Nodes)

Agar kita dapat menjalankan perintah kubectl dari user biasa:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Verifikasi Node Status

Jalankan perintah ini untuk melihat status seluruh node:

kubectl get nodes

Catatan Tambahan: Node mungkin akan berada dalam status NotReady sampai Anda menginstall Container Network Interface (CNI) seperti Calico, Cilium, atau Flannel. Pasang CNI pilihan Anda untuk menyelesaikan konfigurasi cluster.