Instalasi Kubernetes di Ubuntu Server: Panduan Lengkap untuk Pemula

Instalasi Kubernetes di Ubuntu Server: Panduan Lengkap untuk Pemula

Apakah Anda sering pusing mengelola aplikasi berbasis kontainer yang terus berkembang dan ingin bisa deploy, skalakan, serta mengelolanya dengan mudah? Jika jawaban Anda ya, maka Anda sudah berada di tempat yang tepat. Di dunia teknologi modern, kontainerisasi adalah raja, namun mengelola ratusan, bahkan ribuan kontainer bisa menjadi mimpi buruk tanpa alat yang tepat. Di sinilah Kubernetes hadir sebagai pahlawan!

Kubernetes, atau sering disingkat K8s, adalah sistem orkestrasi kontainer open-source yang paling populer saat ini. Ia dirancang untuk mengotomatisasi proses deployment, penskalaan, dan manajemen aplikasi yang dikemas dalam kontainer. Bayangkan saja, Anda punya banyak kotak lego (kontainer aplikasi Anda), dan Kubernetes adalah instruktur yang memastikan semua lego itu terpasang dengan benar, berfungsi optimal, dan siap menyesuaikan diri jika ada penambahan atau pengurangan.

Apa Itu Kubernetes dan Mengapa Penting?

Secara sederhana, Kubernetes adalah platform yang membantu Anda menjalankan dan mengelola aplikasi yang di-deploy dalam kontainer. Ini bukan cuma tentang menjalankan satu kontainer, tapi seluruh ekosistem aplikasi yang mungkin terdiri dari banyak kontainer yang saling terhubung. Kubernetes memastikan aplikasi Anda selalu berjalan, bahkan saat ada masalah pada salah satu bagiannya.

Konsep Dasar Kubernetes

Sebelum melangkah lebih jauh, ada baiknya kita pahami beberapa istilah kunci di Kubernetes:

  • Cluster: Sekumpulan mesin (server) fisik atau virtual yang menjadi tempat Kubernetes berjalan.
  • Master Node (Control Plane): Otak dari cluster Kubernetes. Ia mengelola worker node dan semua sumber daya di dalamnya.
  • Worker Node: Mesin-mesin yang menjalankan aplikasi Anda dalam bentuk kontainer.
  • Pod: Unit terkecil yang bisa di-deploy di Kubernetes. Sebuah pod bisa berisi satu atau lebih kontainer.
  • Deployment: Objek yang menjelaskan bagaimana aplikasi Anda harus berjalan (misalnya, berapa banyak replika pod yang harus ada).
  • Service: Cara untuk mengakses aplikasi Anda di dalam cluster, baik dari dalam cluster maupun dari luar.
  • Namespace: Cara untuk membagi sumber daya cluster ke dalam kelompok-kelompok yang terisolasi secara logis.
  • ConfigMap & Secret: Objek untuk menyimpan konfigurasi dan data sensitif (seperti password) secara terpisah dari kode aplikasi.
  • Ingress: Objek yang mengatur akses HTTP/HTTPS dari luar cluster ke layanan di dalam cluster.

Manfaat Menggunakan Kubernetes

Mengapa banyak perusahaan dan pengembang beralih ke Kubernetes? Beberapa alasannya adalah:

  • Skalabilitas Otomatis: Aplikasi Anda bisa dengan mudah ditingkatkan atau diturunkan kapasitasnya sesuai kebutuhan lalu lintas.
  • Self-Healing: Jika ada pod yang mati, Kubernetes akan otomatis menggantinya dan memastikan aplikasi Anda tetap berjalan.
  • Load Balancing: Lalu lintas jaringan didistribusikan secara merata ke seluruh pod aplikasi Anda.
  • Rollouts & Rollbacks Otomatis: Memperbarui aplikasi tanpa downtime dan kemampuan untuk kembali ke versi sebelumnya jika ada masalah.
  • Portabilitas: Aplikasi Anda bisa berjalan di mana saja Kubernetes berjalan, baik di cloud publik, private cloud, maupun on-premise.

Persiapan Instalasi Kubernetes di Ubuntu Server

Untuk menginstal Kubernetes di Ubuntu Server, kita perlu menyiapkan beberapa hal. Pastikan Anda memiliki dua atau lebih mesin Ubuntu Server (bisa VM atau fisik) yang sudah ter-update. Satu akan menjadi Master Node, dan sisanya akan menjadi Worker Node.

