DevOps-KubernetesはてなブックマークTwitterスポンサーリンクはじめにNodeにあるLabelを元にPodのスケジュールを行うのがNodeAffinityで、NodeにあるTaintを元にPodのスケジュールを行うのがTolerationsです。この似通った「Taints/TolerationとNodeAffinityの違い」について分かりやすく解説します。大まかな方針で説明しているのでご容赦ください。Anti-Affinityは、既にスケジュールされているPodのラベルを元に自Podのスケジュールを行う機能なのでまったく別者です。Taints/Tolerationの動きノードが3つあるとして、Node01には"Blue"というTaint(汚染)を与え、Node02には"Red"というTaintを与え、残りのNode03には何も与えません。その場合、例えばPodにToleration(容認)が何も与えられていない場合はBlueやRedの汚れが受け入れられないので何も汚れがないNode03に展開されます。Podに"Blue"の容認を与えた場合はNode01にも展開可能になりますが、Node03に展開される場合もあります。NodeAffinityの動きノードが3つあるとして、Node01には"Blue"というLabel(ラベル)を与え、Node02には"Red"というLabelを与え、残りのNode03には何も与えません。その場合、例えばPodにmatchExpressionsが何も設定されていないPodは全Nodeに展開される可能性があります。matchExpressionsに"Blue"を指定した場合はNode01に展開されます。Taints/TolerationsとNodeAffinityの違い上の例を見ると分かりますが、Podをスケジュールする方針が異なります。Taints/Tolerationsの場合は展開したくないNodeを明示的に指定することでそのNode以外にスケジューリングされ、NodeAffinityの場合は展開したいNodeを明示的に指定することでそのNodeにスケジューリングされます。要は、MasterNodeにPodを展開させたくない場合はTaintでMasterを汚染させて置いたり、特定のGPUが積まれたNodeが必要なPod存在するのであればNodeAffinityでラベルを指定しにいく使い方をします。ちなみにこれらは両方を設定することで"Blue"のNodeに”Blue"を許容&ラベル指定したPodが展開され、何もPodに指定がない場合は”Blue"や”Red"に汚染されていないNodeにPodを展開することができます。終わりにTolerationsにおいてPreferNoScheduleを指定することで条件にマッチしていないPodを受け入れたりと上記の例に即さない細かな制御は可能ですが、大きな方針として違いを理解する参考になれば幸いです。以上、ご参考になれば幸いです。Nodeに付与されたラベルを外す。Page引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。