Memahami cara Longhorn menempatkan replika: anti-affinity, tolerations, dan nodeSelector. Kalian juga akan mendalami replica scheduling berbasis topology.kubernetes.io zone/region untuk high availability multizone serta mensimulasikan label zone pada worker node.

Membuat 3 replika tidak otomatis membuat data HA — kalau ketiganya berdiam di node yang sama, satu keran mati berarti semuanya pergi. Episode 11 membahas di mana replika diletakkan: anti-affinity, node selector, toleration, dan terutama topology zone/region untuk HA lintas-zona.
Mengapa penting? Keputusan penempatan replika menentukan ke mana data pergi saat node sibuk atau mati. Dengan memahami topology, kalian bisa membangun arsitektur yang bertahan bukan hanya dari satu node, tapi dari seluruh zona yang mati.
Longhorn menyebar replika volume ke node yang berbeda secara default melalui replicaAntiaffinity: hard. Ini pilihan bijak: jika satu node mati, minimal satu replika bertahan di node lain.
Mari cek setting:
kubectl -n longhorn-system get volumes -o jsonpath='{range .items[*]}{.metadata.name}{" -> "}{.spec.replicaZonesList}{"\n"}{end}'
kubectl -n longhorn-system get replicas.longhorn.io -o widePerhatikan kolom NODE pada replika — seharusnya berbeda-beda.
Pada cluster dengan node khusus (misal node storage diberi label storage-node=true), pakai nodeSelector di volume:
volumeNodeSelector:
- storage-node=true
volumeTolerations:
- key: dedicated
operator: Equal
value: storage
effect: NoScheduleSetting ini bisa ditetapkan dalam StorageClass parameter atau per-volume di UI. Berguna ketika ingin mengunci data plane hanya pada node dengan disk khusus.
Kubernetes 1.17+ memberikan label standar pada node:
topology.kubernetes.io/zonetopology.kubernetes.io/regionLonghorn membacanya untuk scheduling replika.
kubectl label node worker-1 topology.kubernetes.io/zone=zone-a
kubectl label node worker-2 topology.kubernetes.io/zone=zone-bDi Longhorn, ada dua tingkat:
replicaSoftAntiAffinity: default true. Replika diusahakan tersebar di node/zone berbeda, tapi boleh terdorong bila ruang terbatas.replicaZoneLevelAntiAffinity: default false. Jika diaktifkan, Longhorn hard menempatkan replika di zona berbeda — tidak boleh dua replika di zona sama.Untuk Multi-AZ yang benar, aktifkan replicaZoneLevelAntiAffinity:
# via StorageClass parameter, di UI (Setting → replicaZoneLevelAntiAffinity), atau Helm values
replicaSoftAntiAffinity: "true"
replicaZoneLevelAntiAffinity: "true"Dengan begitu, pada kluster dengan replika 3 di 3 zona, satu zona mati masih menyisakan dua replika di dua zona lain → volume tetap Healthy.
Dengan 3 worker di 3 zona berbeda dan volume 3-replica, Longhorn menempatkan satu replika tiap zona. Database tetap bisa menulis meski satu zona mati total.
Untuk lab 2 node, cukup replicaSoftAntiAffinity tanpa zone-level hard.
replicaZoneLevelAntiAffinity: true.longhorn-ha.kubectl drain worker-1 --delete-emptydir-data --ignore-daemonsets --forceVolume harus tetap Healthy (2/3 replika di zona lain), status Degraded hanya sesaat lalu rebuild ke node yang tersedia (jika ada rekaman tidak terpakai) atau menunggu node kembali.
Note
Rebuild membutuhkan node tujuan dengan ruang dan zona berbeda (karena hard anti-affinity). Jika node tambahan tidak ada, volume tetap degraded 2/3 sampai node kembali — membaiknya tetap aman selama kuorum (2) terpenuhi.
Inti yang harus dibawa pulang:
nodeSelector/tolerations mengontrol node mana yang boleh menampung replica.topology.kubernetes.io/{zone,region} + replicaZoneLevelAntiAffinity memberi HA multizone.Di episode 12 selanjutnya kita akan mengaventurasi keamanan Longhorn: CSI, RBAC, dan akses UI — securityContext, least-privilege ServiceAccount, proteksi dashboard dengan Ingress + auth, serta kebersihan secret backup. Sampai jumpa di episode 12!