3.10.2. Descheduler ストラテジー

以下の Descheduler ストラテジーを利用できます。

ノードの低い使用率

LowNodeUtilization ストラテジーは、使用率の低いノードを検出し、可能な場合は他のノードから Pod をエビクトし、エビクトされた Pod の再作成がそれらの使用率の低いノードでスケジュールされるようにします。

ノードの使用率の低さは、CPU、メモリーおよび Pod 数のいくつかの設定可能なしきい値パラメーターによって判別されます。ノードの使用率がすべてのパラメーター (CPU、メモリー、Pod の数) の設定済みのしきい値を下回る場合、ノードの使用率は低いとみなされます。

また、CPU、メモリー、Pod 数のターゲットしきい値を設定することもできます。ノードの使用量がいずれかのパラメーターに設定されたターゲットしきい値を上回る場合、ノードの Pod はエビクションについて考慮される可能性があります。

さらに、NumberOfNodes パラメーターを使用して、使用率の低いノードの数が設定された値を上回る場合にのみストラテジーをアクティブにするために設定できます。これは、いくつかのノードの使用率が頻繁に低くなったり、短期間低くなる可能性のある大規模なクラスターの場合に役立ちます。

重複 Pod

RemoveDuplicates ストラテジーでは、1 つの Pod のみが同じノードで実行されているレプリカセット、 レプリケーションコントローラー、デプロイメントまたはジョブに関連付けられます。追加の Pod がある場合、それらの重複 Pod はクラスターに Pod を効果的に分散できるようにエビクトされます。

この状態は、Pod が別のノードに移動し、複数の Pod がそのノード上のレプリカセット、レプリケーションコントローラー、デプロイメント、またはジョブに関連付けられる際に生じる可能性があります。失敗したノードが再び準備可能になると、このストラテジーが重複 Pod をエビクトします。

このストラテジーには、Kind タイプの一覧を指定できるオプションのパラメーター ExcludeOwnerKinds があります。Pod でこれらのタイプのいずれかが OwnerRef として一覧表示される場合、Pod はエビクション対象として考慮されません。

Pod 間の非アフィニティーの違反

RemovePodsViolatingInterPodAntiAffinity ストラテジーは、Pod 間の非アフィニティー (inter-pod anti-affinity) に違反する Pod がノードから削除されるようにします。

この状態は、同じノードですでに実行中の Pod に非アフィニティールールが作成されると発生する可能性があります。

ノードアフィニティーの違反

RemovePodsViolatingNodeAffinity ストラテジーにより、ノードアフィニティーを違反する Pod がノードから削除されるようにします。

この状態は、ノードが Pod のアフィニティールールを満たさなくなる場合に生じる可能性があります。アフィニティールールを満たす別のノードが利用可能な場合、Pod はエビクトされます。

ノードテイントの違反

RemovePodsViolatingNodeTaints ストラテジーは、ノード上の NoSchedule テイントを違反する Pod が削除されるようにします。

これは、Pod がテイント key=value:NoSchedule を容認し、テイントされたノードで実行されている場合に生じる可能性があります。ノードのテイントが更新されるか、または削除される場合、テイントは Pod の容認によって満たされなくなり、Pod はエビクトされます。

再起動の回数が多すぎる

RemovePodsHavingTooManyRestarts ストラテジーは、再起動した回数が多すぎる Pod がノードから削除されるようにします。

この状態は、Pod がこれを起動できないノードにスケジュールされている場合に生じる可能性があります。たとえば、ノードにネットワークの問題があり、ネットワーク化された永続ボリュームをマウントできない場合、Pod は別のノードでスケジュールされるようにエビクトされる必要があります。もう 1 つの例は、Pod がクラッシュループしている場合です。

このストラテジーには、PodRestartThreshold および IncludingInitContainers の 2 つの設定可能なパラメーターがあります。Pod が設定された PodRestartThreshold 値を超えて再起動される場合、Pod はエビクトされます。IncludingInitContainers パラメーターを使用して、Init コンテナーの再起動が PodRestartThreshold 値に計算されるかどうかを指定できます。

Pod の有効期間

PodLifeTime ストラテジーは、古くなり過ぎた Pod をエビクトします。

Pod が MaxPodLifeTimeSeconds パラメーターで設定される秒単位の経過時間に達すると、エビクトされます。