Prasyarat Umum:

  • Minimal 2 GB RAM (disarankan 4GB ke atas)
  • Minimal 2 CPU (disarankan 4 CPU ke atas)
  • Ubuntu Server 20.04 LTS atau yang lebih baru
  • Konektivitas jaringan antar semua node
  • Setiap node harus memiliki nama host yang unik
  • Akses root atau pengguna dengan hak sudo
  • Port-port berikut harus terbuka di firewall: 6443, 2379-2380, 10250, 10251, 10252 (Master), dan 10250, 30000-32767 (Worker)

Langkah 1: Persiapan di Semua Node (Master & Worker)

Pertama, kita akan menonaktifkan swap dan memperbarui sistem operasi. Ini penting karena Kubernetes tidak bekerja dengan baik jika swap aktif.

sudo swapoff -a

Agar perubahan ini permanen, edit file /etc/fstab dan tambahkan tanda pagar (#) di depan baris yang berisi 'swap'.

sudo sed -i '/ swap / s/^/#/' /etc/fstab

Selanjutnya, perbarui paket dan instal beberapa dependensi yang diperlukan.

sudo apt update && sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

Langkah 2: Mengaktifkan Modul Kernel yang Diperlukan

Kubernetes memerlukan beberapa modul kernel Linux agar bisa berjalan dengan baik. Aktifkan modul overlay dan br_netfilter:

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

sudo modprobe overlay
sudo modprobe br_netfilter

Kemudian, atur parameter sysctl yang dibutuhkan:

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sudo sysctl --system

Langkah 3: Instalasi Container Runtime (containerd)

Kubernetes membutuhkan sebuah container runtime. Pada panduan ini, kita akan menggunakan containerd yang merupakan standar industri dan direkomendasikan untuk produksi.

Tambahkan repositori Docker (yang menyediakan paket containerd):

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Instal containerd:

sudo apt update
sudo apt install -y containerd.io

Konfigurasikan containerd agar menggunakan systemd sebagai cgroup driver:

sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

sudo systemctl restart containerd
sudo systemctl enable containerd

Verifikasi bahwa containerd berjalan dengan normal:

sudo systemctl status containerd

Langkah 4: Instalasi kubeadm, kubelet, dan kubectl

Tiga komponen inti Kubernetes yang perlu kita instal adalah:

  • kubeadm: Alat untuk melakukan bootstrap cluster Kubernetes.
  • kubelet: Agen yang berjalan di setiap node dan bertanggung jawab menjalankan kontainer.
  • kubectl: Antarmuka baris perintah untuk berinteraksi dengan cluster Kubernetes.

Tambahkan kunci GPG dan repositori Kubernetes:

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

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

Instal ketiga paket tersebut:

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

Perintah apt-mark hold digunakan agar paket-paket tersebut tidak ter-upgrade secara otomatis, yang dapat menyebabkan inkonsistensi versi di dalam cluster.

Inisialisasi Master Node

Langkah berikut hanya dilakukan di Master Node. Inisialisasi cluster menggunakan kubeadm init. Ganti 10.244.0.0/16 jika Anda menggunakan plugin jaringan selain Flannel.

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<IP_MASTER_NODE>

Ganti <IP_MASTER_NODE> dengan alamat IP server master Anda. Proses ini akan memakan waktu beberapa menit. Setelah selesai, Anda akan melihat output yang berisi perintah kubeadm joinsimpan perintah ini baik-baik, karena akan digunakan untuk menambahkan worker node.

Konfigurasi kubectl untuk Pengguna Biasa

Agar bisa menggunakan kubectl tanpa sudo, jalankan perintah berikut:

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

Verifikasi bahwa master node sudah terkonfigurasi:

kubectl get nodes

Anda akan melihat master node dengan status NotReady — ini normal karena plugin jaringan belum diinstal.

Instalasi Plugin Jaringan (CNI)

Kubernetes membutuhkan plugin jaringan (CNI - Container Network Interface) agar pod-pod bisa saling berkomunikasi. Kita akan menggunakan Flannel, salah satu plugin yang paling mudah dikonfigurasi.

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

Tunggu beberapa saat, lalu cek status node:

kubectl get nodes

Status master node seharusnya sekarang berubah menjadi Ready. Jika belum, tunggu 1-2 menit dan coba lagi.

Menambahkan Worker Node ke Cluster

Langkah ini dilakukan di setiap Worker Node. Gunakan perintah kubeadm join yang Anda dapatkan saat inisialisasi master node tadi. Perintahnya akan terlihat seperti ini:

sudo kubeadm join <IP_MASTER>:6443 --token <token> \
    --discovery-token-ca-cert-hash sha256:<hash>

Jika Anda lupa menyimpan perintah tersebut, Anda bisa membuatnya kembali dari master node dengan:

kubeadm token create --print-join-command

Setelah worker node bergabung, verifikasi dari master node:

kubectl get nodes

Semua node seharusnya kini berstatus Ready.

Menguji Cluster Kubernetes

Setelah cluster siap, mari kita uji dengan mendeploy aplikasi sederhana, misalnya Nginx.

Membuat Deployment

kubectl create deployment nginx-test --image=nginx --replicas=2

Cek status deployment:

kubectl get deployments
kubectl get pods

Mengekspos Deployment sebagai Service

kubectl expose deployment nginx-test --port=80 --type=NodePort

Cek service yang baru dibuat dan cari nomor port-nya:

kubectl get services

Anda akan melihat sebuah NodePort (biasanya di rentang 30000-32767). Akses Nginx dari browser dengan membuka http://<IP_WORKER_NODE>:<NodePort>. Jika halaman selamat datang Nginx muncul, selamat! Cluster Kubernetes Anda berhasil berjalan.

Membersihkan Resource Percobaan

kubectl delete service nginx-test
kubectl delete deployment nginx-test

Perintah kubectl yang Sering Digunakan

Berikut adalah beberapa perintah kubectl yang akan sering Anda gunakan dalam keseharian mengelola cluster Kubernetes:

  • kubectl get pods -A — Menampilkan semua pod di semua namespace.
  • kubectl get nodes — Menampilkan semua node dalam cluster.
  • kubectl describe pod <nama-pod> — Menampilkan detail informasi sebuah pod, berguna untuk debugging.
  • kubectl logs <nama-pod> — Menampilkan log dari sebuah pod.
  • kubectl exec -it <nama-pod> -- /bin/bash — Masuk ke dalam shell sebuah kontainer yang sedang berjalan.
  • kubectl apply -f <file.yaml> — Menerapkan konfigurasi dari file YAML.
  • kubectl delete -f <file.yaml> — Menghapus resource berdasarkan file YAML.
  • kubectl scale deployment <nama> --replicas=5 — Menskalakan deployment menjadi 5 replika.
  • kubectl rollout status deployment/<nama> — Memantau status rollout sebuah deployment.
  • kubectl rollout undo deployment/<nama> — Melakukan rollback ke versi sebelumnya.

Tips & Troubleshooting Umum

Pod Stuck di Status "Pending"

Ini biasanya terjadi karena node tidak memiliki cukup sumber daya (CPU/RAM), atau terdapat masalah pada plugin jaringan. Gunakan perintah berikut untuk mendiagnosis:

kubectl describe pod <nama-pod>

Perhatikan bagian Events di bagian bawah output untuk petunjuk masalahnya.

Node Berstatus "NotReady"

Cek kondisi node secara detail:

kubectl describe node <nama-node>

Pastikan juga layanan kubelet dan containerd berjalan di node tersebut:

sudo systemctl status kubelet
sudo systemctl status containerd

Reset Cluster (Jika Diperlukan)

Jika Anda perlu memulai dari awal, jalankan perintah berikut di setiap node:

sudo kubeadm reset -f
sudo rm -rf /etc/kubernetes /var/lib/etcd /var/lib/kubelet $HOME/.kube

Kesimpulan

Selamat! Anda telah berhasil menginstal dan mengkonfigurasi cluster Kubernetes di Ubuntu Server. Ini adalah pencapaian yang luar biasa, terutama bagi pemula di dunia orkestrasi kontainer. Dengan cluster yang sudah berjalan, Anda kini memiliki fondasi yang kuat untuk mulai mengeksplorasi berbagai fitur canggih Kubernetes seperti Horizontal Pod Autoscaler, Persistent Volumes, Ingress Controller, Helm Charts, dan masih banyak lagi.

Ingat, perjalanan menguasai Kubernetes itu bertahap. Mulailah dengan memahami konsep dasar, lakukan eksperimen dengan deployment sederhana, dan perlahan tingkatkan kompleksitasnya seiring dengan bertambahnya pemahaman Anda. Komunitas Kubernetes juga sangat aktif dan dokumentasinya (kubernetes.io/docs) sangat lengkap dan selalu diperbarui.

Jika Anda menemui masalah atau memiliki pertanyaan, jangan ragu untuk meninggalkan komentar di bawah. Selamat belajar dan bereksperimen!

Posting Komentar

Subscribe Youtube Saya Untuk Tutorial Lainnya Subscribe