> For the complete documentation index, see [llms.txt](https://docs.digitalhumans.jp/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.digitalhumans.jp/dev/miniprem/kubernetes-overview/kubernetes-aks.md).

# Azure AKS

## Azure AKS 本番デプロイ

> NVIDIA T4 GPU アクセラレーションを活用して、Azure AKS 上に Renny デジタルヒューマンをデプロイします

{% hint style="info" %}
本ページの内容はデジタルヒューマン株式会社の正式サポート対象外です。参考情報としてご利用ください。
{% endhint %}

{% hint style="info" %}
**ℹ️ マルチクラウドサポート:** 本ガイドは Azure AKS 専用です。その他のクラウドプロバイダーについては以下を参照してください。\
\
・[マルチクラウド概要](/dev/miniprem/kubernetes-overview.md) - 全クラウドプロバイダーの比較\
・[AWS EKS デプロイ](/dev/miniprem/kubernetes-overview/kubernetes-eks.md) - AWS へのデプロイ\
・[マルチクラウドガイド](/dev/miniprem/kubernetes-overview/kubernetes-multi-cloud.md) - コスト比較とマイグレーション
{% endhint %}

### 目次

* [概要](#overview)
* [アーキテクチャ](#architecture)
* [前提条件](#prerequisites)
* [Azure アカウントのセットアップ](#azure-account-setup)
* [GPU インスタンスの選定](#gpu-instance-selection)
* [GPU クォータの申請](#gpu-quota-requests)
* [クイックスタート](#quick-start)
* [構成](#configuration)
* [運用](#operations)
* [モニタリング](#monitoring)
* [トラブルシューティング](#troubleshooting)
* [コスト管理](#cost-management)
* [ライセンス](#license)

### 概要

Azure AKS デプロイは、NVIDIA GPU をサポートする **本番運用に適した、オートスケーリング対応のインフラストラクチャ** を Renny デジタルヒューマン向けに提供します。本デプロイは次のような用途に最適です。

* 高可用性を必要とする **本番ワークロード**
* 10 〜 20 体以上の同時デジタルヒューマンを稼働させる **エンタープライズデプロイ**
* 需要に応じた **オートスケーリング**
* NVIDIA T4 GPU による **GPU アクセラレーテッドレンダリング**
* Azure サービスとの **Azure ネイティブな統合**

#### 主要機能

* ✅ **ワンクリックデプロイ**（約 35 〜 50 分）
* ✅ **オートスケーリング**（Renny インスタンスを 10 〜 20 体）
* ✅ **NVIDIA T4 GPU**（VRAM 16GB）
* ✅ GPU Operator 経由の **標準 NVIDIA ドライバー**（580+）
* ✅ **GPU ドライバーの自動インストール**
* ✅ ログ集約のための **Azure Monitor 連携**
* ✅ 3 つの可用性ゾーンにまたがる **高可用性**
* ✅ Terraform による **Infrastructure as Code**

#### AKS と EKS の比較

| 項目                 | Azure AKS      | AWS EKS     |
| ------------------ | -------------- | ----------- |
| **GPU インスタンス**     | NC16as\_T4\_v3 | g5.4xlarge  |
| **GPU モデル**        | NVIDIA T4      | NVIDIA A10G |
| **GPU メモリ**        | 16GB           | 24GB        |
| **vCPU**           | 16             | 16          |
| **RAM**            | 110GB          | 64GB        |
| **コスト（ノードあたり/時間）** | 約 $1.50        | 約 $1.18     |
| **月額コスト（10 ノード）**  | 約 $10,800      | 約 $8,712    |
| **デプロイ時間**         | 35 〜 50 分      | 30 〜 45 分   |
| **GPU タイムスライシング**  | 1 ポッド/GPU\*    | 2 ポッド/GPU   |

{% hint style="info" %}
**\*補足:** VRAM 16GB の T4 では、GPU あたり 1 Renny ポッド（ポッドあたり 4 〜 6GB）の構成が最適です。VRAM 24GB の A10G は、タイムスライシングを利用して GPU あたり 2 ポッドの構成をサポートします。
{% endhint %}

### アーキテクチャ

#### インフラストラクチャ概要

```
Azure Cloud (East US)
├── Virtual Network (10.17.0.0/16)
│   ├── Public Subnet
│   │   └── NAT Gateway
│   └── Private Subnets (3 AZs)
│       └── AKS Cluster (renny-production-aks)
│           ├── Control Plane (Managed by Azure)
│           ├── System Node Pool
│           │   └── 2× Standard_D4s_v3 instances
│           └── GPU Node Pool (rennygpu)
│               └── 10-20× NC16as_T4_v3 instances
│                   ├── NVIDIA T4 GPU (16GB VRAM)
│                   ├── GPU Operator (driver 580)
│                   └── Renny Pods (1 per GPU)
└── Azure Monitor (centralized monitoring)
```

#### ネットワークアーキテクチャ

* **WebRTC/UDP:** ポート 22000 〜 23000（Pixel Streaming）
* **TURN/STUN:** ポート 3478（TCP/UDP）
* **HTTPS:** ポート 443（\*.uneeq.io への送信）
* **プライベートサブネット:** セキュリティ上、すべての GPU ノードを配置
* **Azure CNI ネットワーキング:** Azure ネイティブなネットワーキング

### 前提条件

#### 必要なツール

1. アクティブなサブスクリプションを持つ **Azure アカウント**
2. 認証情報が設定された **Azure CLI** >= 2.50.0
3. **Terraform** >= 1.5.0
4. **kubectl** >= 1.28.0（Kubernetes CLI）
5. **Helm** >= 3.12.0（Kubernetes パッケージマネージャー）
6. [サポート窓口](https://support.digitalhumans.jp/)から発行を受けた **Harbor** アカウント（リポジトリアクセス権付き）
7. **Renny の Helm チャート**（`renny-chart.tgz` ファイル）

#### インストールコマンド

**Azure CLI:**

```bash
# macOS
brew install azure-cli

# Linux
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

# Windows
winget install -e --id Microsoft.AzureCLI
```

**その他のツール:**

```bash
# Terraform
# macOS: brew install terraform
# Linux: https://www.terraform.io/downloads

# kubectl
# macOS: brew install kubectl
# Linux: sudo snap install kubectl --classic

# Helm
# macOS: brew install helm
# Linux: sudo snap install helm --classic
```

#### インストールの確認

```bash
az --version        # Azure CLI version (>= 2.50.0)
terraform version   # Terraform version (>= 1.5.0)
kubectl version     # Kubernetes CLI
helm version        # Helm package manager
```

### Azure アカウントのセットアップ

#### Step 1: Azure アカウントの作成

Azure アカウントをお持ちでない場合は、次の手順で作成してください。

1. <https://azure.microsoft.com/free/> にアクセスします
2. 「Start free」をクリックします。30 日間有効な $200 の無料クレジットが付与されます
3. Microsoft アカウントでサインインします
4. 本人確認（電話番号 + クレジットカード）を完了します

**無料試用版の特典:**

* 30 日間有効な $200 のクレジット
* 12 か月間の無料サービス
* 常時無料の 25 種類以上のサービス

#### Step 2: Azure CLI へのログイン

```bash
# ブラウザ経由の対話的ログイン
az login

# ログイン成功の確認
az account show --output table
```

**出力例:**

```
Name                 CloudName    SubscriptionId                        State
-------------------  -----------  ------------------------------------  -------
Pay-As-You-Go        AzureCloud   12345678-1234-1234-1234-123456789012  Enabled
```

#### Step 3: デフォルトサブスクリプションの設定

複数のサブスクリプションをお持ちの場合は、次の手順で設定します。

```bash
# サブスクリプション一覧の表示
az account list --output table

# デフォルトサブスクリプションの設定
az account set --subscription "12345678-1234-1234-1234-123456789012"

# アクティブなサブスクリプションの確認
az account show --query '[name,id]' --output table
```

#### Step 4: リソースプロバイダーの登録

Azure では、リソースプロバイダーを事前に登録する必要があります。

```bash
# 必要なプロバイダーの登録
az provider register --namespace Microsoft.Compute
az provider register --namespace Microsoft.Network
az provider register --namespace Microsoft.ContainerService
az provider register --namespace Microsoft.Storage

# 登録状態の確認（2 〜 5 分かかります）
az provider show -n Microsoft.Compute --query "registrationState"
az provider show -n Microsoft.ContainerService --query "registrationState"
# すべて "Registered" と表示されれば成功です
```

### GPU インスタンスの選定

#### 推奨: NC16as\_T4\_v3

{% hint style="success" %}
**✅ NC16as\_T4\_v3 が推奨インスタンスです**
{% endhint %}

**NC16as\_T4\_v3 が Renny に適している理由:**

| 項目            | NC16as\_T4\_v3  | メリット                      |
| ------------- | --------------- | ------------------------- |
| **GPU**       | NVIDIA T4（16GB） | RT コアを搭載した Turing アーキテクチャ |
| **vCPU**      | 16 AMD EPYC     | 優れた CPU 性能                |
| **RAM**       | 110GB           | Renny 向けに十分なメモリ           |
| **ドライバー種別**   | **標準 NVIDIA**   | GPU Operator 対応           |
| **コスト**       | 約 $1.50/時間      | コスト効率に優れる                 |
| **CUDA サポート** | 12.4+           | 最新の CUDA Toolkit          |
| **RT コア**     | 40              | ハードウェアレイトレーシング            |
| **Tensor コア** | 320             | AI アクセラレーション              |

**実証済みの互換性:**

* ✅ 標準 NVIDIA ドライバー（vGPU ではない）
* ✅ GPU Operator による自動ドライバーインストール
* ✅ 16GB VRAM はノードあたり 4 Renny ポッドに十分
* ✅ Unreal Engine Pixel Streaming で検証済み
* ✅ AMD EPYC プロセッサーによる優れた性能

#### 非推奨: NVads\_A10\_v5

{% hint style="warning" %}
**⚠️ NVads\_A10\_v5 は使用しないでください**
{% endhint %}

**NVads\_A10\_v5 が推奨されない理由:**

| 問題点                    | 詳細                            |
| ---------------------- | ----------------------------- |
| **vGPU/GRID ドライバーが必須** | 標準 NVIDIA ドライバーは使用不可          |
| **GPU Operator が非対応**  | ドライバーを手動で管理する必要がある            |
| **Renny で未検証**         | Unreal Engine との検証実績なし        |
| **コストが高い**             | 2 倍以上のコスト（約 $3.06/時間）         |
| **複雑なセットアップ**          | NVIDIA AI Enterprise ライセンスが必要 |

#### リージョン別の提供状況

ターゲットリージョンで NC16as\_T4\_v3 が利用可能かを次のコマンドで確認します。

```bash
# East US での利用可否を確認
az vm list-skus --location eastus --size Standard_NC --all --output table | grep NC16as_T4_v3

# West US 2 での利用可否を確認
az vm list-skus --location westus2 --size Standard_NC --all --output table | grep NC16as_T4_v3
```

**利用可能と確認済みのリージョン:**

* ✅ East US
* ✅ West US 2
* ✅ North Europe
* ✅ West Europe
* ✅ Southeast Asia
* ✅ Australia East

### GPU クォータの申請

{% hint style="warning" %}
**⚠️ 重要:** Azure では GPU クォータが厳しく適用されます。デプロイ前にクォータ増加申請を必ず実施してください。
{% endhint %}

#### 10 ノード構成に必要なクォータ

| リソース                                 | デフォルト | 必要量    | 申請方法         |
| ------------------------------------ | ----- | ------ | ------------ |
| **Standard NCASv3\_T4 Family vCPUs** | 0     | 160    | サポートチケット     |
| **総リージョン vCPU 数**                    | 20    | 200 以上 | サポートチケット     |
| **パブリック IP アドレス**                    | 10    | 20     | サポートチケット（任意） |

**計算式:**

* 10 ノード × NC16as\_T4\_v3 あたり 16 vCPU = 160 vCPU
* コントロールプレーンとオーバーヘッドを加算して合計約 200 vCPU

#### 現在のクォータ確認

```bash
# East US の NC シリーズクォータを確認
az vm list-usage --location eastus --query "[?contains(name.value, 'standardNCASFamily')]" --output table

# リージョン全体の vCPU クォータを確認
az vm list-usage --location eastus --query "[?contains(name.value, 'cores')]" --output table
```

#### クォータ増加の申請

**方法 1: Azure Portal（推奨）**

1. [Azure Portal](https://portal.azure.com) にアクセスします
2. 「Quotas」を検索し、「Compute」を選択します
3. Location = eastus（ターゲットリージョン）でフィルタリングします
4. 「Standard NCASv3\_T4 Family vCPUs」を検索します
5. クォータ行をクリックし、「Request increase」を選択します
6. 新しい上限値として **160**（10 ノード分）を入力します
7. ビジネス上の理由として「Deploying Renny digital humans on AKS with GPU support」を入力します
8. 「Submit」をクリックします

**方法 2: Azure CLI**

```bash
# クォータ増加用サポートチケットの作成
az support tickets create \
  --ticket-name "Renny-GPU-Quota-Request" \
  --title "Quota increase for Standard NCASv3_T4 Family vCPUs" \
  --severity minimal \
  --description "Requesting 160 vCPUs for NC16as_T4_v3 instances in East US region for Renny digital human deployment"
```

#### クォータ申請のタイムライン

**想定される処理時間:**

* 通常申請: 1 〜 3 営業日
* 大規模申請（200 vCPU 以上）: 3 〜 5 営業日
* 無料試用版アカウント: 5 〜 7 営業日
* 緊急申請: 1 営業日（Premier Support が必要）

**承認を早めるためのコツ:**

* 詳細なビジネス上の理由を記載する
* インスタンスタイプ（NC16as\_T4\_v3）を明確に指定する
* 想定される利用期間を記載する
* ロケーションと数量を具体的に指定する

### クイックスタート

#### Step 1: サービスプリンシパルの作成

Terraform から Azure に認証するためにサービスプリンシパルが必要です。

```bash
# サービスプリンシパルを作成し、Contributor ロールを付与
az ad sp create-for-rbac \
  --name "renny-aks-deployer" \
  --role Contributor \
  --scopes /subscriptions/$(az account show --query id -o tsv) \
  --output json

# 出力を保存してください - 以下の値が必要になります:
{
  "appId": "12345678-1234-1234-1234-123456789012",      # CLIENT_ID
  "password": "super-secret-password-here",              # CLIENT_SECRET
  "tenant": "87654321-4321-4321-4321-210987654321"      # TENANT_ID
}
```

{% hint style="warning" %}
**⚠️ 重要:** `password` はその場で必ず保存してください。Azure では二度と表示されません。
{% endhint %}

#### Step 2: 認証情報の設定

`kubernetes/terraform/aks/terraform.tfvars` を作成します。

```hcl
# Azure 認証情報
subscription_id = "your-subscription-id"
tenant_id       = "your-tenant-id"
client_id       = "your-client-id"
client_secret   = "your-client-secret"

# 必須の Renny 認証情報
dhop_tenant_id  = "your-uneeq-tenant-id"
dhop_api_key    = "your-uneeq-api-key"

# Harbor レジストリの認証情報（ロボットアカウントについては help@uneeq.com までお問い合わせください）
harbor_username = "robot$your-customer-name"
harbor_password = "your-harbor-robot-password"

# 任意: デフォルト値の上書き
azure_region = "eastus"  # 任意のリージョンに変更可能
cluster_name = "renny-production-aks"
```

#### Step 3: Helm チャートの配置

`renny-chart.tgz` ファイルを `kubernetes/` ディレクトリに配置します。

#### Step 4: デプロイ前チェックの実行

```bash
cd kubernetes/scripts/aks/

# Azure のセットアップと前提条件を検証
./check-azure-prerequisites.sh

# VNet の利用可否を確認（Azure には上限があります）
./check-vnet-usage.sh
```

#### Step 5: デプロイ

ワンクリックデプロイを実行します。

```bash
cd kubernetes/

# Azure AKS へのデプロイ
./scripts/deploy.sh --cloud aks

# あるいは自動検出に任せる
./scripts/deploy.sh
```

#### デプロイプロセス

デプロイスクリプトでは、次の処理が順に実行されます。

1. ✅ **前提条件の確認**（Azure 認証情報、ツール）約 2 分
2. 🏗️ Terraform による **VNet と AKS クラスターのデプロイ** 約 15 〜 20 分
3. 🚀 **ノードプールの構成** とクラスターへの参加 約 3 〜 5 分
4. 🎮 **NVIDIA GPU Operator のインストール** 約 5 〜 10 分
5. 🤖 内部音声処理を含む **Renny のデプロイ** 約 5 〜 10 分
6. ⚖️ **オートスケーリングの構成**（10 〜 20 インスタンス）約 3 分

**合計デプロイ時間: 約 35 〜 50 分**

### 構成

#### GPU の構成

GPU の設定は `kubernetes/values/renny-values-aks.yaml` で管理します。

```yaml
# AKS T4 インスタンス向け GPU 構成
gpuTimeSlicing:
  enabled: false  # T4 16GB works best with 1 pod per GPU
  replicasPerGpu: 1

deployment:
  nodeType: renny
  totalReplicas: 40  # 10 nodes × 4 pods = 40 total pods

resources:
  limits:
    nvidia.com/gpu: 1  # Each pod gets full GPU
    memory: "6Gi"      # Per-pod memory
    cpu: "3"           # Per-pod CPU (3 cores)
```

#### NVIDIA ドライバーの選択

すべてのドライバーは **NVIDIA 公式のプロプライエタリドライバー** である必要があります。オープンソースの nouveau ドライバーはミニプレム（MiniPrem）と互換性がなく、GPU アクセラレーション、NVENC エンコード、Vulkan サポートのいずれも提供されません。

デプロイ時には、以下のいずれかを選択します。

**ドライバー 580+（推奨）**

* ✅ 最新の機能と最適化
* ✅ NVIDIA Ada Lovelace（40xx シリーズ）および Blackwell（50xx シリーズ）GPU では **必須**。これらのアーキテクチャでは Vulkan と NVENC の完全サポートに 580+ が必要
* ✅ CUDA 12.8+ をサポート
* ✅ T4 との完全な互換性

**ドライバー 575+（安定版の代替）**

* ✅ 本番環境で検証済み
* ✅ 最大の安定性
* ✅ CUDA 12.6+ をサポート

#### TTS の構成

`kubernetes/values/renny-values-aks.yaml` で TTS（音声合成）プロバイダーを構成します。

```yaml
# Azure Speech Services（AKS では推奨）
tts:
  azureRegion: "eastus"
  azureSpeechKey: "your-azure-api-key"
```

### 運用

#### Renny インスタンスのスケーリング

10 〜 20 インスタンスの範囲でスケーリングできます。

```bash
./scripts/scale.sh 15  # 15 インスタンスにスケーリング
```

#### デプロイ状況の確認

総合的なステータスレポートを取得します。

```bash
./scripts/status.sh
```

#### GPU ドライバーの検証

```bash
# GPU Operator のポッドを確認
kubectl get pods -n gpu-operator

# GPU の利用可否を確認
kubectl get nodes -l kubernetes.azure.com/agentpool=rennygpu

# GPU の動作テスト
POD=$(kubectl get pods -n gpu-operator -l app=nvidia-driver-daemonset -o name | head -1)
kubectl exec -n gpu-operator $POD -- nvidia-smi
```

#### kubectl コンテキストの確認

デプロイ後、kubectl は自動的に AKS クラスターに接続されます。

```bash
# 接続の確認
kubectl config current-context

# 必要に応じて再接続
az aks get-credentials --resource-group renny-production-rg --name renny-production-aks
```

### モニタリング

#### ポッドのヘルスモニタリング

```bash
# 全ポッドの確認
kubectl get pods -A

# Renny ポッドの確認
kubectl get pods -n uneeq-renderer

# ポッドのリアルタイム監視
kubectl get pods -n uneeq-renderer -w

# ログの表示
kubectl logs <pod-name> -n uneeq-renderer -f
```

#### Azure Monitor 連携

Renny のすべてのログは、集中監視のために自動的に Azure Monitor に送信されます。

**Log Analytics ワークスペース:**

* クラスターログ: Container Insights
* アプリケーションログ: Log Analytics

**Kusto クエリの例（Log Analytics）:**

直近のエラーを検索します。

```kql
ContainerLog
| where LogEntry contains "error"
| where Namespace == "uneeq-renderer"
| order by TimeGenerated desc
| limit 50
```

音声処理を監視します。

```kql
ContainerLog
| where LogEntry contains "speech" or LogEntry contains "USE_V2_COORDINATOR"
| where Namespace == "uneeq-renderer"
| order by TimeGenerated desc
```

### トラブルシューティング

#### よくある問題

**ポッドが Pending のままになる:**

```bash
# ポッドがスケジュールされない理由を確認
kubectl describe pod <pod-name> -n uneeq-renderer

# よくある原因:
# - "Insufficient nvidia.com/gpu" = 利用可能な GPU ノードがない
# - "Insufficient cpu/memory" = リソース制限を超過
```

**イメージのプル失敗:**

```bash
# Docker レジストリシークレットを確認
kubectl get secret docker-config -n uneeq-renderer

# 必要に応じて再作成（デプロイスクリプトを再実行）
```

**GPU ドライバーの問題:**

```bash
# GPU Operator のインストール状態を確認
kubectl get pods -n gpu-operator

# ドライバーインストールのログを確認
kubectl logs -n gpu-operator -l app=nvidia-driver-daemonset --tail=100

# GPU リソースの確認
kubectl get nodes -l kubernetes.azure.com/agentpool=rennygpu
```

#### クリーンアップ

すべてのリソースを破棄するには（約 15 〜 20 分）、次のコマンドを実行します。

```bash
./scripts/destroy.sh
```

### コスト管理

#### 月額コストの見積もり（East US）

| コンポーネント            | 仕様                | 数量      | 月額コスト           |
| ------------------ | ----------------- | ------- | --------------- |
| **GPU コンピュート**     | NC16as\_T4\_v3    | 10 ノード  | $10,800         |
| **AKS コントロールプレーン** | マネージドサービス         | 1 クラスター | $73             |
| **システムノード**        | Standard\_D4s\_v3 | 2 ノード   | $288            |
| **ロードバランサー**       | Standard SKU      | 1 LB    | $25             |
| **パブリック IP**       | Standard SKU      | 3 IP    | $12             |
| **マネージドディスク**      | Premium SSD       | 約 500GB | $75             |
| **Azure Monitor**  | Log Analytics     | 約 50GB  | $125            |
| **合計**             |                   |         | **約 $11,398/月** |

#### コスト削減策

**1. リザーブドインスタンス（30 〜 40% の削減）**

```bash
# 1 年リザーブド: 約 $1.05/時間 = 約 $7,560/月（月 $3,240 の削減）
# 3 年リザーブド: 約 $0.90/時間 = 約 $6,480/月（月 $4,320 の削減）
```

**2. スポットインスタンス（開発・テスト用途で 60 〜 80% の削減）**

```bash
# スポット価格: 約 $0.30 〜 $0.60/時間（通常 $1.50 に対して）
# 削減額: 10 ノードクラスターで月約 $8,640
# 注意点: 30 秒前通知で退避（eviction）される場合があります
```

**3. 業務時間外のオートスケーリング**

```bash
# 夜間や週末は 2 〜 5 ノードまでスケールダウン
# 削減額: 約 40% の削減 = 月約 $4,320
```

**4. スケジュールによる停止**

```bash
# 夜間や週末にクラスターを停止
az aks stop --name renny-production-aks --resource-group renny-production-rg
az aks start --name renny-production-aks --resource-group renny-production-rg

# 削減額: 約 70% = 月約 $7,560
```

#### コストモニタリング

```bash
# 当月の利用状況を確認
az consumption usage list --start-date 2025-10-01 --end-date 2025-10-16

# 予算アラートの設定
az consumption budget create \
  --budget-name renny-monthly-budget \
  --amount 12000 \
  --time-grain Monthly
```

***

### ライセンス

本 Azure AKS デプロイはミニプレム（MiniPrem）プラットフォームの一部であり、MIT ライセンスの下で提供されます。詳細は LICENSE ファイルを参照してください。

***

### 著作権

**© 2025 UneeQ. All rights reserved.**

[サポート窓口](https://support.digitalhumans.jp/)
