6.7. マシンセットリソースのインフラストラクチャーノードへの割り当て
インフラストラクチャーマシンセットの作成後、worker および infra ロールが新規の infra ノードに適用されます。infra ロールが割り当てられたノードは、worker ロールも適用されている場合でも、環境を実行するために必要なサブスクリプションの合計数にはカウントされません。
ただし、infra ノードに worker ロールが割り当てられている場合は、ユーザーのワークロードが誤って infra ノードに割り当てられる可能性があります。これを回避するには、taint を、制御する必要のある Pod の infra ノードおよび toleration に適用できます。
6.7.1. taint および toleration を使用したインフラストラクチャーノードのワークロードのバインディング リンクのコピーリンクがクリップボードにコピーされました!
infra および worker ロールが割り当てられているインフラストラクチャーノードがある場合、ユーザーのワークロードがこれに割り当てられないようにノードを設定する必要があります。
インフラストラクチャーノード用に作成されたデュアル infra,worker ラベルを保持し、テイントおよび容認(Toleration)を使用してユーザーのワークロードがスケジュールされているノードを管理することを推奨します。ノードから worker ラベルを削除する場合には、カスタムプールを作成して管理する必要があります。master または worker 以外のラベルが割り当てられたノードは、カスタムプールなしには MCO で認識されません。worker ラベルを維持すると、カスタムラベルを選択するカスタムプールが存在しない場合に、ノードをデフォルトのワーカーマシン設定プールで管理できます。infra ラベルは、サブスクリプションの合計数にカウントされないクラスターと通信します。
前提条件
-
追加の
MachineSetを OpenShift Container Platform クラスターに設定します。
手順
テイントをインフラストラクチャーノードに追加し、ユーザーのワークロードをこれにスケジュールできないようにします。
ノードに taint があるかどうかを判別します。
$ oc describe nodes <node_name>出力例
oc describe node ci-ln-iyhx092-f76d1-nvdfm-worker-b-wln2l Name: ci-ln-iyhx092-f76d1-nvdfm-worker-b-wln2l Roles: worker ... Taints: node-role.kubernetes.io/infra=reserved:NoSchedule ...この例では、ノードに taint があることを示しています。次の手順に進み、toleration を Pod に追加してください。
ユーザーワークロードをスケジューリングできないように、taint を設定していない場合は、以下を実行します。
$ oc adm taint nodes <node_name> <key>=<value>:<effect>以下に例を示します。
$ oc adm taint nodes node1 node-role.kubernetes.io/infra=reserved:NoScheduleヒントまたは、Pod 仕様を編集してテイントを追加できます。
apiVersion: v1 kind: Node metadata: name: node1 # ... spec: taints: - key: node-role.kubernetes.io/infra value: reserved effect: NoSchedule # ...これらの例では、テイントを
node-role.kubernetes.io/infraキーとNoScheduleテイントの効果を持つnode1にテイントを配置します。effect がNoScheduleのノードは、taint を容認する Pod のみをスケジュールしますが、既存の Pod はノードにスケジュールされたままになります。NoScheduleテイントをインフラストラクチャーノードに追加した場合、そのノードのデーモンセットによって制御される Pod はmisscheduledとしてマークされます。Red Hat ナレッジベースソリューション誤って、Pod を削除するか、または Pod に容認を追加する 必要があり ます。Operator によって管理されるデーモンセットオブジェクトに容認を追加できないことに注意してください。注記Descheduler が使用されると、ノードのテイントに違反する Pod はクラスターからエビクトされる可能性があります。
ルーター、レジストリー、およびモニタリングのワークロードなどのインフラストラクチャーノードでスケジュールする必要のある Pod に容認を追加します。直前の例を参照し、以下の容認を
Podオブジェクト仕様に追加します。apiVersion: v1 kind: Pod metadata: annotations: # ... spec: # ... tolerations: - key: node-role.kubernetes.io/infra1 value: reserved2 effect: NoSchedule3 operator: Equal4 こ toleration は、
oc adm taintコマンドで作成された taint と一致します。この容認のある Pod はインフラストラクチャーノードにスケジュールできます。注記OLM でインストールされた Operator の Pod をインフラストラクチャーノードに移動することは常に可能な訳ではありません。Operator Pod を移動する機能は、各 Operator の設定によって異なります。
- スケジューラーを使用して Pod をインフラストラクチャーノードにスケジュールします。詳細は、Controlling Pod placement using the scheduler を参照してください。
- 新しいインフラストラクチャーノードで必要でない、または属さないワークロードを削除します。OpenShift Container Platform インフラストラクチャーコンポーネントのインフラストラクチャーノードでサポートされるワークロードのリストを参照してください。