Kubernetes 101: Pod
Apa itu Pod di sistem Kubernets? Jelajahi definisi, kegunaan, dan semua yang ingin kamu ketahui tentang Pod di sini!
Pod adalah unit terkecil yang dapat disebarkan di Kubernetes yang dapat dibuat, dijadwalkan, dan dikelola.
Perkenalan Pod
Dalam ekosistem digital yang berkembang pesat saat ini, bisnis berupaya untuk meningkatkan mekanisme penerapan aplikasi mereka untuk meningkatkan kinerja, efisiensi, dan skalabilitas.
Sebagai bagian dari upaya tersebut, Kubernetes telah muncul sebagai orkestrator penting yang menyederhanakan pengelolaan aplikasi dalam container.
Artikel ini membahas tentang packaging apps di Kubernetes, terutama membahas tentang Pod, hubungan mendasar antara Container, Pod, dan Deployment, serta Declarative Models dan Desired State.
Definisi dan Kegunaan Pod
Pod adalah unit terkecil yang dapat diterapkan di Kubernetes yang dapat manage secara otomatis. Pod dapat berisi berbagai container yang berbagi resource dan selalu ditempatkan dan dijadwalkan bersama pada node yang sama.
Penggunaan Pod memungkinkan manajemen aplikasi yang mengandalkan beberapa container dengan mudah, memastikan bahwa container terkait selalu digunakan bersama-sama dan memiliki akses ke resource yang sama.
Pod Architecture
Pod mengandung container - atau sekelompok container yang saling terhubung, storage resources, unit network IP, dan opsi yang mengatur bagaimana container harus dijalankan.
Setiap Pod dimaksudkan untuk menjalankan satu instance dari aplikasi tertentu. Oleh karena itu, alih-alih menjalankan banyak container dalam satu Pod, Kubernetes menyarankan untuk menjalankan setiap container dalam Pod-nya sendiri, dengan tambahan beberapa container jika diperlukan.
Interaksi Antar Kontainer dalam Sebuah Pod
Kontainer di dalam sebuah Pod memiliki hubungan simbiosis. Mereka berbagi namespace jaringan yang sama, yang berarti mereka berbagi IP address dan port space, dan dapat berkomunikasi satu sama lain menggunakan alamat localhost. Mereka juga dapat berbagi storage volume, yang memungkinkan data diakses dengan lancar oleh semua container di dalamnya.
Meskipun sebuah Pod dapat berisi lebih dari satu container, namun merupakan hal yang umum untuk memiliki hanya sebuah container di dalam sebuah Pod, kecuali jika ada kebutuhan untuk container yang ditempatkan di satu lokasi yang harus berfungsi sebagai satu unit.
Contohnya ketika kamu mungkin ingin menggunakan beberapa container dalam satu Pod adalah ketika satu container adalah main worker dan yang lainnya adalah “sidecar” yang mendukung main worker, mungkin dengan data seeding, proxy koneksi jaringan, atau mengelola log.
Setiap container di dalam sebuah Pod terisolasi, berjalan di lingkungannya masing-masing, namun mereka berbagi namespace tertentu, yang memungkinkan komunikasi antar-proses tanpa overhead of data dan network communication.
The Pod Lifecycle
Sebuah Pod dibuat dengan unique ID (UID), dan mempertahankan UID-nya sepanjang siklus hidupnya. Setelah sebuah Pod dijadwalkan pada sebuah node, maka Pod akan tetap berada pada node tersebut sampai eksekusinya dihentikan, objek Pod tersebut dihapus, Pod tersebut dikeluarkan karena kekurangan sumber daya, atau node tersebut mengalami kegagalan.
Jika sebuah node mati sebelum Pod di dalamnya dihapus, maka Pod tersebut dijadwalkan untuk dihapus. Jika sebuah node dihapus secara paksa, Pod pada node tersebut dijadwalkan untuk dihapus oleh pengontrol node. Ingatlah bahwa Kubernetes tidak secara otomatis mengelola atau “menyembuhkan” Pod.
Jika sebuah Pod gagal atau node tempat Pod tersebut berjalan mati, dan Pod tersebut merupakan bagian dari konstruksi yang tingkatannya lebih tinggi seperti ReplicaSet atau Deployment, maka konstruksi yang tingkatannya lebih tinggi tersebut akan membuat sebuah Pod baru untuk menggantikan Pod yang gagal.
- Creation of a Pod: Pod dapat dibuat secara langsung atau tidak langsung. Pembuatan langsung melibatkan penggunaan objek Pod di Kubernetes API, sementara pembuatan tidak langsung melibatkan pengontrol tingkat yang lebih tinggi, seperti ReplicaSet, Jobs, atau DaemonSets.
- Running and Maintaining a Pod: Setelah sebuah Pod dibuat, maka Pod tersebut diberi unique IP adress dan container yang ditentukan akan diinisialisasi. Pod-pod tersebut akan terus ada sampai mereka dihapus secara eksplisit. Kubernetes tidak membuat ulang Pod jika Pod tersebut dihapus atau jika node hostingnya gagal.
- Deleting a Pod: Ketika sebuah Pod dihapus, semua containernya akan dihentikan dengan baik. Kubernetes akan memastikan bahwa sistem mematuhi masa tenggang penghentian yang ditentukan pengguna.
Memahami Status dan Kondisi Pod
Status Pod menyediakan informasi tingkat tinggi tentang apa yang terjadi di dalam sebuah Pod dalam siklus hidupnya. Ini mencakup status seperti Pending, Running, Succeeded, Failed, dan Unknown. Kondisi Pod mencakup PodScheduled, ContainersReady, Initialized, dan Ready yang memberikan informasi lebih terperinci tentang status Pod.
Operasi Pod dan Kubernetes
Pod adalah unit komputasi terkecil yang dapat diterapkan di Kubernetes, dan hal ini memiliki beberapa implikasi signifikan terhadap cara pengoperasian Kubernetes.
Scaling and Load Balancing
Di Kubernetes, scaling (menambah atau mengurangi jumlah replika suatu aplikasi) dan load balancing (mendistribusikan lalu lintas jaringan secara merata ke sekumpulan Pod) dilakukan di tingkat Pod.
Saat kamu ingin meningkatkan skala suatu aplikasi, kamu tidak perlu menambahkan lebih banyak container ke dalam sebuah Pod; sebaliknya, kamu menambahkan lebih banyak Pod, masing-masing dengan instance container-nya sendiri.
Saat menyiapkan Kubernetes Services (titik akhir jaringan stabil yang merutekan lalu lintas ke sekumpulan Pod), Kubernetes Services tidak merutekan lalu lintas ke container tertentu. Sebaliknya, ia mengirimkan lalu lintas ke Pod, dan menjadi tanggung jawab Pod untuk mengelola container yang ada di dalamnya.
Pod Scheduling
Kubernetes memiliki scheduler canggih yang dapat menentukan node mana pada sebuah Pod yang akan dijadwalkan, berdasarkan berbagai faktor seperti resource availability, user-defined constraints, serta aturan afinitas dan anti-afinitas.
Setiap Pod dijadwalkan secara individual, dan setelah Pod berjalan di sebuah node, maka Pod tersebut tidak dapat dipindahkan ke node yang berbeda kecuali jika Pod tersebut dimatikan dan sebuah Pod baru telah dijadwalkan.
Health Checks
Kubernetes juga dapat melakukan health checks di tingkat Pod, dengan probe liveness dan readiness. Probe liveness memeriksa apakah suatu Pod masih berjalan, dan jika gagal, Kubernetes akan memulai ulang Pod tersebut.
Probe readiness memeriksa apakah sebuah Pod siap melayani lalu lintas, dan jika gagal, Kubernetes akan berhenti mengirimkan lalu lintas ke Pod hingga melewati pemeriksaan kesiapan lagi.
Pentingnya Pod dalam Kubernetes Architecture
Pod mungkin tampak seperti lapisan kompleksitas lain dalam sistem Kubernetes, tetapi Pod merupakan bagian fundamental dari system architecture. Dengan menyediakan konteks agar container dapat berjalan bersama dengan shared resources, Pod memungkinkan pola arsitektur aplikasi yang kuat.
Meskipun container adalah wadah yang menjalankan aplikasi sebenarnya, Pod adalah komponen operasional utama dalam Kubernetes ecosystem. Memahami Pod, Pod lifecycle, dan interaksinya dengan objek Kubernetes lainnya sangat penting untuk menjalankan aplikasi secara efektif di Kubernetes.
Pod-lah yang mewakili “unit of deployment” dalam sistem Kubernetes, dan semua operasi penjadwalan dan penskalaan dilakukan pada level Pod, bukan pada container individual.
Kesimpulannya, Pod, sebagai unit terkecil dari operasi Kubernetes, merupakan esensi penting dalam Kubernetes, yang bertindak sebagai fondasi bagi konsep tingkat yang lebih tinggi seperti Deployment, ReplicaSet, dan Services. Dalam banyak hal, Pod lebih seperti jantung di sistem Kubernetes.