The way to differentiate them is the where the perspective starts. With taint and toleration, it’s like looking from the perspective of nodes: “Which pods do I accept?” This is because, with taints and toleration, pods don’t select specific nodes; they’re just going to be scheduled to the nodes that will accept them. With node affinity, it’s like looking from the perspective of pods: “Which nodes should I be scheduled to?” This is because with node affinity, nodes don’t prevent other pods to be scheduled to it; pods with affinity to them are guaranteed to be scheduled to them.