<p>I can see GKE, AKS, EKS all are having nodepool concepts inbuilt but Kubernetes itself doesn't provide that support. What could be the reason behind this?</p>
<p>We usually need different Node types for different requirements such as below-</p>
<p>Some pods require either CPU or Memory intensive and optimized nodes.
Some pods are processing ML/AI algorithms and need GPU-enabled nodes. These GPU-enabled nodes should be used only by certain pods as they are expensive.
Some pods/jobs want to leverage spot/preemptible nodes to reduce the cost.</p>
<p>Is there any specific reason behind Kubernetes not having inbuilt such support?</p>

<p>Node Pools are cloud-provider specific technologies/groupings.</p>
<p>Kubernetes is intended to be deployed on various infrastructures, including on-prem/bare metal. Node Pools would not mean anything in this case.</p>
<p>Node Pools generally are a way to provide Kubernetes with a group of identically configured nodes to use in the cluster.</p>
<p>You would specify the node you want using node selectors and/or taints/tolerations.</p>
<p>So you could taint nodes with a GPU and then require pods to have the matching toleration in order to schedule onto those nodes. Node Pools wouldn't make a difference here. You could join a physical server to the cluster and taint that node in exactly the same way -- Kubernetes would not see that any differently to a Google, Amazon or Azure-based node that was also registered to the cluster, other than some different annotations on the node.</p>
