Belajar Kubernetes Shared Filesystem RWX - Push Image & Readiness Probe
Episode 9 of 28

Belajar Kubernetes Shared Filesystem RWX - Push Image & Readiness Probe

Mempersiapkan image di registry: docker tag dan push, imagePullSecrets untuk registry privat, memilih model satu-pod untuk Nginx dan PHP-FPM, serta memasang readiness dan liveness probe agar kubelet tahu kondisi container

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Image Laravel produksi sudah jadi di episode 8. Sekarang kita mempersiapkan dua hal yang membuat image itu siap dipakai Kubernetes: menaruhnya di registry yang bisa dijangkau cluster, dan menyatakan kapan Pod layak menerima traffic lewat probe.

Mengapa bagian ini penting bagi shared storage? Karena probe menentukan kapan Pod "siap" — dan Pod yang siap akan mulai membaca/menulis volume RWX bersama. Kubelet menilai kesehatan probe terhadap waktu startup dan saat mount volume. Understanding yang salah di sini berujung pada Pod yang menghabiskan hidupnya dalam status CrashLoopBackOff atau tidak menerima traffic.

Menyiapkan Image di Registry

Build image lalu beri tag yang konsisten (semantic versioning membantu episode 22):

Tag dan push image
docker tag ghcr.io/<user>/laravel-media:1.0.0 ghcr.io/<user>/laravel-media:1.0.0
docker push ghcr.io/<user>/laravel-media:1.0.0

Jika registry private, buat Secret registry-credentials agar cluster bisa menarik image. Untuk GHCR:

KubernetesBuat imagePullSecret
kubectl create secret docker-registry registry-credentials \
  --docker-server=ghcr.io \
  --docker-username=<user> \
  --docker-password=<ghcr-token>

Secret ini ditambahkan lewat imagePullSecrets pada Deployment (episode 10).

Note

Jangan pernah memasukkan token registry ke dalam Dockerfile atau .env. Pakai Secret Kubernetes — dan di episode 23 kita naikkan levelnya dengan External Secrets Operator bila tim kalian sudah besar.

Container Runtime Base Image

Untuk aplikasi PHP, arsitektur standar: PHP-FPM melayani request PHP, Nginx melayani statik dan proxy ke FPM. Dua pilihan layout:

  1. Satu Pod, dua container — Nginx dan FPM berbagi Pod, bisa juga berbagi volume emptyDir untuk socket bersama.
  2. Image dengan supervisord yang menjalankan keduanya dalam satu container (kurang dianjurkan — menyulitkan probe terpisah).

Series ini memakai model satu Pod, dua container (atau kontainer web yang sudah penuh dari image kita yang menjalankan keduanya). Kuncinya: setiap container punya probe sendiri.

Healthcheck & Probe

Probe untuk Nginx

Nginx sehat bila konfigurasinya valid dan daemon berjalan. Readiness bisa memakai nginx -t atau cek HTTP ke endpoint:

probe-nginx.yaml
readinessProbe:
  exec:
    command: ["nginx", "-t"]
  initialDelaySeconds: 5
  periodSeconds: 5
livenessProbe:
  httpGet:
    path: /nginx-health
    port: 80
  initialDelaySeconds: 15
  periodSeconds: 10

Probe untuk PHP-FPM

PHP-FPM sehat bila ada worker yang siap. Manfaatkan endpoint status bawaan pm.status. Aktifkan di php-fpm.conf:

pool.d/www.conf
pm.status_path = /status
probe-php.yaml
readinessProbe:
  httpGet:
    path: /status
    port: 9000
  initialDelaySeconds: 10
  periodSeconds: 5
livenessProbe:
  tcpSocket:
    port: 9000
  initialDelaySeconds: 20
  periodSeconds: 10

Aturan praktis:

  • readinessProbe — memberi tahu kubelet kapan Pod layak menerima traffic (EndpointSlice diperbarui). Gagal → Pod dihapus dari Service.
  • livenessProbe — mendeteksi proses hang dan me-restart container. Jangan terlalu agresif — restart yang tidak perlu memperburuk kehilangan koneksi.

Important

Bedakan peran: readiness melindungi pengguna dari Pod rusak, liveness menegakkan kesehatan proses. Untuk aplikasi yang tergantung volume RWX, prepare readiness yang bergantung juga pada mount (mis. cek symlink storage ada) — ini menjamin traffic baru tidak masuk sebelum storage siap.

Penutup

Pada episode 9 ini, kalian telah menyiapkan image dan probe:

Inti yang harus dibawa pulang:

  • docker push ke registry; private registry butuh Secret docker-registry + imagePullSecrets.
  • Model 1 Pod 2 container (nginx + fpm) memberi probe terpisah.
  • Nginx: readiness nginx -t, liveness cek HTTP.
  • PHP-FPM: readiness via pm.status /status, liveness via TCP.
  • Readiness memblokir traffic ke Pod yang belum siap — penting sebelum Pod mulai memakai shared volume.

Di episode 10 selanjutnya kita akan menulis Deployment multi-replica dengan shared PVC: manifest lengkap, mount volume ke path storage, dan simulasi verifikasi bahwa file yang ditulis Pod A terlihat di Pod B. Sampai jumpa di episode 10!