メインコンテンツまでスキップ

Amazon EKS

このページは ステップ 1 の前にお読みください。Amazon EKS に固有の内容を扱います。それ以外は標準のインストール手順に従います。

始める前に​

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

項目推奨事項
Kubernetesサポート対象の EKS バージョン(1.29 以降)
ノードマネージドノードグループまたは EKS Auto Mode。標準セットの場合: プライベートサブネットに 3 × m6i.2xlarge(8 vCPU / 32 GiB)。より大規模なサイトの場合: サイジング を参照してください。
ネットワークノードとデータサービス用のプライベートサブネット、ロードバランサー用のパブリックサブネット、送信トラフィック用の 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 をインストールします。

# 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 }
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 を設定します。

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 クラスを作成します。

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

ノード設定​

ファイル監視の上限 は、ノードグループの起動テンプレート(ユーザーデータ)で設定するか、DaemonSet で設定します。Auto Mode ではノードの設定を変更できないため、まずノード上で値を確認してください。

ノードグループ​

任意の ノード配置 を使用するには、ノードグループにラベルを付け、専用ノードにする場合はテイントも付けます。

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

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

ステップ 2 のとおりに 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 が存在すること。

ドキュメントチームは、大規模言語モデルを使ってこのページを下書きすることがあります。公開前に、テクニカルライターがすべてのページをレビューし、製品と照らし合わせて検証します。最終的な判断は人間が行います。