Apa itu Kubernetes

Kubernetes adalah platform open-source yang digunakan untuk mengelola, mengotomatisasi, dan menskalakan aplikasi berbasis container. Jika sebelumnya Anda menjalankan aplikasi langsung di server atau mesin virtual, Kubernetes membantu menjalankannya dalam container dengan cara yang lebih efisien dan otomatis.

Konsep Dasar Kubernetes:

  1. Container & Pod
  • Container adalah unit kecil yang berisi aplikasi beserta dependensinya.
  • Pod adalah unit terkecil di Kubernetes yang bisa berisi satu atau lebih container.
  1. Node & Cluster
  • Node adalah server tempat pod berjalan.
  • Cluster adalah kumpulan beberapa node yang dikelola oleh Kubernetes.
  1. Deployment & Service
  • Deployment mengatur bagaimana aplikasi dijalankan dan diperbarui.
  • Service memungkinkan komunikasi antar-pod atau dari luar ke dalam cluster.
  1. Autoscaling & Load Balancing
  • Kubernetes bisa menambah atau mengurangi jumlah pod secara otomatis sesuai beban kerja.
  • Load balancer mendistribusikan lalu lintas secara merata ke berbagai pod.

Mengapa memakai Kubernetes

  1. Otomatisasi – Mengelola aplikasi tanpa harus mengatur server manual.
  2. Skalabilitas – Bisa menyesuaikan kapasitas aplikasi sesuai kebutuhan.
  3. Toleransi Kesalahan – Jika satu pod mati, Kubernetes akan menggantinya otomatis.
  4. Portabilitas – Bisa dijalankan di berbagai cloud provider atau server sendiri.

Instalasi Kubernetes

Pada kali ini saya akan melakukan instalasi kubernetes pada linux server Debian fresh. Dalam tutorial kali ini saya memakai 3 VM untuk melalukan instalasi, yaitu 1 master node dan 2 worker node.

Master Node   (k8s-master)   – 10.10.10.25
Worker Node 1 (k8s-worker01) – 10.10.10.26
Worker Node 2 (k8s-worker02) – 10.10.10.27

Buat hostname pada setiap VM yang kita miliki

# pastekan ini di VM Master
sudo hostnamectl set-hostname "k8s-master.husni.local"

# pastekan ini di VM Worker 1
sudo hostnamectl set-hostname "k8s-worker01.husni.local"

# pastekan ini di VM Worker 2
sudo hostnamectl set-hostname "k8s-worker02.husni.local"

Edit host file

sudo nano /etc/hosts

# lalu masukan ini di semua node
10.10.10.25   k8s-master.husni.local     k8s-master
10.10.10.26   k8s-worker01.husni.local   k8s-worker01
10.10.10.27   k8s-worker02.husni.local   k8s-worker02

Disable Swap

Kita memerlukan disable swap pada linux server kita karena Kubernetes mengelola resource CPU dan RAM berdasarkan jumlah yang tersedia. Jika swap diaktifkan, node bisa mulai menggunakan disk sebagai RAM tambahan, yang jauh lebih lambat. Ini bisa menyebabkan performa aplikasi menjadi tidak stabil.

sudo swapoff -a
# Disable Swap saat Booting
sudo sed -i '/ swap / s/^(.*)$/#\1/g' /etc/fstab

Install Software Pendukung (Semua Node)

sudo apt install -y curl cifs-utils nfs-common gnupg2

Install Containerd (Semua Node)

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system
sudo apt update
sudo apt -y install containerd

Setelah terinstall kita memerlukan setting containerd nya dengan,

containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1

# lalu buka file config nya
sudo nano /etc/containerd/config.toml

Setelah terbuka kita perlu untuk mencari dengan kata, gunakan ctrl+w pada nano, lalu cari kata kunci berikut " .containerd.runtimes.runc.options " atau jika lengkapnya adalah [plugins.”io.containerd.grpc.v1.cri”.containerd.runtimes.runc.options]

Lalu kita akan menemukan bagian seperti ini

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    BinaryName = ""
    CriuImagePath = ""
    CriuPath = ""
    CriuWorkPath = ""
    IoGid = 0
    IoUid = 0
    NoNewKeyring = false
    NoPivotRoot = false
    Root = ""
    ShimCgroup = ""
    SystemdCgroup = false

Kita perlu mengganti nilai SystemdCgroup = false menjadi SystemdCgroup = true

Lalu Restart dan Enable Containerd nya dengan

sudo systemctl restart containerd
sudo systemctl enable containerd

Install Kubernetes (Semua Node)

Add Apt Repostitory, pada kali ini menggunakan versi v1.28

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

Install Kubernetes

sudo apt update
sudo apt install kubelet kubeadm kubectl -y
sudo apt-mark hold kubelet kubeadm kubectl

Setting Kubernetes Master

Buat file dengan nama menggunakan nano nano ~/kubelet.yaml, lalu isi dengan

apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: "1.28.0" # ganti dengan versi yang terinstall
controlPlaneEndpoint: "k8s-master"
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration

Lalu eksekusi menggunakan sudo kubeadm init --config ~/kubelet.yaml

Setelah proses selesai akan keluar seperti ini dan jalankan di VM Master

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

Dan juga di bawah output yang tadi akan muncul seperti ini untuk join cluster di VM Worker nya

Then you can join any number of worker nodes by running the following on each node:

kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

Join Cluster

Contoh Token Dari VM Master

sudo kubeadm join 10.10.10.25:6443 --token iusxe6.vgjcavCd32rr67xx --discovery-token-ca-cert-hash sha256:b991e7017246abcdefg99ad07fdda7d0e1ca2d045dc7cf1ead2e01fc08043 

Namun jika token dari master sudah kadaluarsa kita bisa generate kembali token dengan

sudo kubeadm token create --print-join-command

Lalu pastekan lagi token nya di node worker dan jangan lupa untuk di tambahkan dengan sudo

Setting Network

Setelah join semua worker ke master kita memelukan setingan lebih lanjut, berikut step step nya.

Network Using Calico

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml

Lalu verifikasi calico dengan

kubectl get pods -n kube-system

Jika status telah Running semua maka intalasi network telah berhasil (Proses sampai Running lumayan lama)