Member-only story
Strategies for Kubernetes Pod Placement and Scheduling
Kubernetesには、Pod配置戦略を処理する最も洗練されたスケジューラーがあります。 Podspecに記載されているリソースリクエストに基づいて、Kubernetesスケジューラーは、Podを走らせるのに最も適切なノードを自動的に選択します。
しかし、Podとノードまたは2つの特定のPodの間のマッチメイキングを有効にするために、スケジューリングプロセスに介入する必要があるシナリオがあります。 Kubernetesは、Pod配置ロジックをコントロールする強力なメカニズムを提供します。
それではKubernetesのデフォルトのスケジューリング決定に影響を与える重要なテクニックをみていきましょう。
Node Affinity/Anti-Affinity
Kubernetesは当初から、ラベルとセレクターを使用してリソースをグループ化することに依存していました。 たとえば、サービスはセレクターを使用して、トラフィックを選んで受信する特定のラベルでPodをフィルタリングします。 ラベルとセレクターは、単純な等値ベースの条件(= and !=)を使用してルールを評価します。 特定のノードでPodを強制的にスケジュールするnodeSelector機能を介して、同じテクニックがノードに拡張されました。
最終的に、ラベルとセレクターは、in、notin、exists演算子に基づいた高度なフィルタリングテクニックをもたらしたセットベースのクエリに対応するようになりました。 等式ベースの要件と組み合わせて、セットベースの要件でKubernetesの中でリソースをフィルタリングするための複雑な手法が使えるようになりました。
ノードアフィニティ/アンチアフィニティは、ラベルとアノテーションの式での セットベースのフィルタリング技術を使用して、特定のノード上のPodの配置ロジックを設定します。 アノテーションは、セレクターにエクスポーズされない追加のメタデータを提供します。つまり、アノテーションに使用されるキーをクエリおよびフィルターリソースに含めることはできません。 ただし、ノードアフィニティにより、式でアノテーションを使用することができます。 非アフィニティは、Podがルールに一致するノードをスケジュールしないようにします。
クエリで複雑なロジックを使用する機能とは別に、ノードアフィニティ/非アフィニティは配置ロジックに厳しいルール(ハードルール)とそこまで厳しくないルール(ソフトルール)を課すことができます。 ハードルールは、Podが条件に一致しないノードに配置されるのをブロックする可能性がある厳格なポリシー適用します。 ソフトルールは、指定された条件に一致するノードがあるかどうかを最初にチェックし、一致しない場合は、デフォルトのスケジューリングモードを使用してPodを配置します。
requiredDuringSchedulingIgnoredDuringExecution と preferredDuringSchedulingIgnoredDuringExecutionという式には、それぞれハードルールとソフトルールを適用します。