---
title: ノード配置
description: OpenLM Platform チャートがどのノードでどの Pod を実行するかを決める仕組み（openlm.com/role ラベル、taint）と、配置を有効にするタイミングについて説明します。
product: OpenLM Platform
---

OpenLM Platform を専用のノードで実行したい場合、たとえばほかのワークロードと分離したい場合や、データ処理ジョブに専用のノードを割り当てたい場合は、配置を有効にします。

既定では、Kubernetes は空きのある任意のノードで Pod を実行します。ほとんどのインストールではこれで問題なく、このガイドでもこの設定を使用します。つまり、配置は **オフ** です。

## チャートの仕組み

すべてのコンポーネントは、次の 2 つのグループのいずれかに属します。

| グループ | ラベルの値 | 含まれるもの |
|---|---|---|
| サービスと UI | `main` | ほぼすべて（約 100 個のコンポーネント） |
| データ処理 | `spark` | レポートデータを準備するジョブ: `sparkmongo`、`sparkmssql`、`licenseconcurency`、`officetimecalculation`、`denialsaggregation` と、いくつかの任意のジョブ |

配置を有効にすると、各 Pod は、`openlm.com/role` ラベルが自身のグループに設定されたノードを **必須** とし、同じキーと値の taint を **許容** します。

```yaml
# what the chart adds to every pod when placement is on (component in group "main")
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
        - matchExpressions:
            - { key: openlm.com/role, operator: In, values: [main] }
tolerations:
  - { key: openlm.com/role, operator: Equal, value: main, effect: NoSchedule }
```

2 つのスイッチは互いに独立しています。

| 設定 | 動作 |
|---|---|
| `global.affinity.enabled: true` | Pod は `openlm.com/role=main`（または `=spark`）のラベルが付いたノード **でのみ** 実行されます。 |
| `global.taints.enabled: true` | Pod は `openlm.com/role=main:NoSchedule`（または `spark`）の taint が付いたノードで **実行できます**。ほかのワークロードは taint によってこれらのノードから除外されます。 |

一般的な組み合わせは両方をオンにすることで、OpenLM Platform だけが使用する専用ノードになります。

:::danger[アフィニティを有効にする前にノードにラベルを付ける]
`global.affinity.enabled: true` を設定すると、そのラベルを持つノードがない場合、Pod は `Pending` のまま永久に待機します。最初に、グループごとに少なくとも 1 つのノードにラベルを付けてください。`main` と `spark` の両方のグループにノードが必要です。
:::

## 配置を有効にする

配置を有効にするには、次の手順を実行します。

1. ノードにラベルを付けます（専用ノードにする場合は taint も付けます）。

   ```bash
   kubectl label node <node> openlm.com/role=main
   kubectl taint node <node> openlm.com/role=main:NoSchedule      # optional: keep other pods off
   kubectl label node <spark-node> openlm.com/role=spark
   kubectl taint node <spark-node> openlm.com/role=spark:NoSchedule
   ```

   マネージドクラスターでは、新しいノードにも自動的に適用されるよう、ラベルと taint を **ノードグループまたはノードプール** に設定します。[EKS](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/platforms/eks#ノードグループ) と [AKS](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/platforms/aks#ノードプール) を参照してください。

2. `openlm-values.yaml` で両方のスイッチをオンにします。

   ```yaml
   global:
     affinity: { enabled: true }
     taints:   { enabled: true }
   ```

3. [ステップ 6](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/install/step-6-install) と同じ `helm upgrade --install` コマンドで変更を適用します。

:::warning[ラベルの値は正確に `main` と `spark` です]
`main-workload` や `reporting` などの値は機能しません。ほかのテンプレートから作成したノードグループは、異なる値を使用していることがよくあります。`kubectl get nodes -L openlm.com/role` で確認してください。
:::

## データサービスと配置

配置の設定は、OpenLM Platform のコンポーネントにのみ適用されます。MongoDB、Kafka、Redis をクラスター内で実行する場合は、それぞれのチャートの設定で配置します。一般的な構成は次の表のとおりです。

| ノードグループ | ラベル | 実行するもの |
|---|---|---|
| プラットフォーム | `openlm.com/role=main` | OpenLM のサービスと UI、API ゲートウェイ |
| データ処理 | `openlm.com/role=spark` | レポートデータのジョブ |
| インフラストラクチャ | 独自のラベル | MongoDB、Kafka、Redis、Ingress コントローラー |

## ノードにラベルを付けられない場合

一部のマネージドクラスターや共有クラスター（たとえば共有 OpenShift クラスター上の namespace）では、ノードにラベルを付ける権限がありません。その場合は両方の設定を `false` のままにしてください。OpenLM Platform は配置なしでも問題なく動作します。
