---
title: Azure Kubernetes Service (AKS)
description: Azure Kubernetes Service (AKS) に OpenLM Platform をインストールします。Ingress、Azure Disk ストレージ、ノードプール、NAT による送信、Azure のデータサービスについて説明します。
product: OpenLM Platform
---

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

## 始める前に

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

| 項目 | 推奨事項 |
|---|---|
| Kubernetes | LTS プランなしで AKS がサポートするバージョン（`az aks get-versions` で確認） |
| ノード | AKS アドオン用のシステムプールと、OpenLM Platform 用のユーザープール。標準セットの場合: ユーザープールに 3 × `Standard_D8s_v5`（8 vCPU / 32 GiB）。より大規模なサイトの場合: [サイジング](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/before-you-start/sizing) を参照してください。 |
| ネットワーク | Azure CNI Overlay。送信トラフィックは **静的パブリック IP を持つ NAT ゲートウェイ** を経由させ、Azure SQL と Redis のファイアウォールでその IP を許可できるようにします |
| API アクセス | API サーバーへのアクセスを許可された IP 範囲に制限する場合は、NAT ゲートウェイの IP を含めてください。含めないと、ノードが参加できません（`K8SAPIServerConnFail`） |

## Ingress

Azure Standard Load Balancer の背後に **ingress-nginx**（または Traefik）をインストールします。

```bash
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx -n ingress --create-namespace \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \
  --set controller.config.proxy-body-size=50m
kubectl -n ingress get service ingress-nginx-controller    # EXTERNAL-IP for your DNS A record
```

ワークシートで `INGRESS_CLASS=nginx` を設定します。AKS の **application routing add-on**（マネージド nginx）も使用できます。そのクラスは `webapprouting.kubernetes.azure.com` です。

:::warning[Application Gateway Ingress Controller は使用しない]
AGIC は、独自の証明書の扱いとアノテーションを使って Application Gateway で TLS を終端します。OpenLM Platform の Ingress はこれに対応していません。代わりに、クラスター内に ingress-nginx または Traefik を配置してください。そのコントローラーの *前段* に Application Gateway や Front Door を置く構成は、`Host` ヘッダーを渡し、同じ `DOMAIN` の証明書を使用していれば動作します。
:::

## ストレージ

**`managed-csi`**（Azure Disk、`disk.csi.azure.com`）を使用します。クラスターの既定であっても、OpenLM Platform のボリュームやクラスター内で実行するデータベースに Azure Files のクラスを使用しないでください。

## ノード設定

[ファイル監視の上限](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/platforms/index#すべてのノードに適用するノード設定) は、DaemonSet で設定するか、AKS のバージョンがこれらのキーをサポートしている場合はノードプールのカスタムノード構成（`linuxOSConfig.sysctls`）で設定します。

## ノードプール

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

```bash
az aks nodepool add -g <rg> --cluster-name <aks> -n openlmmain \
  --node-vm-size Standard_D4s_v5 --node-count 4 \
  --labels openlm.com/role=main --node-taints openlm.com/role=main:NoSchedule
az aks nodepool add -g <rg> --cluster-name <aks> -n openlmspark \
  --node-vm-size Standard_D4s_v5 --node-count 1 \
  --labels openlm.com/role=spark --node-taints openlm.com/role=spark:NoSchedule
```

プール名は 12 文字以内です。ラベルの値は正確に `main` と `spark` です。

## values の設定

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

## データサービス

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

| サービス | Azure の選択肢 | ワークシートの設定 |
|---|---|---|
| SQL Server | **Azure SQL Database**（単一データベースまたは Elastic Pool）または SQL Managed Instance | `SQL_HOST=<server>.database.windows.net`、`SQL_ENCRYPT=True`。サーバーのファイアウォールで NAT ゲートウェイの IP を許可するか、プライベートエンドポイントを使用します。 |
| Redis | **Azure Managed Redis** または Azure Cache for Redis | `REDIS_TLS=true`。Azure Managed Redis: ポート `10000`、クラスタリングポリシーは **non-clustered**。Azure Cache for Redis: ポート `6380`。`REDIS_PASSWORD` にはアクセスキーを使用します。 |
| Kafka | 独自の Kafka（クラスター内または VM 上）、または Confluent Cloud | ネットワーク内のプレーンテキストのリスナーが標準です。OpenLM は、Azure Event Hubs（Kafka エンドポイント）を OpenLM Platform で検証していません。Confluent Cloud には SASL が必要なため、事前に OpenLM にお問い合わせください。 |
| MongoDB | **MongoDB Atlas**（プライベートエンドポイントまたはピアリング）、またはクラスター内の MongoDB | **Azure Cosmos DB for MongoDB はサポートされていません。** |

:::warning[Azure Managed Redis: non-clustered を使用する]
クラスター化されたポリシーでは、複数のキーにまたがるコマンドが、API ゲートウェイとサービスのバックグラウンドジョブで `CROSSSLOT` エラーになり失敗します。キャッシュの作成時に **non-clustered** ポリシーを選択してください。
:::

**Azure SQL** では、[ステップ 2](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/install/step-2-data-services) の名前のとおりに、ポータル、`az sql db create`、または Elastic Pool で 4 つのデータベースを作成します。ステップ 2 の `sqlcmd` のループも、`master` データベースに接続すれば使用できます。Azure SQL Database には SQL Agent もデータベース間クエリもありませんが、OpenLM Platform はどちらも必要としません。

## AKS 固有の確認

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

- `kubectl get nodes -L openlm.com/role`: ノードが `Ready` で、ラベルが意図したとおりであること。
- `kubectl -n ingress get service`: コントローラーにパブリック（または内部）IP があること。
- Pod から SQL Server と Redis が応答すること（[ステップ 2](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/install/step-2-data-services) の確認）。タイムアウトする場合、通常はファイアウォールが NAT ゲートウェイの IP を許可していません。
