5.10.2. オーバーコミットメントと quality of service クラスについて
オーバーコミット環境では、QoS(Quality of Service) クラスを使用することで、クラスターが適切に設定されていることを確認できます。
ノードは、要求を指定しない Pod がスケジュールされている場合やノードのすべての Pod での制限の合計が利用可能なマシンの容量を超える場合に オーバーコミット されます。
過剰なリソースが投入された環境では、ノード上の Pod が、特定の時点で利用可能なコンピューティングリソースよりも多くのリソースを使用しようとする可能性があります。これが生じると、ノードはそれぞれの Pod に優先順位を指定する必要があります。この決定を行うために使用される機能は、サービス品質 (QoS) クラスと呼ばれます。
Pod は、優先度の高い順に 3 つの QoS クラスの 1 つとして指定されます。
| 優先順位 | クラス名 | 説明 |
|---|---|---|
| 1 (最高) | Guaranteed | 制限およびオプションの要求がすべてのリソースに設定されている場合 (0 と等しくない) でそれらの値が等しい場合、Pod は Guaranteed として分類されます。 |
| 2 | Burstable | 制限およびオプションの要求がすべてのリソースに設定されている場合 (0 と等しくない) でそれらの値が等しくない場合、Pod は Burstable として分類されます。 |
| 3 (最低) | BestEffort | 要求および制限がリソースのいずれにも設定されない場合、Pod は BestEffort として分類されます。 |
メモリーは圧縮できないリソースであるため、メモリー不足の状態では、最も優先順位の低いコンテナーが最初に強制終了されます。
- Guaranteed コンテナーは優先順位が最も高いコンテナーとして見なされ、保証されます。強制終了されるのは、これらのコンテナーで制限を超えるか、システムがメモリー不足の状態にあるものの、退避できる優先順位の低いコンテナーが他にない場合のみです。
- システムメモリー負荷が高い状況下では、バースト可能な コンテナーは、要求容量を超過し、かつ他に ベストエフォート型の コンテナーが存在しない場合、終了される可能性が高くなります。
- BestEffort コンテナーは優先順位の最も低いコンテナーとして処理されます。これらのコンテナーのプロセスは、システムがメモリー不足になると最初に強制終了されます。
5.10.2.1. Quality of Service (QoS) 層でのメモリーの予約方法について リンクのコピーリンクがクリップボードにコピーされました!
qos-reserved パラメーターを使用して、特定の QoS レベルの Pod で予約されるメモリーのパーセンテージを指定することができます。この機能は、要求されたリソースを予約することで、QoS クラスの低い Pod が QoS クラスの高い Pod によって要求されたリソースを使用できないようにすることを目的としています。
OpenShift Container Platform は、以下のように qos-reserved パラメーターを使用します。
-
qos-reserved=memory=100%という値を設定すると、バースト安定型およびベストエフォート型のQoS クラスが、より上位の QoS クラスによって要求されたメモリーを消費することを防止します。これにより、GuaranteedおよびBurstableワークロードのメモリーリソースの保証レベルを上げることが優先され、BestEffortおよびBurstableワークロードでの OOM が発生するリスクが高まります。 -
qos-reserved=memory=50%という値を設定すると、バースト安定型およびベストエフォート型のQoS クラスは、より上位の QoS クラスが要求するメモリーの半分を消費できるようになります。 -
qos-reserved=memory=0%の値を設定すると、バースト可能およびベストエフォート型のQoS クラスは、利用可能な場合はノードに割り当て可能な最大量までメモリーを消費できますが、保証付きワークロードが要求されたメモリーにアクセスできないリスクが高まります。この状況により、この機能は無効にされています。