Get started
Pick the page for the way you run DNS. Each one names the guides and references that matter for that job and skips the rest.
kudurru is one binary with several roles: the DNS server (kudurru serve),
the client (kudurru get, apply, zones, query, ...), and the
supervisors that run dnsdist (kudurru edge run) and keepalived
(kudurru vip run) in their own containers. Which of them you need depends on
the deployment shape:
| Shape | Source of truth | Guide |
|---|---|---|
| One container (Docker, Podman) or a Linux package | state.db on a volume | One container |
| Three hosts with a virtual IP (dnsdist + keepalived) | identical file-managed configuration on every host | Compose HA |
| Kubernetes, several replicas | CRDs in the apiserver | Helm, kustomize |
| Kubernetes, one node ("Pi-hole on k3s") | state.db on a PersistentVolumeClaim | Helm, mode=standalone |
- Home network in one container
One
docker runor compose file, the dashboard on port 8080, blocking with per-device rules, and local names for the things on your network. - Kubernetes with Helm
Two charts, CRDs as the source of truth, replicas that answer from memory through an apiserver outage, and aggregated RBAC roles.
- Highly available DNS for a network
A virtual IP held by keepalived, dnsdist on every host, real client addresses through authenticated PROXYv2, and zone transfers to your existing secondaries.
- Automate with the API and the CLI
One REST API behind the dashboard, the CLI and your scripts, with scoped tokens, Kubernetes-shaped objects and a generated OpenAPI document.