Memahami Pod pada Podman
Memahami Pod pada Podman

Memahami Pod pada Podman

Dalam dunia kontainer modern, istilah “Pod” sudah tidak asing lagi, terutama bagi mereka yang familiar dengan Kubernetes.

Pod adalah unit terkecil yang dapat di-deploy di Kubernete, ia adalah sebuah grup yang terdiri dari satu atau beberapa kontainer yang berbagi penyimpanan (volume) dan jaringan, termasuk alamat IP,  port dan namespace.

Apa itu Pod dalam Podman?

Pod pada Podman adalah unit terkecil yang mengelompokkan satu atau lebih kontainer berbagi sumber daya. Mirip docker-compose skala kecil, tapi dengan integrasi kernel lebih erat.

Podman membuat “kontainer infrastruktur” (infra container) yang pertama dijalankan dan terakhir dihentikan. Ia memegang namespace jaringan, IPC, dan UTS (hostname) untuk digunakan bersama kontainer lain.

Kontainer infra biasanya hanya “sleep” untuk mempertahankan namespace tetap hidup.

Pod pada Podman
Pod pada Podman

Membuat Pod di Podman

Podman pod –help digunakan untuk menampilkan halaman bantuan (help) untuk manajemen Pod di Podman.

Menampilkan daftar sub-perintah yang tersedia, sintaks penggunaan, dan penjelasan singkat tentang cara mengelola grup kontainer (pod) yang berbagi resource yang sama.

podman pod --help
Output:

Manage pods

Description:
  Pods are a group of one or more containers sharing the same network, pid and ipc namespaces.

Usage:
  podman pod [command]

Available Commands:
  clone       Clone an existing pod
  create      Create a new empty pod
  exists      Check if a pod exists in local storage
  inspect     Display a pod configuration
  kill        Send the specified signal or SIGKILL to containers in pod
  logs        Fetch logs for pod with one or more containers
  pause       Pause one or more pods
  prune       Remove all stopped pods and their containers
  ps          List pods
  restart     Restart one or more pods
  rm          Remove one or more pods
  start       Start one or more pods
  stats       Display a live stream of resource usage statistics for the containers in one or more pods
  stop        Stop one or more pods
  top         Display the running processes of containers in a pod
  unpause     Unpause one or more pods

Membuat sebuah Pod kosong baru dengan nama geeks-golang-pod. Pod adalah grup kontainer yang berbagi namespace network, PID, dan IPC, sehingga kontainer-kontainer di dalamnya dapat berkomunikasi via localhost dan berbagi resource.

podman pod create --name geeks-golang-pod

Perintah ini akan mengembalikan ID penuh pod yang baru dibuat (contoh: c5344f5fb68ab9cdd7573c8174db9fdb1ea7703050c147c9986735c8b253ab66). Saat ini pod masih kosong dan belum berjalan statusnya Created. Kontainer dapat ditambahkan ke dalam pod ini .

Menampilkan daftar (list) semua Pod yang ada di sistem lokal beserta informasi ringkasnya.

podman pod ls
Output:

POD ID        NAME              STATUS      CREATED             INFRA ID      # OF CONTAINERS
c5344f5fb68a  geeks-golang-pod  Created     About a minute ago  8273cb56cefb  1

Menampilkan daftar semua kontainer (-a = all, termasuk yang sudah berhenti) beserta informasi Pod tempat kontainer tersebut berada (–pod). Ini adalah cara cepat untuk melihat relasi antara kontainer dan pod-nya.

podman ps -a --pod

Menambahkan Container kedalam Pod

Menjalankan sebuah kontainer baru dari image geeks-golang di dalam pod yang sudah ada bernama geeks-golang-pod. Kontainer akan berjalan di background (detached) dengan alokasi pseudo-TTY.

podman run -dt --pod geeks-golang-pod geeks-golang
Output:

CONTAINER ID  IMAGE                               COMMAND        CREATED         STATUS         PORTS                   NAMES                POD ID        PODNAME
8273cb56cefb                                                     9 minutes ago   Up 51 seconds                          c5344f5fb68a-infra   c5344f5fb68a  geeks-golang-pod
b76b735cbdc4  localhost/geeks-golang:latest       /geeks-golang  51 seconds ago  Up 51 seconds  8080/tcp                adoring_nightingale  c5344f5fb68a  geeks-golang-pod

Menghentikan (stop) kontainer yang memiliki nama adoring_nightingale. Kontainer akan diberi sinyal SIGTERM untuk graceful shutdown, dan jika tidak berhenti dalam waktu tunggu default (10 detik), Podman akan mengirim SIGKILL untuk menghentikan paksa.

