<p>Playing with cluster autoscaler I've noticed that scale-down is not working due to standard k8s pods:</p>

<pre><code>Fast evaluation: node aks-nodepool1-37748512-0 cannot be removed: non-daemonset, non-mirrored, non-pdb-assignedkube-system pod present: kube-dns-v20-8748686c5-27psn
</code></pre>

<p>What is a proper PodDisruptionBudget for kube-dns and are there any best practices for standard system POD PDBs? Why aren't they configured by default?</p>

<p>Inside Kubernetes docs about <a href="https://kubernetes.io/docs/concepts/workloads/pods/disruptions/" rel="nofollow noreferrer">Disruptions</a> we can read:</p>

<blockquote>
  <p>An Application Owner can create a <code>PodDisruptionBudget</code> object (PDB) for each application. A PDB limits the number pods of a replicated application that are down simultaneously from voluntary disruptions. For example, a quorum-based application would like to ensure that the number of replicas running is never brought below the number needed for a quorum. A web front end might want to ensure that the number of replicas serving load never falls below a certain percentage of the total.</p>
</blockquote>

<p>You can see examples on how to correctly enable, tune and disable <code>PodDisruptionBudget</code> for kube-dns inside Kubernetes docs for <a href="https://kubernetes.io/docs/tasks/administer-cluster/dns-horizontal-autoscaling/" rel="nofollow noreferrer">Autoscale the DNS Service in a Cluster</a>.</p>

<p>Also Marton Sereg wrote a good article about <a href="https://banzaicloud.com/blog/drain/" rel="nofollow noreferrer">Draining Kubernetes nodes</a>, in which he explains how does draining works and what's happening inside the cluster.</p>

<p>As for configuration defaults I was able to find this discussion <a href="https://github.com/kubernetes/kubernetes/issues/35318" rel="nofollow noreferrer">Reasonable defaults with eviction and PodDisruptionBudget #35318</a>.</p>
