3.7. Automation controller Pod の専用ノードの指定
専用ノードで制御 Pod を実行することは、制御 Pod と自動化ジョブ Pod を分離し、これら 2 種類の Pod 間のリソース競合を防ぐために重要です。このように分離することで、リソースの制約が原因となるサービスの低下リスクなしに、制御 Pod とそれらの提供するサービスの安定性と信頼性を確保できます。
このリファレンス環境では、実行できる自動化ジョブの数を最大化することに重点が置かれています。つまり、Red Hat OpenShift 環境内で使用可能な 3 つのワーカーノードのうち、1 つのワーカーノードが制御 Pod の実行専用であり、他の 2 つのワーカーノードが自動化ジョブの実行に使用されます。
制御 Pod を実行するワーカーノードを 1 つだけ専用にすると、専用のワーカーノードがダウンした場合に他に起動する場所がないため、サービスが失われる可能性があります。この状況を改善するための実行可能なオプションとして、自動化ジョブを実行するワーカーノードの数を減らすか、追加のワーカーノードを追加して、Red Hat OpenShift クラスター内で追加の制御 Pod レプリカを実行できます。
3.7.1. Automation controller の特定のワーカーノードへの制御 Pod の割り当て リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift で制御 Pod を特定のノードに割り当てるには、Pod 仕様の node_selector フィールドと topology_spread_constraints フィールドを組み合わせて使用します。node_selector フィールドを使用すると、Pod をホストする資格を得るためにノードが対応する必要があるラベル基準を指定できます。たとえば、ラベルが aap_node_type: control のノードを使用する場合、Pod 仕様で次のように指定して、Pod をこのノードに割り当てます。
spec:
...
node_selector: |
aap_node_type: control
topology_spread_constraints は、ラベルが aap_node_type: control のノードでスケジュールできる Pod の最大数 (maxSkew) を 1 に設定します。topologyKey は、ノードのホスト名を示す組み込みラベルである kubernetes.io/hostname に設定されます。whenUnsatisfiable 設定が ScheduleAnyway に指定されているため、制約を満たした必須ラベルを持つノードが不足している場合に Pod をスケジューリングできます。labelSelector は、ラベルが aap_node_type: control の Pod と一致します。これにより、Red Hat OpenShift がノードごとに 1 つのコントローラー Pod のスケジューリングを優先します。ただし、使用可能なワーカーノードよりも多くのレプリカリクエストがある場合、Red Hat OpenShift は、十分なリソースが使用可能であれば、同じ既存のワーカーノードで複数のコントローラー Pod をスケジュールすることができます。
tolerations セクションでは、Dedicated: AutomationController というラベルが付いたノードでのみ Pod をスケジュールできることを指定し、Toleration の効果を NoSchedule に設定して、必要なラベルが割り当てられていないノードで Pod がスケジュールされないようにします。これは topology_spread_contstraints と組み合わせて使用され、Pod をノード間で分散する方法を指定するだけでなく、Pod をスケジュールできるノードを示すためにも使用されます。
spec:
...
topology_spread_constraints: |
- maxSkew: 1
topologyKey: "kubernetes.io/hostname"
whenUnsatisfiable: "ScheduleAnyway"
labelSelector:
matchLabels:
aap_node_type: control
tolerations: |
- key: "dedicated"
operator: "Equal"
value: "AutomationController"
effect: "NoSchedule"
ノードラベルとテイントの適用については、付録C Red Hat OpenShift ノードへのラベルとテイントの適用 で説明しています。ノードセレクター、トポロジー制約、および容認を仕様ファイルに追加する手順は、6章Automation controller のインストール に記載しています。