Создание инфраструктуры Azure AKS

В этой статье вы подготавливаете основные ресурсы Azure, необходимые для деплоймента AKS, готового к использованию в производственной среде. Эта статья проверяет доступ к Azure, создает группу ресурсов, устанавливает реестр контейнеров Azure (ACR), развертывает базовый кластер AKS, при необходимости добавляет дополнительный пул узлов для рабочих нагрузок пользователей и предоставляет кластеру разрешение на извлечение из ACR. Все команды используют параметризованные переменные среды, чтобы рабочий процесс оставался повторяемым в регионах и подписках.

Предпосылки

Перед выполнением руководства вам потребуется следующее средство и доступ к учетной записи. Убедитесь, что вы прошли проверку подлинности в Azure с помощью az login и имеют достаточные разрешения для создания групп ресурсов, реестров контейнеров и кластеров AKS.

  • Подписка Azure с квотой для выбранного региона
  • Azure CLI (az) с правами владельца или участника
  • Kubectl, настроенный локально для доступа к кластеру
  • jq (необязательно) для анализа выходных данных JSON во время проверки

Выполните следующие команды, чтобы убедиться, что у вас есть все необходимые средства интерфейса командной строки и доступ к 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

Этапы

Последовательно выполните каждый шаг. Каждый подраздел включает назначение, команды и сводку для подтверждения ожидаемых результатов.

Проверка контекста подписки 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

Создайте реестр контейнеров Azure для хранения образов контейнеров и выполните проверку подлинности локальной управляющей программы 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

Добавление необязательного пула узлов пользователя

Подготовьте дополнительный пул узлов при запросе. Команда добавления выполняется асинхронно, чтобы избежать тайм-аутов интерфейса командной строки; команда ожидания отслеживает процесс выполнения в 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

Получение учетных данных кластера

Объедините kubeconfig AKS с локальным контекстом и убедитесь, что все узлы доступны для подключения.

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

Присоединение ACR к кластеру AKS

Предоставьте кластеру AKS разрешение на извлечение образов из подготовленного ACR, чтобы будущие развертывания могли получить доступ к образам контейнеров.

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 для оперативной видимости
  • Выполнение команд очистки инфраструктуры после эксперимента для управления затратами