1. Home
  2. Docs
  3. Self-hosted Server
  4. Kubernetes
  5. Implementasi Kubernetes HA Cluster dengan K3s

Implementasi Kubernetes HA Cluster dengan K3s

K3s adalah distribusi Kubernetes yang dirancang lebih ringan dan mudah diimplementasikan, terutama pada environment dengan resource terbatas seperti edge computing. Dan karakteristik penting dalam Production Environment adalah High Availability (HA), dengan high availabity kita akan bisa menjadikan uptime service aplikasi kita tanpa downtime.

Pada kesempatan ini saya ingin mencontohkan untuk Implementasi High Availability (HA) Kubernetes Cluster dengan K3s.

Contoh Skenario

  • Kubernetes HA Cluster dengan 5 Nodes (3 Master & 2 Worker).
  • Semua node menggunakan linux debian 12 bookworm.
  • Menggunakan K3s versi 1.26.12.
  • Packages Manager dengan HELM.
  • LoadBalancer dengan METALLB.
  • Ingress Controller dengan NGINX INGRESS.
  • Database Embedded dengan ETCD di node MASTER.
  • PersistentVolume dengan LONGHORN.

Pastikan masing-masing nodes kita mempunyai unique hostname dulu ya, contoh:

$ hostnamectl set-hostname kube-master-1
atau
$ echo kube-master-1 > /etc/hostname

Install depencies yang dibutuhkan disemua node:

$ sudo apt install apparmor iptables jq open-iscsi nfs-common -y

Master Nodes

Disini saya setting eksekusi semua perintah kubectl tanpa perlu sudo ya, jadi file config k3s nya saya setup seperti ini setelah saya install k3s nya.

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/rancher/k3s/k3s.yaml $HOME/.kube/config.yaml
$ sudo chown $USER:$GROUP $HOME/.kube/config.yaml
$ export KUBECONFIG=$HOME/.kube/config.yaml

# biar permanen environment variable nya, saya simpan di file .bashrc.
$ echo 'export KUBECONFIG=$HOME/.kube/config.yaml' >> $HOME/.bashrc

kube-master-1

Dalam contoh ini saya install K3s nya di semua nodes dengan single script ya, seperti contoh :

$ curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.26.12+k3s1 sh -s - server --cluster-init --token [email protected] --disable servicelb,local-storage,traefik

Sesuai dengan skenario yang saya rencanakan, kita non-aktifkan “servicelb” “local-storage” dan “traefik“. Dan sesuaikan token yang kita inginkan di flag --token.

kube-master-2

Di nodes master-2 saya jalankan perintah tuk joining seperti:

$ curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.26.12+k3s1 sh -s - server --server https://192.168.99.101:6443 --token [email protected] --disable servicelb,local-storage,traefik

Sesuaikan IP Server node master-1 kita, contoh ini saya menggunakan IP 192.168.99.101 di node master-1.

kube-master-3

Di nodes master-3 saya jalankan perintah tuk joining:

$ curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.26.12+k3s1 sh -s - server --server https://192.168.99.101:6443 --token [email protected] --disable servicelb,local-storage,traefik

next, kita lanjut ke nodes worker.

Worker Nodes

kube-worker-4

Untuk di nodes worker pakai flag agent ya, untuk join ke master.

$ curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.26.12+k3s1 sh -s - agent --server https://192.168.99.101:6443 --token [email protected]

Lanjut, ke node worker terakhir

kube-worker-5

$ curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.26.12+k3s1 sh -s - agent --server https://192.168.99.101:6443 --token [email protected]

Sekarang kita test apakah semua node dan service sudah READY.

Verifikasi Instalasi

Untuk verifikasi semua nodes sudah join cluster dan service berjalan, jalankan perintah:

$ kubectl get nodes

Outputnya harusnya terlihat seperti ini:

$ kubectl get nodes
NAME                                      STATUS   ROLES                       AGE   VERSION
kube-master-1.homelab.modalsemangat.com   Ready    control-plane,etcd,master   57m   v1.28.5+k3s1
kube-master-2.homelab.modalsemangat.com   Ready    control-plane,etcd,master   54m   v1.28.5+k3s1
kube-master-3.homelab.modalsemangat.com   Ready    control-plane,etcd,master   52m   v1.28.5+k3s1
kube-worker-4.homelab.modalsemangat.com   Ready    <none>                      20m   v1.28.5+k3s1
kube-worker-5.homelab.modalsemangat.com   Ready    <none>                      17m   v1.28.5+k3s1
dietpi@kube-master-1:~$ 
$ kubectl get pods -A
NAMESPACE     NAME                              READY   STATUS    RESTARTS        AGE
kube-system   coredns-6799fbcd5-vpfbl           1/1     Running   6 (5m58s ago)   17h
kube-system   metrics-server-67c658944b-lzq8s   1/1     Running   9 (3m42s ago)   17h
Tags ,

Tinggalkan Balasan

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