2.13. Pod スケジューリングの決定に Pod の優先度を含める
Pod 優先度は、Pod を重要度順にランク付けしてスケジューリング順序に影響を与え、リソース不足のエビクションを並べ替え、プリエンプションを有効にします。これにより、リソースが制約されている場合に、優先度の高い Pod が優先度の低い Pod をエビクトできます。
優先度およびプリエンプションを使用するには、Pod の相対的な重みを定義する優先度クラスを作成します。次に Pod 仕様で優先度クラスを参照し、スケジューリングの重みを適用します。
2.13.1. Pod の優先度について リンクのコピーリンクがクリップボードにコピーされました!
Pod の優先度は、整数値を持つ優先度クラスを使用してスケジューリング順序を決定します。要件を満たしている場合、優先度の高い Pod がキューの前方に配置され、優先度の低い Pod よりも先にスケジューリングされます。
2.13.1.1. Pod の優先度クラス リンクのコピーリンクがクリップボードにコピーされました!
Pod には優先度クラスを割り当てることができます。これは、名前から優先度の整数値へのマッピングを定義する namespace を使用していないオブジェクトです。値が高いと優先度が高くなります。
優先度およびプリエンプションは、1000000000 (10 億) 以下の 32 ビットの整数値を取ることができます。プリエンプションや退避を実行すべきでない Critical Pod 用に 10 億以上の数値を予約する必要があります。デフォルトで、OpenShift Container Platform には 2 つの予約された優先度クラスがあり、これらは重要なシステム Pod で保証されたスケジューリングが適用されるために使用されます。
$ oc get priorityclasses
出力例
NAME VALUE GLOBAL-DEFAULT AGE
system-node-critical 2000001000 false 72m
system-cluster-critical 2000000000 false 72m
openshift-user-critical 1000000000 false 3d13h
cluster-logging 1000000 false 29s
system-node-critical: この優先度クラスには 2000001000 の値があり、ノードから退避すべきでないすべての Pod に使用されます。この優先度クラスを持つ Pod の例としては、
ovnkube-nodeなどがあります。数多くの重要なコンポーネントには、デフォルトでsystem-node-criticalの優先度クラスが含まれます。以下は例になります。- master-api
- master-controller
- master-etcd
- ovn-kubernetes
- sync
system-cluster-critical: この優先度クラスには 2000000000 (20 億) の値があり、クラスターに重要な Pod に使用されます。この優先度クラスの Pod は特定の状況でノードから退避される可能性があります。たとえば、
system-node-critical優先度クラスで設定される Pod が優先される可能性があります。この場合でも、この優先度クラスではスケジューリングが保証されます。この優先度クラスを持つ可能性のある Pod の例として、fluentd、descheduler などのアドオンコンポーネントなどがあります。数多くの重要なコンポーネントには、デフォルトでsystem-cluster-critical優先度クラスが含まれます。以下はその一例です。- fluentd
- metrics-server
- descheduler
-
openshift-user-critical:
priorityClassNameフィールドを、リソース消費をバインドできず、予測可能なリソース消費動作がない重要な Pod で使用できます。openshift-monitoringおよびopenshift-user-workload-monitoringnamespace 下にある Prometheus Pod は、openshift-user-criticalpriorityClassNameを使用します。モニタリングのワークロードはsystem-criticalを最初のpriorityClassとして使用しますが、これにより、モニタリング時にメモリーが過剰に使用され、ノードが退避できない問題が発生します。その結果、モニタリングの優先度が下がり、スケジューラーに柔軟性が与えられ、重要なノードの動作を維持するために重いワークロード発生します。 - cluster-logging: この優先度は、Fluentd Pod が他のアプリケーションより優先してノードにスケジュールされるようにするために Fluentd で使用されます。
2.13.1.2. Pod の優先度名 リンクのコピーリンクがクリップボードにコピーされました!
1 つ以上の優先度クラスを準備した後に、Pod 仕様に優先度クラス名を指定する Pod を作成できます。優先度のアドミッションコントローラーは、優先度クラス名フィールドを使用して優先度の整数値を設定します。名前付きの優先度クラスが見つからない場合、Pod は拒否されます。