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:
- Container & Pod
- Container adalah unit kecil yang berisi aplikasi beserta dependensinya.
- Pod adalah unit terkecil di Kubernetes yang bisa berisi satu atau lebih container.
- Node & Cluster
- Node adalah server tempat pod berjalan.
- Cluster adalah kumpulan beberapa node yang dikelola oleh Kubernetes.
- Deployment & Service
- Deployment mengatur bagaimana aplikasi dijalankan dan diperbarui.
- Service memungkinkan komunikasi antar-pod atau dari luar ke dalam cluster.
- 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
- Otomatisasi – Mengelola aplikasi tanpa harus mengatur server manual.
- Skalabilitas – Bisa menyesuaikan kapasitas aplikasi sesuai kebutuhan.
- Toleransi Kesalahan – Jika satu pod mati, Kubernetes akan menggantinya otomatis.
- 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)