Belajar Kubernetes Simple Shared Storage - Object Storage S3 Alternatif di OpenEBS
Episode 9 of 28

Belajar Kubernetes Simple Shared Storage - Object Storage S3 Alternatif di OpenEBS

Mengeksplorasi jalur object storage untuk media: kapan MinIO di atas Local PV masuk akal, men-deploy MinIO dengan PVC, menghubungkan Laravel Flysystem ke endpoint S3, dan kapan shared filesystem NFS sudah cukup tanpa object store

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

Pendahuluan

Sejauh ini semua media disimpan sebagai file di filesystem — baik NFS RWX maupun hostpath. Tetapi ada pola aplikasi modern yang menyimpan media sebagai object: gambar, video, arsip yang diakses lewat API S3. Untuk itu, ada jalan lain: object storage.

Di episode 9 kita menilai kapan object storage dibutuhkan, dan jika ya, bagaimana menjalankannya di atas OpenEBS dengan MinIO + Local PV. Kalian juga akan belajar menyambungkan Laravel Flysystem ke endpoint S3.

Opsional: Kapan Membutuhkan Object Storage

Jujur: OpenEBS tidak menyediakan object store built-in. Object storage adalah lapisan tambahan yang kalian pasang sendiri. Sebelum melakukannya, ukur kebutuhan:

  • Filesystem cukup bila: file diakses seperti biasa, butuh mount langsung, ukuran file sedang.
  • Object storage membantumu bila: file sangat banyak/large binary, ingin akses via S3 API, ingin integrasi CDN, atau ingin memisahkan metadata dari blobs.

Aturan untuk lab: shared filesystem (NFS RWX) biasanya sudah cukup untuk media. Object storage adalah opsi lanjutan, bukan keharusan.

MinIO + OpenEBS

Bila memutuskan memakai object storage, MinIO adalah pilihan paling sederhana. Jalankan di atas Local PV:

Install MinIO via Helm di atas Local PV
helm repo add minio https://operator.min.io
helm repo update
helm install minio minio/minio \
  --namespace minio --create-namespace \
  --set persistence.storageClass=openebs-hostpath \
  --set persistence.size=10Gi \
  --set resources.requests.memory=512Mi
KubernetesVerifikasi MinIO
kubectl -n minio get pods
kubectl -n minio get pvc minio

MinIO menyimpan data di backing Local PV (openebs-hostpath) — pola "di atas OpenEBS" yang sama seperti komponen lain. Endpoint layanan: minio:9000 (Service), kredensial dari Secret yang dibuat Helm.

Laravel Flysystem

Laravel memakai Flysystem untuk mengakses object storage. Konfigurasikan disk S3 di config/filesystems.php:

config/filesystems.php
's3' => [
    'driver' => 's3',
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
    'bucket' => env('AWS_BUCKET'),
    'endpoint' => env('AWS_ENDPOINT_URL'),
],

Lalu set di .env / ConfigMap:

.env (endpoint MinIO)
FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID=minioadmin
AWS_SECRET_ACCESS_KEY=<minio-secret>
AWS_BUCKET=media
AWS_ENDPOINT_URL=http://minio:9000
AWS_USE_PATH_STYLE_ENDPOINT=true

AWS_USE_PATH_STYLE_ENDPOINT=true penting untuk MinIO (path-style, bukan virtual-host). Buat bucket dan uji upload dari kode:

Upload object ke MinIO
use Illuminate\Support\Facades\Storage;
 
Storage::disk('s3')->put('gallery/foto.jpg', file_get_contents($file));
$url = Storage::disk('s3')->temporaryUrl('gallery/foto.jpg', now()->addMinutes(5));

Tip

Test upload object di encoded: Storage::disk('s3')->put(...) lalu Storage::disk('s3')->exists(...) — keduanya harus true. Jika gagal, periksa endpoint URL dan AWS_USE_PATH_STYLE_ENDPOINT.

Kapan Resultan

  • Di lab: shared filesystem (NFS RWX) sudah cukup untuk media — S3 opsional. Jangan menambah kompleksitas tanpa kebutuhan.
  • Bila butuh: object storage berguna untuk arsip besar, CDN, atau integrasi API S3. MinIO + Local PV adalah combo sederhana.
  • Dalam satu aplikasi: banyak tim memakai keduanya — media kecil di filesystem, arsip besar di object store.

Penutup

Pada episode 9 ini, kalian telah menilai object storage dengan jujur:

Inti yang harus dibawa pulang:

  • OpenEBS tidak punya object store built-in; MinIO dipasang di atas Local PV.
  • MinIO + openebs-hostpath = object storage sederhana dalam cluster.
  • Laravel Flysystem: disk s3 dengan endpoint + AWS_USE_PATH_STYLE_ENDPOINT=true.
  • Uji: Storage::disk('s3')->put() + exists().
  • Untuk lab, NFS RWX cukup untuk media — S3 saat kebutuhan nyata.

Di episode 10 selanjutnya kita akan men-deploy aplikasi Lengkap: membangun image Laravel, menulis Deployment + Nginx Ingress + PostgreSQL Local PV, menjalankan migrasi, dan menguji end-to-end upload hingga tampil antar Pod. Sampai jumpa di episode 10!