4.7. マシンセットリソースのインフラストラクチャーノードへの割り当て
インフラストラクチャーマシンセットの作成後、worker
および infra
ロールが新規の infra ノードに適用されます。infra
ロールが割り当てられたノードは、worker
ロールも適用されている場合でも、環境を実行するために必要なサブスクリプションの合計数にはカウントされません。
ただし、infra ノードに worker ロールが割り当てられている場合は、ユーザーのワークロードが誤って infra ノードに割り当てられる可能性があります。これを回避するには、taint を、制御する必要のある Pod の infra ノードおよび toleration に適用できます。
4.7.1. taint および toleration を使用したインフラストラクチャーノードのワークロードのバインディング
infra
および worker
ロールが割り当てられているインフラストラクチャーノードがある場合、ユーザーのワークロードがそのノードに割り当てられないようにノードを設定する必要があります。
インフラストラクチャーノード用に作成した infra,worker
ラベルを両方とも保持し、ユーザーのワークロードがスケジュールされるノードを taint および toleration を使用して管理することを推奨します。ノードから worker
ラベルを削除する場合には、カスタムプールを作成して管理する必要があります。master
または worker
以外のラベルが割り当てられたノードは、カスタムプールなしには MCO で認識されません。worker
ラベルを維持すると、カスタムラベルを選択するカスタムプールが存在しない場合に、ノードをデフォルトのワーカーマシン設定プールで管理できます。infra
ラベルは、サブスクリプションの合計数にカウントされないクラスターと通信します。
前提条件
-
追加の
MachineSet
を OpenShift Container Platform クラスターに設定します。
手順
インフラストラクチャーノードに taint を追加して、そのノードにユーザーのワークロードがスケジュールされないようにします。
ノードに taint があるかどうかを判別します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe nodes <node_name>
$ oc describe nodes <node_name>
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 ...
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 を設定していない場合は、以下を実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm taint nodes <node_name> <key>=<value>:<effect>
$ oc adm taint nodes <node_name> <key>=<value>:<effect>
以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm taint nodes node1 node-role.kubernetes.io/infra=reserved:NoSchedule
$ oc adm taint nodes node1 node-role.kubernetes.io/infra=reserved:NoSchedule
ヒントまたは、Pod の spec を編集して taint を追加することもできます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 kind: Node metadata: name: node1 # ... spec: taints: - key: node-role.kubernetes.io/infra value: reserved effect: NoSchedule # ...
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
taint effect を持つnode1
に taint を適用します。effect がNoSchedule
のノードは、taint を容認する Pod のみをスケジュールしますが、既存の Pod はノードにスケジュールされたままになります。注記Descheduler が使用されると、ノードの taint に違反する Pod はクラスターからエビクトされる可能性があります。
インフラストラクチャーノードにスケジュールする Pod (ルーター、レジストリー、モニタリングワークロードなど) に toleration を追加します。前の例を参考にして、
Pod
オブジェクトの spec に次の toleration を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 kind: Pod metadata: annotations: # ... spec: # ... tolerations: - key: node-role.kubernetes.io/infra value: reserved effect: NoSchedule operator: Equal
apiVersion: v1 kind: Pod metadata: annotations: # ... spec: # ... tolerations: - key: node-role.kubernetes.io/infra
1 value: reserved
2 effect: NoSchedule
3 operator: Equal
4 この toleration は、
oc adm taint
コマンドで作成された taint と一致します。この toleration を持つ Pod は、インフラストラクチャーノードにスケジュールできます。注記OLM によってインストールされた Operator の Pod は、必ずしもインフラストラクチャーノードに移動できません。Operator Pod を移動する機能は、各 Operator の設定によって異なります。
- スケジューラーを使用して、Pod をインフラストラクチャーノードにスケジュールします。詳細は、「スケジューラーによる Pod 配置の制御」のドキュメントを参照してください。
- 新しいインフラストラクチャーノード上の不要なワークロードやノードに属さないワークロードを削除します。「OpenShift Container Platform インフラストラクチャーコンポーネント」で、インフラストラクチャーノードでの使用がサポートされているワークロードのリストを参照してください。
関連情報
- ノードへの Pod のスケジューリングに関する一般的な情報は、Controlling pod placement using the scheduler を参照してください。