Azure AKS インフラストラクチャを作成する

この記事では、運用環境に対応した AKS デプロイに必要なコア Azure リソースをプロビジョニングします。 この記事では、Azure アクセスの検証、リソース グループの作成、Azure Container Registry (ACR) の確立、ベースライン AKS クラスターのデプロイ、必要に応じてユーザー ワークロード用の追加ノード プールの追加、および ACR からのプルアクセス許可をクラスターに付与します。 すべてのコマンドはパラメーター化された環境変数に依存するため、ワークフローはリージョンとサブスクリプション間で繰り返し使用できます。

[前提条件]

ガイドを実行する前に、次のツールとアカウントアクセスが必要です。 az loginを使用して Azure に対して認証され、リソース グループ、コンテナー レジストリ、および AKS クラスターを作成するための十分なアクセス許可があることを確認します。

  • 選択したリージョンのクォータを持つ Azure サブスクリプション
  • 所有者または共同作成者の権限を持つ Azure CLI (az)
  • クラスター アクセス用にローカルに構成された kubectl
  • 検証中に JSON 出力を解析するための jq (省略可能)

次のコマンドを実行して、必要なすべての CLI ツールと Azure アクセス権があることを確認します。

command -v az >/dev/null || echo "Azure CLI missing"
command -v kubectl >/dev/null || echo "kubectl missing"
command -v jq >/dev/null || echo "jq missing (optional)"

環境をセットアップする

ここでは、プロビジョニング手順全体で使用されるすべての環境変数を定義します。 HASHタイムスタンプは、繰り返し実行される間、リソース名を一意に保ちます。 クラスターとレジストリの既定値は、最小限の概念実証フットプリントを対象としますが、必要に応じて調整できます。

次のコマンドは、ダウンストリーム ワークロードに関係なく、プロビジョニング シーケンスの Azure スコープ、AKS サイズ設定、および ACR 名前付け規則を確立します。

export HASH="${HASH:-$(date -u +"%y%m%d%H%M")}"  # YYMMDDHHMM stamp

# Azure scope and regional placement
export LOCATION="${LOCATION:-eastus2}"
export SUBSCRIPTION_ID="${SUBSCRIPTION_ID:-$(az account show --query id -o tsv)}"
export RESOURCE_GROUP="${RESOURCE_GROUP:-rg_aks_${HASH}}"

# AKS cluster naming and version control
# Hyphen required because AKS cluster names cannot include underscores
export AKS_CLUSTER_NAME="${AKS_CLUSTER_NAME:-aks-openwebsearch-${HASH}}"
export AKS_VERSION="${AKS_VERSION:-}"  # Optional Kubernetes version override

# Node pool sizing
export AKS_SYSTEM_NODE_COUNT="${AKS_SYSTEM_NODE_COUNT:-1}"
export AKS_USER_NODE_COUNT="${AKS_USER_NODE_COUNT:-1}"
export AKS_NODE_VM_SIZE="${AKS_NODE_VM_SIZE:-Standard_D4s_v5}"
export AKS_SYSTEM_NODEPOOL_NAME="${AKS_SYSTEM_NODEPOOL_NAME:-system}"
export AKS_USER_NODEPOOL_NAME="${AKS_USER_NODEPOOL_NAME:-user}"

# ACR configuration
export ACR_NAME="${ACR_NAME:-acrwebsearch${HASH}}"
export ACR_LOGIN_SERVER="${ACR_LOGIN_SERVER:-${ACR_NAME}.azurecr.io}"

環境変数の値を確認する

リソースを作成する前に、有効な構成を確認します。 調整後にブロックを再実行して、アクティブな値がターゲット サブスクリプションとリージョンに対して正しいことを確認します。

次のコマンドを使用して、アクティブなパラメーターをピン留めして、名前付け、サイズ設定、地域の選択を検証します。

: "${HASH:=$(date -u +"%y%m%d%H%M")}"  # Ensure HASH exists

VARS=(
  HASH
  LOCATION
  SUBSCRIPTION_ID
  RESOURCE_GROUP
  AKS_CLUSTER_NAME
  AKS_VERSION
  AKS_SYSTEM_NODE_COUNT
  AKS_USER_NODE_COUNT
  AKS_NODE_VM_SIZE
  AKS_SYSTEM_NODEPOOL_NAME
  AKS_USER_NODEPOOL_NAME
  ACR_NAME
  ACR_LOGIN_SERVER
)
for v in "${VARS[@]}"; do
  printf "%s=%s\n" "$v" "${!v}"
done

Steps

各ステップを順番に実行します。 すべてのサブセクションには、目的、コマンド、および期待される結果を確認するための概要が含まれています。

Azure サブスクリプションのコンテキストを確認する

アクティブな Azure サブスクリプションを確認し、AKS と ACR の操作に必要なリソース プロバイダーが登録されていることを確認します。

az account show --query id -o tsv
az provider register --namespace Microsoft.ContainerService
az provider register --namespace Microsoft.ContainerRegistry

リソース グループを作成する

専用のリソース グループをプロビジョニングして、ワークロードの AKS クラスター、レジストリ、およびサポート インフラストラクチャを分離します。

az group create \
  --name "${RESOURCE_GROUP}" \
  --location "${LOCATION}" \
  --output table

Azure Container Registry をプロビジョニングする

コンテナー イメージを格納するための Azure Container Registry を作成し、ローカル Docker デーモンを認証してイメージをプッシュします。

