Episode ini membahas deployment NATS di Kubernetes: Helm chart nats dan nats-operator, StatefulSet untuk JetStream dengan persistence via PVC, lalu integrasi KEDA NATS JetStream scaler, Argo workflows, dan service mesh.

Sebagian besar production NATS dijalankan di Kubernetes. Episode 17 ini memandu kalian mendeploy NATS di K8s dengan cara yang benar: Helm chart dan operator untuk pengelolaan, StatefulSet untuk state JetStream, PVC untuk penyimpanan, lalu integrasi dengan ekosistem seperti KEDA dan Argo.
Kita asumsikan kalian sudah familier dengan dasar Kubernetes: pod, service, dan namespace.
Chart resmi NATS tersedia di repository Helm:
helm repo add nats https://nats-io.github.io/k8s/helm/charts
helm install nats nats/nats --namespace nats --create-namespacePerintah helm install nats nats/nats mendeploy NATS ke namespace nats. Chart mengurus StatefulSet, service, dan konfigurasi dasar. Cek status deployment:
kubectl get pods -n nats
kubectl exec -n nats nats-0 -- nats-server -vkubectl exec -n nats nats-0 -- nats-server -v memverifikasi versi server di dalam pod. Pod pertama NATS di StatefulSet biasanya bernama nats-0.
Kebutuhan produksi ditetapkan lewat values:
config:
jetstream:
enabled: true
storeDir: /data/jetstream
maxMem: 1Gi
maxFile: 10Gi
cluster:
enabled: trueBlok jetstream mengaktifkan JetStream di dalam cluster K8s dengan batas resource yang jelas. cluster.enabled membuat tiga replica terhubung sebagai cluster NATS.
Selain Helm, nats-operator mengelola NATS dengan Custom Resource Definition:
apiVersion: nats.io/v1alpha2
kind: NatsCluster
metadata:
name: nats-prod
spec:
size: 3
version: "2.14"Manifest NatsCluster meminta operator membuat cluster NATS 3 node versi 2.14. Operator menangani pembuatan pod, service, dan monitoring secara otomatis. Pilih Helm untuk simplicitas, operator untuk kontrol deklaratif penuh.
JetStream menyimpan state, sehingga butuh StatefulSet, bukan Deployment: setiap pod punya identitas tetap dan PVC terpisah.
volumeClaimTemplates:
- metadata:
name: data
spec:
storageClassName: standard
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 50GivolumeClaimTemplates membuat PVC data berukuran 50 GB untuk setiap replica. Dengan PVC, data JetStream bertahan meski pod dijadwalkan ulang ke node lain. Ini syarat mutlak agar stream tidak hilang saat pod restart.
Warning
Jangan pernah memakai storage ephemeral untuk JetStream di K8s. Pod restart akan menghapus data stream. Selalu gunakan PVC dengan storage class yang mendukung ReadWriteOnce di cluster kalian.
KEDA mengaktifkan autoscaling berbasis event:
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: order-worker
spec:
scaleTargetRef:
name: order-worker-deployment
triggers:
- type: nats-jetstream
metadata:
natsURL: nats://nats:4222
stream: ORDERS
consumer: WORKER
lagThreshold: "100"Blok nats-jetstream membuat KEDA memantau pending pesan consumer WORKER; ketika tertinggal melebihi 100 pesan, worker di-scale up otomatis. Ini event-driven autoscaling yang menyesuaikan kapasitas dengan beban nyata.
NATS cocok sebagai penyalur event untuk Argo Events:
NATS (event) --> EventSource --> Sensor --> Workflow ArgoAlur NATS (event) -> EventSource menunjukkan event dari stream NATS memicu workflow Argo. Ini pola populer untuk pipeline otomatis: file diupload memicu job, order masuk memicu proses.
NATS berdampingan dengan service mesh seperti Istio atau Linkerd. Service mesh menangani observability dan mTLS antar pod, sementara NATS menangani messaging antar service. Keduanya tidak saling menggantikan:
pod A --> (mesh mTLS) --> pod B
pod A --> (NATS) --> stream --> pod CSkema pod A -> (NATS) -> stream menunjukkan NATS untuk komunikasi async, service mesh untuk komunikasi sinkron dan keamanan jaringan. Gunakan keduanya sesuai peran masing-masing.
Episode 17 membawa NATS ke Kubernetes: deploy dengan Helm chart atau nats-operator, StatefulSet dengan PVC untuk persistence JetStream yang bertahan dari restart pod, serta integrasi KEDA untuk autoscaling event-driven, Argo untuk workflow otomatis, dan service mesh untuk keamanan jaringan.
Inti yang harus dibawa pulang:
nats/nats mendeploy NATS dengan cepat; operator memberi kontrol deklaratif.Di episode 18 selanjutnya kita akan membahas monitoring & observability — endpoint /varz, /connz, /jsz, dan /subsz, metrik Prometheus lewat nats_exporter, dashboard Grafana, metrik consumer latency, event akun $SYS, dan log rotation. NATS kalian kini terlihat jelas dari luar.