Neo4j-Helm Chart
Structure
& Reference Architecture
August 2020
Chart version 4.1.1-1
Core StatefulSet
Read Replica StatefulSet
common-configmap.yaml
core-configmap.yaml
readreplicas-configmap.yaml
How Pod Configuration Works
pod-init-script.yaml
How Networking Works
Core StatefulSet
0
1
2
lb-0
lb-1
lb-2
Service: discovery-lb.yaml
Service: core-dns.yaml
Used for cluster member discovery, and metrics exposure (i.e. prometheus)
If configured
Used only for bolt, HTTP, HTTPS
Client software
Deployment Architecture Considerations
Distribution of Neo4j Pods in Kubernetes Cluster
Kubernetes
Worker Node
Worker Node
Worker Node
Neo4j Pod
Neo4j Pod
Neo4j Pod
Kubernetes
Worker Node
Worker Node
Worker Node
✅
❌
Kubernetes affinity: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
Exposing Neo4j Outside of Kubernetes
Problem: bolt+routing doesn’t work outside of k8s
7
a
b
c
Kubernetes boundary
member | role | address |
a | leader | a.cluster.internal |
b | follower | b.cluster.internal |
c | follower | c.cluster.internal |
Routing table
For similar reasons, external clients can fetch browser HTML/JS, but at the very least, default connection details are not workable.
Public ip
ingress
app2
app1
Why do you want to do this?
8
Load Balancers
9
lb1
a
b
c
lb2
lb3
svc1
svc1
svc1
Traffic
Requires Pre-Allocated Static IP Address
10