az acr create \
  --name "${ACR_NAME}" \
  --resource-group "${RESOURCE_GROUP}" \
  --location "${LOCATION}" \
  --sku Basic \
  --output table
az acr login --name "${ACR_NAME}"

AKS クラスターを作成する

ワークロードをホストする AKS クラスターをデプロイします。 作成前に確認することで、既存のクラスター名の再利用を防ぐためにします。

if az aks show \
  --name "${AKS_CLUSTER_NAME}" \
  --resource-group "${RESOURCE_GROUP}" >/dev/null 2>&1; then
  echo "AKS cluster ${AKS_CLUSTER_NAME} already exists in ${RESOURCE_GROUP}";
  echo "Skip creation or provide a new AKS_CLUSTER_NAME.";
else
  az aks create \
    --name "${AKS_CLUSTER_NAME}" \
    --resource-group "${RESOURCE_GROUP}" \
    --location "${LOCATION}" \
    --generate-ssh-keys \
    --node-count "${AKS_SYSTEM_NODE_COUNT}" \
    --nodepool-name "${AKS_SYSTEM_NODEPOOL_NAME}" \
    --node-vm-size "${AKS_NODE_VM_SIZE}" \
    ${AKS_VERSION:+--kubernetes-version "${AKS_VERSION}"} \
    --output table
fi

オプションのユーザー ノード プールを追加する

要求されたら、追加のノード プールをプロビジョニングします。 add コマンドは、CLI タイムアウトを回避するために非同期的に実行されます。wait コマンドは、Azure の進行状況を追跡します。 スクリプトは、重複する名前エラーを防ぐために、プールが既に存在するかどうかを最初に確認します。

if [ "${AKS_USER_NODE_COUNT}" -gt 0 ]; then
  if az aks nodepool show \
    --cluster-name "${AKS_CLUSTER_NAME}" \
    --resource-group "${RESOURCE_GROUP}" \
    --name "${AKS_USER_NODEPOOL_NAME}" >/dev/null 2>&1; then
    echo "Node pool ${AKS_USER_NODEPOOL_NAME} already exists; skipping add.";
  else
    az aks nodepool add \
      --cluster-name "${AKS_CLUSTER_NAME}" \
      --resource-group "${RESOURCE_GROUP}" \
      --name "${AKS_USER_NODEPOOL_NAME}" \
      --node-count "${AKS_USER_NODE_COUNT}" \
      --node-vm-size "${AKS_NODE_VM_SIZE}" \
      --no-wait
    az aks nodepool wait \
      --cluster-name "${AKS_CLUSTER_NAME}" \
      --resource-group "${RESOURCE_GROUP}" \
      --name "${AKS_USER_NODEPOOL_NAME}" \
      --created
  fi
fi

クラスターの資格情報を取得する

AKS kubeconfig をローカル コンテキストにマージし、すべてのノードに到達可能であることを確認します。

az aks get-credentials \
  --name "${AKS_CLUSTER_NAME}" \
  --resource-group "${RESOURCE_GROUP}" \
  --overwrite-existing
kubectl get nodes -o wide

ACR を AKS クラスターにアタッチする

今後のデプロイでコンテナー イメージにアクセスできるように、プロビジョニングされた ACR からイメージをプルするアクセス許可を AKS クラスターに付与します。

az aks update \
  --name "${AKS_CLUSTER_NAME}" \
  --resource-group "${RESOURCE_GROUP}" \
  --attach-acr "${ACR_NAME}" \
  --output table

検証

ダウンストリームのデプロイ手順に進む前に、AKS クラスターが存在し、基本的な kubectl クエリに応答することを確認します。 まず、AKS クラスターが存在することを確認します。

if ! az aks show \
  --name "${AKS_CLUSTER_NAME}" \
  --resource-group "${RESOURCE_GROUP}" \
  --query "{name:name,provisioningState:provisioningState,location:location}" \
  --output table; then
  echo "AKS cluster '${AKS_CLUSTER_NAME}' not found in resource group '${RESOURCE_GROUP}'."
else
  echo "AKS cluster '${AKS_CLUSTER_NAME}' exists in resource group '${RESOURCE_GROUP}'."
fi

AKS クラスターが作成されている場合は、次のような内容が表示されます。

AKS cluster ${AKS_CLUSTER_NAME} exists in resource group ${RESOURCE_GROUP}.

次に、 kubectl が正しく構成されていることを確認します。

kubectl cluster-info

このコマンドは、次のような現在のクラスターの状態を出力します。

Kubernetes control plane is running at ...
CoreDNS is running at https://...
Metrics-server is running at https://...

最後に、システム ノードとユーザー ノードの両方が使用可能であることを確認します。

kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.labels.agentpool}{"\n"}{end}' |
  sort |
  uniq -c

これにより、次のようなノードの数が出力されます。

      1 system
      1 user

概要: 現在のコンテキストで、AKS クラスターが存在し、正常であり、kubectl 経由で到達可能であることを検証しました。

概要

リソース グループ、コンテナー レジストリ、AKS クラスター、オプションのノード プール、およびレジストリの添付ファイルが検証され、コンテナー化されたワークロードに対してクラスターの準備が整います。

次のステップ

  • docs/OpenWebSearch_On_AKS.md を使用して、KMCP と MCP サーバーのデプロイを進めます
  • セキュリティ体制に固有のロールの割り当てまたはネットワーク ポリシーを構成する
  • 運用上の可視性のために Azure Monitor または Log Analytics を統合する
  • 実験後にインフラストラクチャ クリーンアップ コマンドを実行してコストを管理する