Menyiapkan block storage RBD untuk database: membuat CephBlockPool dengan failureDomain host dan replikasi size 2, menyusun StorageClass RBD, lalu menjalankan PostgreSQL StatefulSet di atasnya serta memverifikasi persistensi data.

Cluster Ceph sudah hidup dan bisa diamati (episode 5-6). Episode 7 memulai pemanenan: block storage RBD untuk database — studi kasus utamanya adalah PostgreSQL. Ini analog dengan episode 6 di seri RWO, tapi kini di atas Ceph.
Mengapa penting? Karena RBD adalah fondasi workload stateful di Ceph: database, dll. Kalian akan menyusun pool, StorageClass, dan menjalankan StatefulSet — pola yang sama dipakai production selama bertahun-tahun.
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
name: replicapool
namespace: rook-ceph
spec:
failureDomain: host
replicated:
size: 2failureDomain: host → replika object diletakkan di node berbeda (di 2 worker kita).size: 2 → 2 salinan data (hemat disk, HA 1 node).Untuk blok (RBD), pakai replicated (salinan). Erasure coding lebih hemat diska dan dipakai untuk pool khusus — kita bahas di episode 15.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-block
provisioner: rook-ceph.rbd.csi.ceph.com
allowVolumeExpansion: true
parameters:
clusterID: rook-ceph
pool: replicapool
csi.storage.k8s.io/fstype: ext4
imageFeatures: layeringprovisioner: rook-ceph.rbd.csi.ceph.com — CSI RBD dari operator.clusterID: namespace cluster (rook-ceph).pool: pool yang dipakai (replicapool).allowVolumeExpansion: true — mendukung resize (episode 20).imageFeatures: layering — fitur clone/snapshot.Saat PVC memakai SC ini, CSI RBD:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-postgres
spec:
accessModes:
- ReadWriteOnce
storageClassName: rook-ceph-block
resources:
requests:
storage: 10GiapiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres
spec:
serviceName: postgres
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
securityContext:
fsGroup: 999
containers:
- name: postgres
image: postgres:16
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: rook-ceph-block
resources:
requests:
storage: 10Gikubectl get pvc
kubectl get pv | grep rook-cephPVC data-postgres-0 Bound ↔ PV yang dipasok RBD.
kubectl get csidrivers | grep rbd
kubectl -n rook-ceph get ds | grep rbdDriver rbd.csi.ceph.com (provisioner rook-ceph.rbd.csi.ceph.com) menangani lifecycle image RBD dari PVC.
rbd ls replicapool
rbd info replicapool/csi-vol-...Note
RBD memberi performa block asli (latensi rendah) dengan replikasi Ceph di belakang. Untuk database, ini pilihan yang mendekati managed disk — itu sebabnya pola ini dipakai sangat luas.
Inti yang harus dibawa pulang:
CephBlockPool → replicapool dengan failureDomain: host, size: 2.rook-ceph.rbd.csi.ceph.com memprovisi image RBD.Di episode 8 selanjutnya kita akan membahas filesystem (CephFS/RWX) untuk media Laravel — membuat CephFilesystem, StorageClass CephFS dengan akses RWX, mount ke Deployment multi-replica Laravel untuk upload, dan subvolume group. Sampai jumpa di episode 8!