第3章 専用ノードの指定
kubernetes クラスターは、多数の仮想マシンまたはノード (通常は 2 - 20 ノード) で実行します。Pod は、これらのノードのいずれかでスケジュールできます。新しい Pod を作成またはスケジュールするときは、topology_spread_constraints
設定を使用して、スケジュールまたは作成時に新しい Pod を基になるノードに分散する方法を設定します。
単一ノードで Pod をスケジュールしないでください。そのノードに障害が発生すると、それらの Pod が提供するサービスも失敗します。
自動化ジョブ Pod とは異なるノードで実行するようにコントロールプレーンノードをスケジュールします。コントロールプレーン Pod がジョブ Pod とノードを共有する場合は、コントロールプレーンがリソース不足になり、アプリケーション全体のパフォーマンスが低下する可能性があります。
3.1. 特定のノードへの Pod の割り当て
Operator が作成した Automation Controller Pod を、特定のサブセットのノードで実行するように制限できます。
-
node_selector
およびpostgres_selector
は、指定されたすべてのキー、値、またはそのペアに一致するノードでのみ実行されるように Automation Controller Pod を制限します。 -
tolerations
とpostgres_tolerations
を使用すると、Automation Controller Pod を taint が一致するノードにスケジュールできます。詳細は、Kubernetes ドキュメントの taint と toleration 参照してください。
以下の表は、YAML の Automation Controller の仕様セクションで (または OpenShift UI フォームを使用して) 設定できる設定とフィールドを示しています。
名前 | 説明 | デフォルト |
---|---|---|
| プルするイメージのパス | postgres |
| プルするイメージのバージョン | 13 |
| AutomationController Pod の nodeSelector | “”’’ |
| AutomationController Pod の topologySpreadConstraints | “”’’ |
| AutomationController Pod の toleration | “”’’ |
| AutomationController Pod のアノテーション | “”’’ |
| Postgres Pod の nodeSelector | “”’’ |
| Postgres Pod の toleration | “”’’ |
topology_spread_constraints
は、ノードセレクターに一致するコンピュートノード全体にコントロールプレーン Pod を分散するのに役立ちます。たとえば、このオプションの maxSkew
パラメーターを 100
に設定すると、使用可能なノード全体に最大限分散することを意味します。したがって、一致するコンピュートノードが 3 つと Pod が 3 つある場合、各コンピュートノードに 1 つの Pod が割り当てられます。このパラメーターは、コントロールプレーン Pod が互いにリソースをめぐって競合するのを防ぐのに役立ちます。
コントローラー Pod を特定のノードに制限するカスタム設定の例
spec: ... node_selector: | disktype: ssd kubernetes.io/arch: amd64 kubernetes.io/os: linux topology_spread_constraints: | - maxSkew: 100 topologyKey: "topology.kubernetes.io/zone" whenUnsatisfiable: "ScheduleAnyway" labelSelector: matchLabels: app.kubernetes.io/name: "<resourcename>" tolerations: | - key: "dedicated" operator: "Equal" value: "AutomationController" effect: "NoSchedule" postgres_selector: | disktype: ssd kubernetes.io/arch: amd64 kubernetes.io/os: linux postgres_tolerations: | - key: "dedicated" operator: "Equal" value: "AutomationController" effect: "NoSchedule"
spec:
...
node_selector: |
disktype: ssd
kubernetes.io/arch: amd64
kubernetes.io/os: linux
topology_spread_constraints: |
- maxSkew: 100
topologyKey: "topology.kubernetes.io/zone"
whenUnsatisfiable: "ScheduleAnyway"
labelSelector:
matchLabels:
app.kubernetes.io/name: "<resourcename>"
tolerations: |
- key: "dedicated"
operator: "Equal"
value: "AutomationController"
effect: "NoSchedule"
postgres_selector: |
disktype: ssd
kubernetes.io/arch: amd64
kubernetes.io/os: linux
postgres_tolerations: |
- key: "dedicated"
operator: "Equal"
value: "AutomationController"
effect: "NoSchedule"