Portal/Notes πŸ“
Cka

Pod

Versi Bahasa Indonesia. Baca dalam Bahasa Inggris

Pod adalah unit komputasi terkecil yang dapat Anda buat dan kelola di Kubernetes.

Pod adalah sekelompok satu atau lebih container, dengan sumber daya penyimpanan dan jaringan bersama, serta spesifikasi untuk menjalankan container tersebut.

Anggap Pod sebagai pembungkus container, memastikan mereka bekerja sebagai satu kesatuan.

Pod Single Container

Kita dapat memulai atau menjalankan image tertentu dalam pod menggunakan perintah kubectl run.

➜ kubectl run nginx --image=nginx --port=80
pod/nginx created

Perintah ini akan membuat pod bernama nginx dengan satu container bernama nginx menggunakan image nginx dan membuka port 80. Kita dapat melihat detailnya menggunakan perintah kubectl describe.

➜ kubectl describe pod nginx 
Name:             nginx
Namespace:        default
Priority:         0
Service Account:  default
Node:             minikube/192.168.49.2
Start Time:       Tue, 04 Feb 2025 12:48:15 +0700
Labels:           run=nginx
Annotations:      <none>
Status:           Running
IP:               10.244.0.94
IPs:
  IP:  10.244.0.94
Containers:
  nginx:
    Container ID:   docker://6f804d723c05e62267a7b70896ec07dac53991f4e152874a8e713144c57c02d2
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:0a399eb16751829e1af26fea27b20c3ec28d7ab1fb72182879dcae1cca21206a
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Tue, 04 Feb 2025 12:48:19 +0700
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-6bc8f (ro)
...

Kita juga dapat menggunakan file yaml untuk mendefinisikan konfigurasi pod. Perintah kubectl run yang kita gunakan sebelumnya kurang lebih setara dengan konfigurasi di bawah ini.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80

Penjelasan:

  • metadata.name: nginx: Nama Pod (harus unik dalam namespace).
  • spec: Spesifikasi dari Pod.
  • containers: Daftar container yang akan berjalan di dalam Pod ini.
  • - name: nginx: Nama container di dalam Pod.
  • image: nginx: Image Docker yang digunakan untuk menjalankan container (diambil dari Docker Hub secara default).
  • ports: Mendefinisikan port mana yang dibuka pada container.
  • containerPort: 80: Container mendengarkan pada port 80.

Untuk menerapkannya seperti biasa, kita dapat menggunakan perintah kubectl apply -f <file>.

Pod Multiple Container

Untuk membuat pod yang memiliki beberapa container, kita hanya perlu menambahkan entri baru di bagian containers. Buat file baru pod.yaml dan masukkan contoh konfigurasi di bawah ini.

apiVersion: v1
kind: Pod
metadata:
  name: nginx-with-logger
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
  - name: logger
    image: busybox
    command: ["sh", "-c", "while true; do echo 'Logging...'; sleep 10; done"]

Terapkan file konfigurasi menggunakan kubectl apply dan lihat detailnya menggunakan perintah kubectl describe.

➜ kubectl apply -f pod.yaml 
pod/nginx-with-logger created
➜ kubectl describe pod nginx-with-logger 
Name:             nginx-with-logger
Namespace:        default
Priority:         0
Service Account:  default
Node:             minikube/192.168.49.2
Start Time:       Tue, 04 Feb 2025 13:49:17 +0700
Labels:           <none>
Annotations:      <none>
Status:           Running
IP:               10.244.0.95
IPs:
  IP:  10.244.0.95
Containers:
  nginx:
    Container ID:   docker://7ff16ce361c2acba92bc4e7a5ad4591c2f8943dc9fc766d8c89870a66e35d012
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:0a399eb16751829e1af26fea27b20c3ec28d7ab1fb72182879dcae1cca21206a
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Tue, 04 Feb 2025 13:49:21 +0700
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-dmx2c (ro)
  logger:
    Container ID:  docker://a2bf248b0f9cad05d9e9af0e99fc273e479bda47018c43b406d3469ed93a88e8
    Image:         busybox
    Image ID:      docker-pullable://busybox@sha256:a5d0ce49aa801d475da48f8cb163c354ab95cab073cd3c138bd458fc8257fbf1
    Port:          <none>
    Host Port:     <none>
    Command:
      sh
      -c
      while true; do echo 'Logging...'; sleep 10; done
    State:          Running
      Started:      Tue, 04 Feb 2025 13:49:26 +0700
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-dmx2c (ro)
...

Seperti yang Anda lihat di atas, kita memiliki 2 container dengan nama nginx dan logger.

Kita dapat melihat log container menggunakan perintah di bawah ini.

➜ kubectl logs pods/nginx-with-logger logger 
Logging...
Logging...
Logging...
Logging...
Logging...
Logging...

Perintah di atas akan mencetak log dari pod nginx-with-logger khusus di container logger. Untuk mencetak log dari semua container, kita dapat menambahkan opsi --all-containers=true.

Mengakses Pod

Untuk mengakses pod, kita dapat menggunakan perintah kubectl port-forward.

➜ kubectl port-forward nginx-with-logger 8080:80  
Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80

Perintah ini akan meneruskan traffic dari port 8080 di mesin lokal ke pod bernama nginx-with-logger port 80.

Mari kita coba mengaksesnya menggunakan curl dan kita akan melihat respons default dari server nginx.

➜ curl http://localhost:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

Menghapus Pod

Untuk menghapus pod, kita dapat menggunakan perintah kubectl delete pods <nama-pod>.

➜ kubectl delete pods nginx
pod "nginx" deleted

Referensi


Edit on GitHub

Last updated on

Pod | Faisal Affan