Posted in

Installation Kubernetes Cluster

Introduction

Kita akan melakukan instalasi kubernetes cluster yang dimana kita akan menggunakan high available setup. Kita akan menggunakan LoadBalancer (haproxy) untuk koneksi control-plane endpoint.

Topology

Setup HAPROXY

Kita akan menggunakan Haporxy sebagai loadbalancer untuk controlplane kubernetes. Untuk setup haproxy bisa cek pada link berikut.

https://cygnenoir.net/installation-multiple-haproxy-server-using-keepalived-and-git/

Setup Kubernetes

First Setup (ALL Nodes)

Ubah timezone

sudo timedatectl set-timezone Asia/Jakarta

Ubah hostname sesuai yang sudah kita tentukan

sudo hostnamectl set-hostname <hostname server>

Update & upgrade package

sudo apt update && sudo apt upgrade -y

Reboot server

sudo reboot

Disable swap dan swap partition pada /etc/fstab

sudo swapoff -a
sudo sed -i 's\/swap.img\#/swap.img\g' /etc/fstab

Load kernel modules

sudo modprobe overlay
sudo modprobe br_netfilter

Setting permanent loading kernel

sudo tee /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF

Add kernel parameter

sudo tee /etc/sysctl.d/kubernetes.conf <<EOT
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOT

Load kernel diatas kernel parameter tanpa reboot

sudo sysctl --system

Verifikasi bahwa module overlay dan br_netfilter sudah running

lsmod | grep br_netfilter
lsmod | grep overlay

Verifikasi bahwa net.bridge.bridge-nf-call-iptables, net.bridge.bridge-nf-call-ip6tables, dan net.ipv4.ip_forward sudah di set ke 1

sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

Install containerd (ALL Nodes)

Runtime yang akan kita gunakan yaitu containerd

Install containerd dependencies

sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates

Add repository containerd

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -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"

Install containderd

sudo apt update && sudo apt install containerd.io

Configure containerd for run using SystemdCgroup

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

Install Kubernetes (ALL Nodes)

Kita akan install kubernetes dan menggunakan versi 1.34 (current release) dan untuk manajemen cluster kita akan menggunakan kubeadm.

Download public signing key untuk Kubernetes package repository

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

Add Kubernetes repository

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

Install kubernetes

sudo apt update
sudo apt install kubelet kubeadm kubectl -y

Pull image terlebih dahulu karena itu lebih direkomendasikan jika kita memiliki internet yang tidak bagus atau terputus ditengah-tengah, jadi tidak akan failed ketika install jika gagal download image

sudo kubeadm config images list
sudo kubeadm config images pull

Initialized kubernetes (On master1)

Pastikan sebelum kita init, kita membuat snapshoot sebelum kita lanjut untuk ke tahap selanjutnya. Akan memudahkan kita ketika ada error, kita tinggal rollback.

Init kubeadm

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 --upload-certs

–pod-network-cidr = Berikan IP Address range untuk POD Network
–service-cidr = Berikan IP Address untuk Services ClusterIP
–control-plane-endpoint = Berikan IP Address atau domain untuk control-plane (Ini akan lebih baik digunakan ketika kita mempunyai multiple master)
–upload-certs = upload control-plane certificates ke the kubeadm-certs Secret.

Kita menggunakan –pod-network-cidr, –service-cidr, –control-plane-endpoint, jadi kita bisa berikan network lebih hati-hati, pada kedepannya akan berguna ketika kita memiliki multiple cluster kubernetes

Hasil dari init kubernetes

Join control-plane to kubernetes cluster (On master2&3)

Sekarang kita akan melakukan join sebagai control-plane ke kubernetes cluster yang sudah di init. Pastikan pada saat join pilih yang join Control-plane.

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

Join worker to kubernetes cluster (ALL worker)

Sekarang kita akan melakukan join sebagai worker node ke kuberentes cluster. Pastikan pada saat join pilih yang Wokrer.

Configuration Kubernetes

Copy default admin conf kubernetes to home (On Control-plane Nodes)

Jika kita ingin check cluster menggunakan kubectl, kita harus copy default admin conf ke home folder pada server tersebut

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

Chek kubernetes cluster

kubectl get nodes

Karena semua nodes sudah bisa pengecekan nodes, untuk kedepannya kita akan menggunakan salah satu nodes aja untuk konfigurasi agar cluster ready

Setup ALL Nodes to a Worker Nodes

Untuk konfigurasi mengubah control-plane node menjadi worker node sesuai dengan topology yang kita buat, bisa cek pada link berikut

https://cygnenoir.net/make-a-control-plane-node-to-a-worker/

Setup CNI (Cluster Network Interface)

Untuk konfigurasi CNI agar status pada node ready, bisa cek pada link berikut

https://cygnenoir.net/installing-cni-kubernetes-using-cilium/

Leave a Reply

Your email address will not be published. Required fields are marked *