Instalasi Kubernetes Cluster Baremetal


K8s BareMetal


Halo teman teman, kembali lagi bersama saya, Gilang. Kali ini saya ingin membahas tentang Kubernetes atau yang sering disebut K8s, K8s ini digunakan sebagai alat untuk menjaga performa suatu aplikasi pada cloud (High Availabillity) karena bisa meng-orkes setiap container yang berjalan. Seperti apa instalasinya? Mari kita langsung menuju ke proses instalasinya.

Skema Environment untuk Instalasi:

Gambar diatas adalah gambaran environment yang digunakan.


INSTALASI KUBERNETES

A. Minimum system requirements :

  1. 2 Virtual Machine.
  2. 4 GB Ram .
  3. 2 VCPU.

B. Komponen yang diperlukan :

  1. Ubuntu Server 21.04 LTS.
  2. Putty.

C. Instalasi:

Pada dokumentasi kali ini, kubernetes dinstall dengan Ubuntu Server 21.04. Kubernetes kali ini dengan 1 Worker dan 1 Master. Disarankan untuk memperhatikan hostname pada CLI, karena itu menandadakan paket paket atau syntax yang akan dijalankan pada node yang sesuai dengan hostname nya. Adapaun hostname allNode menandakan instalasi di setiap node.

  1. Edit Hostname

Edit hostname masing masing node sesuai role nya.

$ hostnamectl set-hostname master // lakukan pada node master
$ hostnamectl set-hostname worker // lakukan pada node worker

2. Edit Hosts File

Lakukan pada kedua node (Master & Worker) . $ nano /etc/hosts

Tambahkan IP private Node sebelah (jika pada node master maka tambahkan ip node worker. Begitupun sebaliknya). Setelah itu tes ping dengan hostname yang telah kita tentukan pada file hosts.

Lalu, lakukan cara diatas pada node Master:


3. Install Container Runtime

Lakukan pada setiap Node (Master & Worker).

$ apt update
$ apt install -y docker.io
$ systemctl status docker.service
Versi Containerd :
$ sudo apt-get install containerd -y
$ sudo mkdir -p /etc/containerd
$ sudo su -
$ containerd config default > /etc/containerd/config.toml

4. Konfigurasi Docker

Dilakukan hanya untuk Docker sebagai runtime, jika menggunakan containerd skip cara ini.

Konfigurasi Docker agar masuk kedalam systemd cgroup driver, hal ini sebagai syarat dari Instalasi Kubernetes.



sudo mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF


$ sudo systemctl enable docker
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

5. Matikan Swap

Matikan swap pada ubuntu sebagai syarat instalasi Kubernetes.

$ nano /etc/fstab
$ swapoff -a

6. Aktifkan IP Forwarding

$ nano /etc/sysctl.conf
$ sysctl -p

7. Instalasi Kubernetes

Setelah bumbu bumbu instalasi (diatas) sudah ter-eksekusi sekarang saatnya instalasi kubernetes.

$ apt install -y apt-transport-https curl
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
$ apt-add-repository “deb http://apt.kubernetes.io/ kubernetes-xenial main”
$ apt update
$ apt install -y kubelet kubeadm kubectl

Khusus pengguna containerd, silahkan define pada kubeadm_flags:

$ nano /var/lib/kubelet/kubeadm-flags.env
Isi dengan :
KUBELET_KUBEADM_ARGS=” -- container-runtime=remote  -- container-runtime endpoint=/run/containerd/containerd.sock”

8. Instalasi Cluster Baru

$ kubeadm config images pull
$ kubeadm init — pod-network-cidr=192.168.0.0/16

Setelah terinisialisasi, akan muncul seperti ini:

Lalu Copy token untuk kebutuhan join cluster, jika tidak sempat token bisa diprint ulang dengan syntax :
$ kubeadm token create — print-join-command

Setelah itu Lakukan konfigurasi rekomendasi dari K8s:

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

9. Join Cluster

$ kubeadm token create — print-join-command

Copy token, paste pada Node worker.

Cek Nodes yang sudah terhubung ke cluster.

$ kubectl get nodes

10. Apply add-on Network Calico

Node yang sudah join berpotensi untuk tidak bisa saling terhubung karena belum ada add-on untuk networkingnya, disini kami menggunakan Calico sebagai add-on networkingnya.

$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
$ kubectl get nodes

Cek status komponen, pastikan semua ber-status Health.

$ kubectl get cs

Jika status Unhealthy, pergi ke :

$ sudo nano /etc/kubernetes/manifests/kube-scheduler.yaml
$ sudo nano /etc/kubernetes/manifests/kube-controller-manager.yaml
spec > containers > command hapus bagian — port=0
$ sudo systemctl restart kubelet.service

Jika kalian ingin explore explore tentang K8s di baremetal, kalian bisa kunjungi git saya dan coba bermain dengan saya : https://github.com/gilangvperdana/K8s-BareMetal-Ubuntu21.04

Sekian dari saya, tentunya tutorial ini sudah saya buktikan sendiri dan berhasil. Terima kasih semua.



UPDATE

Jika kalian tidak memiliki resource yang cukup, ada tools virtualisasi Kubernetes bernama MiniKube . Langsung saja ke sesi instalasi.

Environment :

  1. 1x Ubuntu 21.04
  2. NAT Network & Host Only Adapter
$ apt install -y docker.io
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube
$ sudo usermod -aG docker $USER && newgrp docker

$curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

$ cd /home/
$ sudo cp -r .kube/ .minikube. /root/
$ minikube start --driver=docker

Preview Minikube :



Jika kalian ingin akses aplikasi pada Private Network yang berjalan diatas Minikube kalian bisa coba kunjungi 
link ini.

Sumber : 
https://minikube.sigs.k8s.io/docs/start/


Kube Spray
Satu lagi tools bernama Kube Spray yang memanfaatkan automasi dari tools Ansible. Kalian bisa coba gunakan dengan berpacu pada link ini.



Semua yang tertulis disini, tentunya sudah dicoba dan berhasil oleh penulis.