24.6. Pod エビクションについて
エビクションしきい値に達し、猶予期間を経過している場合、ノードはシグナルが定義されたしきい値を下回るまで Pod のエビクトのプロセスを実行します。
ノードは、エビクション用に Pod を QoS (Quality of Service) でランク付けします。同じ QoS (Quality of Service) を持つ Pod において、ノードは Pod のスケジューリング要求に対するコンピュートリソースの消費によって Pod をランク付けします。
各 QoS にはメモリー不足のスコアがあります。Linux out-of-memory ツール (OOM killer) はスコアを使用して、終了する Pod を判別します。詳細は、QoS および Out of Memory Killer について を参照してください。
次の表に、各 QoS (Quality of Service) レベルと関連するメモリー不足スコアを示します。
QoS (Quality of Service) | 説明 |
---|---|
| 要求に対してリソースを最も多く消費する Pod が最初に失敗します。いずれの Pod も要求を超えていない場合、ストラテジーはリソースの最大コンシューマーをターゲットにします。 |
| そのリソースの要求に対してリソースを最も多く消費する Pod が最初に失敗します。いずれの Pod も要求を超えていない場合、ストラテジーはリソースの最大コンシューマーをターゲットにします。 |
| リソースの最大量を消費する Pod が最初に失敗します。 |
ノードやコンテナーエンジンなどのシステムデーモンが system-reserved
割り当てを使用して、予約されたよりも多くのリソースを消費しない場合や、ノードに Guaranteed QoS (Quality of Service) Pod のみが残っている場合は、Guaranteed QoS (Quality of Service) Pod が別の Pod によるリソース消費のためにエビクトされることはありません。
ノードに Guaranteed QoS (Quality of Service) Pod のみが残っている場合、ノードはノードの安定性に最も影響の少ない Pod をエビクトし、他の Guaranteed QoS (Quality of Service) Pod に対する予想外の消費による影響を制限します。
ローカルディスクは、best-effort の QoS (Quality of Service) リソースです。必要な場合は、ノードはディスク不足の発生時にディスク領域を回収するために Pod を 1 度に 1 つずつエビクトします。ノードは QoS に基づいて Pod をランク付けします。ノードが空き inode の不足に対応している場合、ノードは QoS (Quality of Service) が最も低い Pod を最初にエビクトして inode を回収します。ノードが利用可能なディスクの不足状態に対応している場合、ノードはローカルディスクを最も多く消費する QoS 内の Pod をランク付けし、それらの Pod を先にエビクトします。
24.6.1. QoS および Out of Memory Killer について
ノードによるメモリーの回収が可能になる前に、システムの OOM (Out of Memory) イベントが発生する場合、ノードは OOM killer に依存して応答します。
ノードは、Pod の QoS に基づいて各コンテナーの oom_score_adj
値を設定します。
QoS (Quality of Service) | oom_score_adj Value |
---|---|
| -998 |
| min(max(2, 1000 - (1000 * memoryRequestBytes) / machineMemoryCapacityBytes), 999) |
| 1000 |
ノードがシステムの OOM イベントに直面する前にノードがメモリーを回収できない場合、OOM killer プロセスは OOM スコアを計算します。
% of node memory a container is using + oom_score_adj = oom_score
次にノードは、スコアの最も高いコンテナーを終了します。
スケジューリング要求に関連してメモリーを最も多く消費する、QoS (Quality of Service) の最も低いレベルにあるコンテナーが最初に終了します。
Pod の削除とは異なり、Pod コンテナーが OOM が原因で終了する場合、ノードはノードの再起動ポリシーに従ってコンテナーを再起動できます。