<p>A few days ago, I looked up why none of pods are being scheduled to the master node, and found this question: <a href="https://stackoverflow.com/questions/43147941/allow-scheduling-of-pods-on-kubernetes-master">Allow scheduling of pods on Kubernetes master?</a></p>

<p>It tells that it is because the master node is tainted with "NoSchedule" effect, and gives the command to remove that taint.</p>

<p>But before I execute that command on my cluster, I want to understand why it was there in the first place.</p>

<p>Is there a reason why the master node should not run pods? Any best-practices it relates to?</p>

<p>The purpose  of kubernetes is to deploy application easily and scale them based on the demand. The pod is a basic entity which runs the application and can be increased and decreased based on high and low demands respectively (Horizontal Pod Autoscalar).</p>

<p>These worker pods needs to be run on worker nodes specially if you’re looking at big application where your cluster might scale upto 100’s of nodes based on demand (Cluster Autoscalar).  These increasing pods can put up pressure on your nodes and once they do you can always increase the worker node in cluster using cluster autoscalar. 
Suppose, you made your master schedulable then the high memory and CPU pressure put your master at risk of crashing the master. Mind you can’t autoscale the master using autoscalar. This way you’re putting your whole cluster at risk. If you have single master then your will not be able to schedule anything if master crashed. If you have 3 master and one of them crashed, then the other two master has to take the extra load of scheduling and managing worker nodes and increasing the load on themselves and hence the increased risk of failure</p>

<p>Also, In case of larger cluster, you already need the master nodes with high resources just to manage your worker nodes. You can’t put additional load on master nodes to run the workload as well in that case.  Please have a look at the setting up large cluster in kubernetes <a href="https://kubernetes.io/docs/setup/cluster-large/" rel="noreferrer">here</a></p>

<p>If you have manageable workload and you know it doesn’t increase beyond a certain level. You can make master schedulable. However for production cluster it is not recommended at all.</p>
