Skip to content

Commit 1b46928

Browse files
authored
Add a section about nodelocaldns memory limits.
1 parent 138039e commit 1b46928

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

content/en/docs/tasks/administer-cluster/nodelocaldns.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,4 +100,16 @@ shown in [the example](/docs/tasks/administer-cluster/dns-custom-nameservers/#ex
100100
The `node-local-dns` ConfigMap can also be modified directly with the stubDomain configuration
101101
in the Corefile format. Some cloud providers might not allow modifying `node-local-dns` ConfigMap directly.
102102
In those cases, the `kube-dns` ConfigMap can be updated.
103-
103+
104+
## Setting Memory limits
105+
106+
node-local-dns pods use memory for storing cache entries and processing queries. Since they do not watch Kubernetes objects, the cluster size or the number of Services/Endpoints do not affect memory usage. Memory usage is influenced by the DNS query pattern.
107+
From [CoreDNS docs](https://github.com/coredns/deployment/blob/master/kubernetes/Scaling_CoreDNS.md),
108+
`The default cache size is 10000 entries, which uses about 30 MB when completely filled.`
109+
110+
This would be the memory usage for each server block (if the cache gets completely filled).
111+
Memory usage can be reduced by specifying smaller cache sizes.
112+
113+
The number of concurrent queries can lead to additional memory usage (more goroutines). An upper limit can be set via the "max_concurrent" option in the forward plugin.
114+
115+
If a node-local-dns pod gets OOMKilled, it will not cleanup the custom iptables rules added at startup time. The node-local-dns pod should get restarted(since it is part of a daemonset), but this will lead to a brief DNS downtime everytime the pod crashes. A suitable memory limit can be determined by running node-local-dns pods without a limit and measuring the peak usage.

0 commit comments

Comments
 (0)