Kubernetes adalah platform orkestrasi container open-source yang digunakan untuk mengotomatisasi deployment, scaling, dan pengelolaan aplikasi yang berjalan dalam container. Dengan Kubernetes, kita dapat dengan mudah mengelola aplikasi yang terdiri dari banyak container, menyediakan platform yang sangat skalabel, efisien, dan dapat dipelihara. Kubernetes memungkinkan kita untuk menjalankan aplikasi dalam lingkungan yang terdistribusi, memantau statusnya, dan mengelola update serta scaling secara otomatis.
Kubernetes memiliki beberapa komponen utama yang bekerja sama untuk mengelola dan mengontrol cluster kita. Diantaranya adalah:
kube-api-server
API Server adalah titik interaksi utama antara kita (pengguna atau sistem lain) dengan Kubernetes. Semua perintah yang kita berikan ke Kubernetes, baik untuk mendirikan pod, deployment, scaling, dan konfigurasi lainnya, akan dikirim melalui API Server ini. Kube-api-server memastikan komunikasi yang konsisten dan aman di seluruh komponen dalam cluster.
etcd
Etcd adalah database distributed yang menyimpan seluruh data konfigurasi dan state dari Kubernetes cluster kita. Setiap perubahan dalam status atau konfigurasi cluster (seperti pengaturan pod, deployment, atau service) disimpan dalam etcd. Data ini sangat penting karena Kubernetes mengandalkan etcd untuk menjaga konsistensi dan integritas cluster.
kube-scheduler
Kube-scheduler adalah komponen yang bertugas untuk memutuskan di mana pod akan dijalankan dalam cluster. Ia memilih node yang sesuai berdasarkan berbagai faktor, seperti ketersediaan resource, aturan penjadwalan, dan toleransi node. Dengan scheduler ini, kita bisa memastikan aplikasi kita berjalan di tempat yang tepat.
kube-controller-manager
Kube-controller-manager bertugas untuk menjaga agar kondisi yang diinginkan dalam cluster tetap sesuai. Misalnya, jika kita ingin memastikan bahwa ada 3 replika pod yang berjalan pada setiap saat, controller akan terus memonitor dan memastikan bahwa jumlah pod tetap terjaga dengan melakukan penambahan atau pengurangan jika diperlukan.
cloud-controller-manager
Jika kita menjalankan Kubernetes di atas platform cloud (seperti AWS, Azure, atau Google Cloud), cloud-controller-manager mengelola interaksi Kubernetes dengan penyedia layanan cloud. Misalnya, ia bertanggung jawab untuk mengelola node dalam cloud atau integrasi storage dengan cloud provider.
Node adalah mesin tempat aplikasi (dalam bentuk pod) dijalankan. Setiap node dalam Kubernetes memiliki beberapa komponen yang memastikan bahwa aplikasi kita berjalan dengan baik:
kubelet
Kubelet adalah agen yang berjalan di setiap node. Tugas utamanya adalah memastikan bahwa pod yang didefinisikan dalam Kubernetes cluster berjalan dengan baik di node tersebut. Kubelet memonitor status container dan pod, serta memastikan bahwa semuanya sesuai dengan konfigurasi yang sudah ditentukan.
kube-proxy
Kube-proxy berfungsi untuk menangani lalu lintas jaringan masuk dan keluar dari pod. Ia juga melakukan load balancing untuk memastikan bahwa trafik dialihkan dengan merata ke pod yang tersedia. Misalnya, jika kita memiliki beberapa pod yang menyediakan layanan yang sama, kube-proxy akan mengatur agar trafik yang masuk dapat dibagi dengan baik antara pod-pod tersebut.
container manager
Container manager bertugas mengelola lifecycle container dalam node. Kubernetes mendukung berbagai container manager, seperti Docker, containerd, dan CRI-O. Komponen ini mengurus pembuatan, pengelolaan, dan penghapusan container dalam node.
Node adalah mesin (baik mesin fisik atau virtual) dalam Kubernetes yang menjalankan pod-pod. Node bertanggung jawab untuk menyediakan resource (CPU, memori, penyimpanan) yang dibutuhkan oleh pod untuk berfungsi. Dalam sebuah cluster, kita dapat memiliki beberapa node yang masing-masing memiliki pod yang berbeda.
Pod adalah unit terkecil yang dapat dideploy dalam Kubernetes. Pod bisa berisi satu atau lebih container yang berjalan bersama di dalam satu lingkungan. Container-container dalam pod ini berbagi IP, volume storage, dan namespace, yang memungkinkan mereka berkomunikasi dengan lancar.
Labels adalah metadata yang digunakan untuk memberi identifikasi atau tanda pada objek-objek di Kubernetes, seperti pod, service, replication controller, dan lainnya. Dengan menggunakan labels, kita bisa mengelompokkan objek-objek tersebut berdasarkan kriteria tertentu, serta melakukan pencarian atau seleksi.
Manfaat Labels:
Contoh penggunaan label pada pod:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-labels
labels:
app: nginx
environment: production
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Untuk menampilkan label pada pod, kita dapat menggunakan perintah berikut:
$ kubectl get pods --show-labels
Untuk mencari pod berdasarkan label:
$ kubectl get pods -l environment=production
Annotations berfungsi untuk menambahkan metadata atau informasi lebih rinci pada objek, namun tidak seperti labels, annotations tidak dapat difilter atau dicari. Biasanya, annotations digunakan untuk menyimpan informasi besar atau deskriptif, seperti metadata aplikasi, versi, atau informasi debug.
Contoh penggunaan annotation pada pod:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-annotation
annotations:
description: Aplikasi ini dikembangkan oleh tim ceker-ayam
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Untuk melihat annotation pada pod, kita bisa menggunakan:
$ kubectl describe pod nginx-pod-annotation
Jika kita ingin menambahkan annotation:
$ kubectl annotate pod <pod-name> key="value"
Namespace digunakan untuk mengelompokkan dan memisahkan berbagai resource dalam cluster Kubernetes. Ini sangat berguna terutama ketika kita memiliki banyak tim yang bekerja dalam satu cluster atau ketika kita ingin memisahkan berbagai lingkungan (seperti development, staging, dan production).
Kapan menggunakan Namespace:
Contoh melihat namespaces:
$ kubectl get namespaces
Jika kita membuat resources tanpa menentukan namespace, Kubernetes akan menempatkannya pada namespace default.
Untuk melihat resource dalam namespace tertentu:
$ kubectl get pods --namespace <namespace-name>
Probe adalah mekanisme yang digunakan untuk memeriksa status kesehatan aplikasi dalam pod. Tiga jenis probe yang digunakan dalam Kubernetes adalah:
Liveness Probe
Digunakan untuk mengecek apakah aplikasi dalam pod masih berjalan. Jika liveness probe gagal, Kubernetes akan merestart pod tersebut.
Readiness Probe
Menentukan apakah pod siap menerima trafik. Jika readiness probe gagal, Kubernetes akan menghentikan pengiriman trafik ke pod tersebut hingga probe berhasil.
Startup Probe
Startup probe digunakan untuk aplikasi yang membutuhkan waktu lama untuk startup. Jika aplikasi belum siap, Kubernetes tidak akan menjalankan pengecekan liveness atau readiness terlalu cepat.
Jenis pengecekan probe: