Membangun dan mengelola aplikasi modern seringkali melibatkan penggunaan kontainer untuk portabilitas dan skalabilitas. Kubernetes hadir untuk menyederhanakan proses orkestrasi kontainer, dan Pod adalah fondasi dari sistem ini. Memahami apa itu Pod sangat penting bagi siapa pun yang ingin bekerja dengan Kubernetes.
Dalam artikel ini, kita akan membahas secara mendalam apa itu Pod, bagaimana ia bekerja, dan bagaimana ia berkontribusi pada skalabilitas, ketersediaan tinggi, dan efisiensi dalam deployment aplikasi.
Apa itu Pod?
Dalam Kubernetes, Pod adalah unit terkecil yang dapat dideploy dan dijalankan. Pod biasanya terdiri dari satu atau lebih kontainer yang berjalan secara bersamaan dalam satu node. Untuk mempermudah pemahaman, Anda dapat menganggap Pod seperti sebuah “bungkus” atau “kapsul” yang mengelompokkan kontainer-kontainer yang saling berhubungan.
Bungkus ini bisa berisi satu atau lebih kontainer, yang masing-masing menjalankan sebuah aplikasi atau bagian dari aplikasi. Kontainer-kontainer di dalam bungkus ini berbagi sumber daya yang sama, seperti jaringan dan penyimpanan. Jadi, alih-alih men-deploy kontainer secara individual, Kubernetes mengelola Pod sebagai satu unit. Analogi bungkus ini membantu kita memahami beberapa poin penting tentang Pod:
Pengelompokan Kontainer
Pod memungkinkan pengelompokan kontainer yang saling berhubungan dan memerlukan sumber daya yang sama. Sebagai contoh, sebuah aplikasi web mungkin memerlukan satu kontainer untuk server web dan kontainer lain untuk database. Dengan menyatukan keduanya dalam satu Pod, komunikasi antar kontainer dapat dilakukan dengan mudah melalui localhost sambil berbagi penyimpanan yang sama.
Berbagi Sumber Daya
Seperti yang disebutkan, kontainer dalam satu Pod berbagi sumber daya seperti network namespace (yang berarti mereka berbagi IP address dan port) dan storage (melalui volume). Ini memungkinkan kontainer untuk berinteraksi dan bekerja sama dengan efisien.
Unit Deployment
Kubernetes tidak men-deploy kontainer secara langsung, melainkan men-deploy Pod. Ini berarti bahwa siklus hidup kontainer dikelola oleh Pod. Ketika sebuah Pod di-deploy, Kubernetes akan memastikan bahwa semua kontainer di dalamnya berjalan dengan benar. Jika salah satu kontainer gagal, Kubernetes akan mencoba untuk memulihkannya atau men-deploy Pod baru.
Dengan kata lain, Pod adalah abstraksi yang menyederhanakan pengelolaan kontainer dalam Kubernetes. Ia menyediakan lingkungan yang terisolasi dan terkontrol untuk menjalankan aplikasi berbasis kontainer, sambil memfasilitasi komunikasi dan berbagi sumber daya antar kontainer yang saling terkait. Konsep ini sangat penting untuk memahami bagaimana Kubernetes mengorkestrasi aplikasi dalam skala besar.
Komponen Pod
Setelah memahami definisi dan analogi Pod, penting juga untuk mengetahui komponen-komponen yang membentuk sebuah Pod. Secara garis besar, ada tiga komponen utama dalam sebuah Pod: kontainer, shared resources (sumber daya yang dibagi), dan pause container (kadang disebut juga infra container).
Kontainer
Kontainer adalah komponen inti dari Pod. Seperti yang telah dijelaskan, Pod dapat berisi satu atau lebih kontainer. Setiap kontainer menjalankan sebuah aplikasi atau bagian dari aplikasi. Kontainer dalam Pod biasanya menggunakan container image seperti Docker image.
Meskipun Pod dapat berisi beberapa kontainer, umumnya praktik terbaik adalah menjalankan satu aplikasi utama per Pod, kecuali jika ada kontainer pendukung (sidecar container) yang sangat erat kaitannya dengan aplikasi utama tersebut (misalnya, untuk logging atau monitoring).
Shared Resources
Kontainer dalam Pod berbagi network namespace yang sama. Artinya, mereka memiliki IP address dan port yang sama pada node. Ini memungkinkan kontainer untuk berkomunikasi satu sama lain melalui localhost dengan sangat efisien. Misalnya, jika sebuah Pod berisi kontainer web server dan kontainer database, web server dapat mengakses database melalui localhost:port_database tanpa perlu konfigurasi jaringan yang rumit.
Pod juga dapat memiliki satu atau lebih volume yang di-mount dan digunakan bersama oleh kontainer di dalamnya. Volume menyediakan penyimpanan persisten yang terpisah dari siklus hidup kontainer. Ini berarti data yang disimpan dalam volume akan tetap ada meskipun kontainer di-restart atau di-replace.
Pause Container (Infra Container)
Pause Container (Infra Container) adalah kontainer khusus yang pertama kali dibuat dalam setiap Pod. Kontainer ini memegang network namespace untuk Pod. Semua kontainer lain di dalam Pod bergabung ke network namespace yang dibuat oleh pause container.
Dengan kata lain, pause container adalah fondasi jaringan untuk Pod. Karena semua kontainer berbagi network namespace yang sama dengan pause container, mereka dapat berkomunikasi melalui localhost.
Selain itu, pause container juga memfasilitasi shared storage antar kontainer dalam Pod. Walaupun sering tidak disadari, pause container memegang peranan penting dalam arsitektur Pod.
Bagaimana Pod Bekerja?
Ketika Anda membuat sebuah Pod (biasanya melalui Deployment, ReplicaSet, atau StatefulSet), Kubernetes akan menempatkannya (menjadwalkannya) di salah satu node yang tersedia dalam klaster. Proses penjadwalan ini dilakukan oleh scheduler, yang mempertimbangkan berbagai faktor seperti ketersediaan sumber daya (CPU, memori), node affinity (preferensi penempatan pada node tertentu), dan batasan-batasan lainnya.
Setelah Pod dijadwalkan ke sebuah node, kubelet pada node tersebut mengambil alih. Kubelet bertanggung jawab untuk:
- Membuat pause container: Ini adalah langkah pertama. Pause container akan membuat network namespace untuk Pod.
- Membuat kontainer-kontainer lain: Kubelet kemudian membuat kontainer-kontainer yang didefinisikan dalam spesifikasi Pod, dan menghubungkannya ke network namespace yang telah dibuat oleh pause container.
- Me-mount volume: Jika Pod mendefinisikan volume, kubelet akan me-mount volume tersebut ke kontainer yang membutuhkannya.
- Memantau status kontainer: Kubelet secara terus-menerus memantau status kontainer di dalam Pod. Jika salah satu kontainer gagal, kubelet akan mencoba untuk me-restart-nya.
Komunikasi antar kontainer dalam Pod berjalan sangat efisien, karena mereka berbagi network namespace. Dengan demikian, kontainer dapat saling berkomunikasi menggunakan localhost dan memanfaatkan port yang berbeda tanpa pengaturan jaringan tambahan. Pendekatan ini mengurangi overhead jaringan dan memastikan interaksi antar komponen aplikasi tetap cepat dan sederhana.
Peran Pod dalam Orkestrasi Aplikasi
Peran Pod dalam orkestrasi aplikasi di Kubernetes sangat krusial, karena Pod merupakan unit dasar yang digunakan Kubernetes untuk mengelola dan menjalankan aplikasi. Berikut beberapa peran penting Pod dalam orkestrasi aplikasi:
Deployment Aplikasi
Pod adalah unit deployment terkecil di Kubernetes. Artinya, ketika Anda ingin menjalankan sebuah aplikasi, Anda akan men-deploy Pod yang berisi kontainer aplikasi tersebut. Kubernetes akan memastikan Pod tersebut berjalan di salah satu node dalam klaster. Ini menyederhanakan proses deployment karena Anda hanya perlu berurusan dengan satu unit, yaitu Pod, alih-alih mengelola kontainer secara individual.
Skalabilitas
Pod memungkinkan aplikasi untuk diskalakan dengan mudah. Kubernetes dapat membuat beberapa replika Pod yang sama untuk menangani peningkatan traffic atau beban kerja. Proses ini disebut scaling out. Sebaliknya, jika beban kerja menurun, Kubernetes dapat mengurangi jumlah replika Pod (scaling in). Skalabilitas ini penting untuk memastikan aplikasi tetap responsif dan tersedia meskipun terjadi fluktuasi traffic.
High Availability dan Fault Tolerance
Jika sebuah node tempat Pod berjalan mengalami masalah atau mati, Kubernetes akan secara otomatis menjadwalkan ulang Pod tersebut ke node lain yang sehat. Mekanisme ini memastikan aplikasi tetap berjalan dan tersedia meskipun terjadi kegagalan infrastruktur. Dengan menggunakan beberapa replika Pod yang tersebar di beberapa node, Anda dapat mencapai tingkat ketersediaan yang sangat tinggi.

Manfaat Menggunakan Pod
Pengelolaan Kontainer yang Efisien
Pod menyederhanakan pengelolaan kontainer dengan mengelompokkannya ke dalam unit logis. Alih-alih mengelola setiap kontainer secara terpisah, Anda hanya perlu berurusan dengan Pod. Ini mempermudah proses deployment, scaling, dan monitoring. Misalnya, untuk menskalakan aplikasi, Anda cukup menskalakan jumlah replika Pod, bukan kontainer individual.
Isolasi Sumber Daya
Pod menyediakan tingkat isolasi sumber daya antar aplikasi. Meskipun kontainer dalam satu Pod berbagi beberapa sumber daya (seperti network namespace), Pod itu sendiri terisolasi dari Pod lain di node yang sama. Isolasi ini mencegah satu aplikasi mengganggu aplikasi lain dan memastikan setiap aplikasi mendapatkan sumber daya yang dialokasikan
Portabilitas
Pod merupakan unit deployment yang portabel. Artinya, Pod dapat dijalankan di berbagai lingkungan Kubernetes, baik di cloud, on-premise, maupun hybrid cloud, asalkan lingkungan tersebut mendukung Kubernetes. Ini mempermudah migrasi aplikasi antar lingkungan dan mengurangi ketergantungan pada infrastruktur tertentu.