KubernetesのAffinity
Pod placement
前提
k8sのスケジューリング時の話
Kubernetesは、Podを適切なNodeに自動で配置(スケジーリング)する
しかし、すべてを自動任せにしたくないケースも多い
e.g.
「このノードに置きたい」
「このノードは避けたい」
「他のPodと同じノードに置きたい/置きたくない」
そのために使うのが、Affinity周りの諸概念である
これらの制御には、Label (k8s)を用いる
視点や用途別にいくつか種類がある
Node Affinity
Pod視点で、どのNodeに配置されるかを指定
Taint / Toleration
Node視点で、どのPodを弊Nodeに配置していいかを指定
Pod Affinity
Pod AとPod Bと同じNodeに置きたい
Pod Anti-Affinity
Pod AとPod Bを異なるNodeに置きたい
2種類のAffinityのレベル
ハードAffinity
requiredDuringSchedulingIgnoredDuringExecutionを使う
絶対に、その条件を満たしたい
満たさないなら保留になる
ソフトAffinity
preferredDuringSchedulingIgnoredDuringExecutionを使う
可能であれば、その条件を満たしたい