Kubernetes taints and tolerations, node selectors, and node affinity. All of these allow us to attain granular control over pod placement on nodes.

Taints and tolerations are used to set restrictions on which pods can be scheduled on a node.

To associate a pod to a node to run on, we add nodeSelector to the pod definition.

If we need more advanced operators such as OR/AND then we need to turn to node affinity to ensure pods are hosted on specific nodes.