多数のノード プールを持つ Kubernetes クラスターがあります。Kubernetes が選択したノード プールに使用可能なリソースが十分にないため、デプロイメントが失敗することがあります。
ポッドのセット全体が要求したリソース量を持つノード プールを Kubernetes に強制的に選択させる方法はありますか?
答え1
ポッドを特定のノード セットでのみ実行できるように制限することができます。これを行うにはいくつかの方法がありますが、推奨される方法はラベル セレクターを使用することです。
Kubernetes が特定の Pod をスケジュールする場所を選択するには、次のいずれかの方法を使用できます。
ノードセレクタフィールドマッチングノードラベル
親和性と反親和性
nodeName フィールド
あノードセレクターポッドで指定されたノードとセレクターのカスタム ラベルを使用して定義されたキー/値のペアのマップを指定します。
ポッドがノード上で実行されるためには、ポッドにノードのラベルと同じキー/値のノード セレクターが必要です。
注: 既存のスケジュールされたポッドにノードセレクターを直接追加することはできません。
nodeSelectorは、特定のラベルを持つノードにPodを制限する最も簡単な方法ですが、親和性と反親和性定義できる制約の種類が拡張されます。アフィニティ機能は、次の 2 種類のアフィニティで構成されます。
- ノード アフィニティは nodeSelector フィールドと同様に機能しますが、より表現力があり、ソフト ルールを指定できます。
- ポッド間のアフィニティ/アンチアフィニティを使用すると、他のポッドのラベルに対してポッドを制約できます。
ノード名については参照する詳細についてはリンクをご覧ください。
ノードアフィニティはポッドをノードセットに引き付ける特性であり、前述のようにノードセレクターはポッドを制限するために使用されます。汚染と寛容。
テイントは、ノードがポッドのセットを拒絶できるようにするという点で逆です。ポッドには許容度が適用され、ポッドが一致するテイントを持つノードにスケジュールされるようにします。テイントと許容度は連携して、ポッドが不適切なノードにスケジュールされないようにします。1 つ以上のテイントがノードに適用されます。これにより、ノードはテイントを許容しないポッドを拒否する必要があることが示されます。