You spin up a lightweight Kubernetes cluster with k3s, toss Neo4j into it, and expect graph magic. Instead, you get YAMLs everywhere, lingering secrets, and questions about whether your pods are really talking to each other or just pretending to. Here is how to make Neo4j on k3s act like it belongs there.
Neo4j is a graph database built for relationships, not rows. It models connections between users, data, and events with natural speed. k3s is Kubernetes without the weight, designed for edge environments and local clusters. Together, they let you run a portable, distributed graph system from laptop to data center. The trick is stitching Neo4j’s stateful demands into k3s’s stateless heart.
Start with storage and service identity. Neo4j needs reliable volumes for transaction logs and data files. k3s provides local path storage or you can attach persistent volumes backed by S3 or Longhorn. Use ServiceAccounts in Kubernetes to give each Neo4j process its own identity, then map those to external identities with OIDC or AWS IAM roles. This keeps each pod accountable and keeps your graph consistent, even when nodes come and go.
For networking, give Neo4j a ClusterIP service for internal gossip and a LoadBalancer or Ingress for client access. TLS termination belongs at the cluster edge, but rotate secrets often. Automate it with cert-manager or another controller. When Neo4j restarts, your k3s control plane will handle rescheduling without needing a full deploy. Stateless orchestration meets stateful persistence.
Quick answer: You connect Neo4j to k3s with StatefulSets, persistent volumes, and a network service that exposes bolt and http ports through the Ingress layer. Add RBAC bindings for pod-level security, and the cluster hums along quietly.