Kubernetesクラスターを構成するNodeは常に均一とは限らず、Nodeによって性能等が異なっていることがある。特定Nodeに対してPodを起動させたい時は Node Selector や Node Affinity を使うことができる。
Node Selector
Node Selectorは単純にNodeにラベルを設定して、Podのspec内でそのラベルを使用することで、特定のNodeにPodを配置することができる。
しかし、2つ以上の条件をすべて満たすといった柔軟な条件指定ができないという制約がある。
Node Affinity
Node AffinityはNode Selectorよりも柔軟にNodeを選択することができる。複雑なNode選択基準を設定する必要がある場合に使用する。特定のゾーンに属するNodeを指定したい時など。
Node Affinityは`requiredDuringSchedulingIgnoredDuringExecution`と`preferredDuringSchedulingIgnoredDuringExecution` の2種類の設定が可能。
requiredDuringSchedulingIgnoredDuringExecution
設定された条件を満たすことが必須。条件を満たすNodeが存在しない場合は、Podはスケジュールされない。
preferredDuringSchedulingIgnoredDuringExecution
設定された条件が優先されるだけで必須ではない。条件を満たすNodeが存在しない場合でも、Podは他のNodeにスケジュールされる。
※ requiredDuringSchedulingIgnoredDuringExecution と preferredDuringSchedulingIgnoredDuringExecution が同時に設定された場合は両方を満たすNodeに配置される。