---
title: Amazon EKS
description: Amazon EKS に OpenLM Platform をインストールします。NLB の背後の Ingress、gp3 ストレージ、ノードグループ、Pod 数の上限、AWS のデータサービスについて説明します。
product: OpenLM Platform
---

このページは [ステップ 1](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/install/step-1-prepare-cluster) の前にお読みください。Amazon EKS に固有の内容を扱います。それ以外は標準のインストール手順に従います。

## 始める前に

次の推奨事項に沿ってクラスターを計画します。

| 項目 | 推奨事項 |
|---|---|
| Kubernetes | サポート対象の EKS バージョン（1.29 以降） |
| ノード | マネージドノードグループまたは EKS Auto Mode。標準セットの場合: プライベートサブネットに 3 × `m6i.2xlarge`（8 vCPU / 32 GiB）。より大規模なサイトの場合: [サイジング](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/before-you-start/sizing) を参照してください。 |
| ネットワーク | ノードとデータサービス用のプライベートサブネット、ロードバランサー用のパブリックサブネット、送信トラフィック用の NAT ゲートウェイを備えた VPC |
| アドオン | Amazon VPC CNI、CoreDNS、kube-proxy、**Amazon EBS CSI driver**（マネージドノードグループの場合。Auto Mode には独自のものがあります） |

### ノードあたりの Pod 数

OpenLM Platform は約 85 個の Pod を実行するため、ノードが保持できる Pod 数を確認してください。Amazon VPC CNI では、各 Pod がノードのネットワークインターフェイスから IP アドレスを 1 つ使用するため、ノードあたりの Pod 数はインスタンスタイプによって決まります。たとえば `m6i.xlarge` では 58 個です。十分な数のノードを用意するか、VPC CNI で **prefix delegation** を有効にして（`ENABLE_PREFIX_DELEGATION=true`）上限を引き上げてください。Pod が `Too many pods` で `Pending` のままになる場合は、ノードがこの上限に達しています。

## Ingress

**Traefik** または **ingress-nginx** をインストールし、AWS の **Network Load Balancer** を通じて公開します。これにより、コントローラーは OpenLM Platform が想定するとおり、`openlm-lb-cert` シークレットの証明書を提供します。

次の例では、`traefik/traefik` Helm チャートで Traefik をインストールします。

```yaml
# traefik-values.yaml
service:
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: external          # needs the AWS Load Balancer Controller
    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
    service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing   # or internal
ports:
  web:
    http:
      redirections:
        entryPoint: { to: websecure, scheme: https, permanent: true }
```

```bash
helm repo add traefik https://traefik.github.io/charts
helm install traefik traefik/traefik -n ingress --create-namespace -f traefik-values.yaml
kubectl -n ingress get service traefik    # EXTERNAL-IP is the NLB host name for your DNS CNAME
```

**EKS Auto Mode** では、組み込みのロードバランシングが NLB を作成するため、`aws-load-balancer-scheme` アノテーションだけを残してください。

次に、ワークシートで `INGRESS_CLASS=traefik` を設定します。

:::warning[ALB は使用しない]
Ingress から作成した Application Load Balancer（`ingressClassName: alb`）は、クラスターのシークレットではなく AWS Certificate Manager の証明書で TLS を終端し、Ingress に独自のアノテーションを必要とします。OpenLM Platform の Ingress はこれに対応していません。代わりに、NLB と Traefik または ingress-nginx を使用してください。
:::

NLB で許可する送信元の範囲を制限する場合は、NAT ゲートウェイのパブリック IP を含めてください。プライベートサブネットの Pod は、NAT ゲートウェイを経由してインターネット向けの NLB に到達するためです。**internal** の NLB を使用すれば、この問題はまったく発生しません。

## ストレージ

ノードの種類に合ったクラスを `STORAGE_CLASS` に設定します。

| クラスター | `STORAGE_CLASS` | 注記 |
|---|---|---|
| マネージドノードグループ | `gp3` | 存在しない場合は作成します。EBS CSI プロビジョナー `ebs.csi.aws.com`、`type: gp3`。 |
| EKS Auto Mode | 例: `auto-ebs-gp3` | プロビジョナー `ebs.csi.eks.amazonaws.com`。Auto Mode には既定のクラスがないため、作成してください。 |

次のマニフェストで `gp3` クラスを作成します。

```yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata: { name: gp3 }
provisioner: ebs.csi.aws.com             # Auto Mode: ebs.csi.eks.amazonaws.com
parameters: { type: gp3, encrypted: "true" }
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
```

## ノード設定

[ファイル監視の上限](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/platforms/index#すべてのノードに適用するノード設定) は、ノードグループの起動テンプレート（ユーザーデータ）で設定するか、DaemonSet で設定します。Auto Mode ではノードの設定を変更できないため、まずノード上で値を確認してください。

## ノードグループ

任意の [ノード配置](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/concepts/node-placement) を使用するには、ノードグループにラベルを付け、専用ノードにする場合はテイントも付けます。

```hcl
# Terraform (aws_eks_node_group)
labels = { "openlm.com/role" = "main" }
taint {
  key    = "openlm.com/role"
  value  = "main"
  effect = "NO_SCHEDULE"
}
```

データ処理ジョブ用に、`spark` を付けた 2 つ目のグループを追加します。値は正確に `main` と `spark` です。

## values の設定

Amazon EKS では、ステップ 4 で用意する values 以外に必要な values はありません。ラベル付きのノードグループを使用する場合は、`global.affinity.enabled: true` と `global.taints.enabled: true` も設定してください。

## データサービス

データサービスには、次の AWS サービスまたは独自のものを使用します。

| サービス | AWS の選択肢 | ワークシートの設定 |
|---|---|---|
| SQL Server | **Amazon RDS for SQL Server**（Standard または Enterprise。Express はテスト用のみ）、パブリックアクセス不可 | `SQL_HOST` = RDS エンドポイント、`SQL_ENCRYPT=True` |
| Redis | **Amazon ElastiCache** for Redis または Valkey 7.x、転送中の暗号化と認証トークンを有効にする | `REDIS_TLS=true`、`REDIS_PASSWORD` = 認証トークン |
| Kafka | **Amazon MSK** または独自の Kafka | VPC 内のプレーンテキストのリスナー（ポート 9092）を使用します。TLS または SASL/SCRAM のリスナーしかない MSK の場合は、事前に OpenLM にお問い合わせください。 |
| MongoDB | **MongoDB Atlas**（VPC ピアリングまたは PrivateLink）、またはクラスター内の MongoDB | Atlas の `MONGO_URI`（オプションを含む）。**Amazon DocumentDB はサポートされていません。** |

クラスターがデータサービスに到達できるように、各サービスのセキュリティグループで、**EKS クラスターのセキュリティグループ** からの 1433（SQL）、6379（Redis）、9092（Kafka）への受信トラフィックを許可します。

[ステップ 2](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/install/step-2-data-services) のとおりに RDS 上に 4 つのデータベースを作成します。接続には、RDS インスタンスの作成時に設定した管理者ユーザー（AWS コンソールでは **Master username**）を使用します。

## EKS 固有の確認

次のコマンドで Amazon EKS の設定を確認します。

- `kubectl get nodes -o wide`: すべてのノードが `Ready` で、プライベートサブネットにあること。
- `kubectl -n ingress get service`: コントローラーに `EXTERNAL-IP`（`…elb.amazonaws.com` の名前）があること。
- `kubectl get storageclass`: 設定した `STORAGE_CLASS` が存在すること。