podman stop adoring_nightingale
Output:

CONTAINER ID  IMAGE                               COMMAND        CREATED         STATUS                     PORTS                   NAMES                POD ID        PODNAME
8273cb56cefb                                                     16 minutes ago  Up 7 minutes                                       c5344f5fb68a-infra   c5344f5fb68a  geeks-golang-pod
b76b735cbdc4  localhost/geeks-golang:latest       /geeks-golang  7 minutes ago   Exited (2) 47 seconds ago  8080/tcp                adoring_nightingale  c5344f5fb68a  geeks-golang-pod

Menjalankan kembali (start) kontainer bernama adoring_nightingale yang sebelumnya telah dihentikan (status Exited). Kontainer akan kembali berjalan dengan konfigurasi yang sama seperti saat pertama kali dibuat.

podman start adoring_nightingale
Output:

CONTAINER ID  IMAGE                               COMMAND        CREATED         STATUS         PORTS                   NAMES                POD ID        PODNAME
8273cb56cefb                                                     17 minutes ago  Up 8 minutes                           c5344f5fb68a-infra   c5344f5fb68a  geeks-golang-pod
b76b735cbdc4  localhost/geeks-golang:latest       /geeks-golang  8 minutes ago   Up 2 seconds   8080/tcp                adoring_nightingale  c5344f5fb68a  geeks-golang-pod

Menghapus (remove) kontainer adoring_nightingale secara permanen dari storage lokal. Kontainer harus dalam keadaan berhenti (Exited), kecuali menggunakan flag -f.

podman stop adoring_nightingale
podman rm adoring_nightingale
Output:

CONTAINER ID  IMAGE                               COMMAND        CREATED         STATUS         PORTS                   NAMES               POD ID        PODNAME
8273cb56cefb                                                     24 minutes ago  Up 15 minutes                          c5344f5fb68a-infra  c5344f5fb68a  geeks-golang-pod

Managemen Pod Podman

Manajemen pod di Podman memungkinkan pengguna untuk meniru pola deployment Kubernetes secara langsung dari command line, tanpa memerlukan daemon sentral atau orchestration engine yang kompleks.

Perintah podman pod ls (atau bisa juga menggunakan podman pod ps) berfungsi untuk menampilkan daftar semua pod yang ada di sistem beserta informasi dasar mengenai status masing-masing pod.

podman pod ls
Output:

POD ID        NAME              STATUS      CREATED         INFRA ID      # OF CONTAINERS
c5344f5fb68a  geeks-golang-pod  Running     39 minutes ago  8273cb56cefb  1

Perintah ini berfungsi untuk menghentikan (stop) semua kontainer yang berjalan di dalam pod bernama geeks-golang-pod secara bersamaan.

podman pod stop geeks-golang-pod
Output:

POD ID        NAME              STATUS      CREATED         INFRA ID      # OF CONTAINERS
c5344f5fb68a  geeks-golang-pod  Exited      40 minutes ago  8273cb56cefb  1

Berfungsi untuk menjalankan (start) semua kontainer yang ada di dalam pod bernama geeks-golang-pod secara bersamaan.

podman pod start geeks-golang-pod
Output:

POD ID        NAME              STATUS      CREATED         INFRA ID      # OF CONTAINERS
c5344f5fb68a  geeks-golang-pod  Running     42 minutes ago  8273cb56cefb  1

Kombinasi perintah ini berfungsi untuk menghentikan (stop) lalu menghapus (remove) pod bernama geeks-golang-pod secara berurutan.

podman pod stop geeks-golang-pod
podman pod rm geeks-golang-pod

Pastikan pod tidak ada pada podman

podman pod ls
Output:

POD ID      NAME        STATUS      CREATED     INFRA ID    # OF CONTAINERS

Kesimpulan

Memahami Pod pada Podman adalah langkah fundamental untuk beralih dari sekadar menjalankan kontainer menuju orkestrasi kontainer lokal yang sesungguhnya.

Pod bukan hanya fitur Kubernetes yang dibawa ke lokal, filosofi baru dalam mengelola kontainer yang berhubungan erat, menawarkan isolasi yang lebih baik, komunikasi yang disederhanakan, dan alur pengembangan yang mulus menuju produksi.

Dengan mengadopsi Pod dalam alur kerja Podman, tidak hanya membuat pengembangan lokal lebih kuat dan mirip produksi, tetapi juga menyederhanakan transisi ke orkestrasi berskala besar.