Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure Kubernetes Service (AKS) — это управляемая служба Kubernetes, которую можно использовать для быстрого развертывания кластеров и управления ими. Из этого краткого руководства вы узнаете, как:
- Разверните кластер AKS с помощью Azure CLI.
- Добавьте пул узлов GPU на основе Linux с включенными управляемыми узлами GPU.
- Убедитесь, что AKS установил и настроил стек программного обеспечения GPU для планирования задач.
Полностью управляемые узлы GPU — это функция предварительной версии. Если вы включаете поддержку управляемых узлов с GPU, AKS устанавливает и управляет драйвером NVIDIA GPU, плагином устройств NVIDIA для Kubernetes, экспортером метрик Data Center GPU Manager (DCGM) и компонентами мониторинга состояния для пула узлов с GPU. Управляемые узлы GPU также поддерживают интеграцию метрик GPU в режиме реального времени для приема данных в Azure Managed Prometheus и в управляемую службу Azure Monitor для Prometheus. Дополнительные сведения см. в разделе "Создание полностью управляемого пула узлов GPU" на Azure Kubernetes Service (AKS) (предварительная версия) и наблюдаемость GPU в Azure Kubernetes Service (AKS).
Note
В этой статье приведены шаги по развертыванию кластера только для оценки. Прежде чем развертывать готовый к работе кластер, ознакомьтесь с базовой эталонной архитектурой , чтобы понять, как она соответствует вашим бизнес-требованиям.
Important
Предварительные версии функций AKS доступны на условиях самообслуживания и по выбору пользователя. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:
Перед тем как начать
В этом руководстве быстрого старта предполагается, что у вас есть базовое понимание концепций Kubernetes. Дополнительные сведения см. в статье Ключевые концепции Kubernetes для службы Azure Kubernetes (AKS).
- Если у вас нет аккаунта Azure, создайте бесплатную учетную запись перед началом.
Используйте среду Bash в Azure Cloud Shell. Для получения дополнительной информации см. Get started with Azure Cloud Shell.
Если вы предпочитаете запускать справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, подумайте о запуске Azure CLI в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, войдите в Azure CLI с помощью команды az login . Чтобы завершить процесс аутентификации, следуйте шагам, отображаемым в вашем терминале. Для других вариантов входа см. Аутентификация в Azure с помощью Azure CLI.
Когда вас попросят, установите расширение Azure CLI при первом использовании. Дополнительные сведения о расширениях см. в разделе Использование расширений и управление ими с помощью Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
- Вам потребуется Azure CLI версии 2.85.0 или более поздней. Чтобы узнать версию, выполните команду
az --version. Если вам нужно установить или обновить Azure CLI, см. статью "Установка Azure CLI". - Убедитесь, что учетная запись, которую вы используете для создания кластера, имеет необходимые минимальные разрешения. Дополнительные сведения о доступе и удостоверении для AKS см. в разделе «Параметры доступа и удостоверения для службы Azure Kubernetes (AKS)».
- Если у вас несколько Azure подписок, выберите соответствующий идентификатор подписки для выставления счетов с помощью команды az account set. Дополнительные сведения см. в статье "Управление подписками Azure- Azure CLI".
- В зависимости от подписки Azure может потребоваться запросить увеличение квоты виртуальной ЦП для семейства виртуальных машин с поддержкой GPU, используемого в этом кратком руководстве. Дополнительные сведения см. в разделе "Увеличение квот виртуальных ЦП для семейств виртуальных машин".
- Типоразмеры виртуальных машин с поддержкой GPU включают специализированное оборудование, поэтому могут стоить дороже и быть доступны не во всех регионах. Дополнительные сведения см. в статье о оптимизированных размерах виртуальных машин с GPU.
aks-preview Установка расширения CLI
aks-preview Установите расширение CLI с помощью команды az extension add.
az extension add --name aks-preview
Обновите расширение, чтобы обеспечить последнюю версию с помощью команды az extension update .
az extension update --name aks-preview
Регистрация функции предварительной версии
ManagedGPUExperiencePreview Зарегистрируйте флаг компонента в подписке с помощью команды az feature register.
az feature register --namespace Microsoft.ContainerService --name ManagedGPUExperiencePreview
Через несколько минут отобразится состояние Registered (Зарегистрировано). Проверьте состояние регистрации с помощью команды az feature show .
az feature show --namespace Microsoft.ContainerService --name ManagedGPUExperiencePreview --query properties.state
Когда отображается состояние "Зарегистрировано", обновите регистрацию Microsoft.ContainerService поставщика ресурсов с помощью команды az provider register .
az provider register --namespace Microsoft.ContainerService
Определение переменных среды
Определите следующие переменные среды для использования в этом кратком руководстве.
export RANDOM_STRING=$(printf '%05d%05d' "$RANDOM" "$RANDOM")
export RESOURCE_GROUP="myAKSResourceGroup$RANDOM_STRING"
export CLUSTER_NAME="myAKSCluster$RANDOM_STRING"
export GPU_NP="gpunp"
export GPU_VM_SIZE="Standard_NC4as_T4_v3"
export LOCATION="westus"
Переменная RANDOM_STRING хранит случайную 10-разрядную строку. Переменные RESOURCE_GROUP и CLUSTER_NAME, значения которых объединяются с RANDOM_STRING, создают уникальные имена. Переменная GPU_NP сохраняет имя управляемого пула узлов GPU. Переменная GPU_VM_SIZE сохраняет размер виртуальной машины с поддержкой GPU для пула узлов. Переменная LOCATION имеет значение westus. Эти значения переменных можно использовать или создать самостоятельно.
echo Используйте команду для просмотра значений переменных, таких какecho $RANDOM_STRING.
Создайте группу ресурсов
Группа ресурсов Azure — это логическая группа для развертывания ресурсов Azure и управления ими. При создании группы ресурсов укажите расположение. Это расположение, в котором хранятся метаданные группы ресурсов и в котором развертываются ваши ресурсы в Azure, если при создании ресурса не указан другой регион.
Используйте команду az group create для создания группы ресурсов.
az group create --name $RESOURCE_GROUP --location $LOCATION
В следующем примере показан результат.
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myAKSResourceGroup<randomStringValue>",
"location": "westus",
"managedBy": null,
"name": "myAKSResourceGroup<randomStringValue>",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Создание кластера AKS
Используйте команду az aks create, чтобы создать кластер AKS. В следующем примере создается кластер с одним системным узлом и включается управляемое удостоверение, назначаемое системой.
az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--node-count 1 \
--generate-ssh-keys
При создании нового кластера AKS автоматически создает вторую группу ресурсов для хранения ресурсов AKS. Дополнительные сведения см. в разделе Почему с AKS создаются две группы ресурсов?
Кластер в этом примере указывает количество узлов, равное одному, для экономии времени и ресурсов. В производственной среде используйте конфигурацию из трех или более узлов. Команда az aks create по умолчанию имеет три узла, если не указать количество узлов.
Добавление управляемого пула узлов GPU
Добавьте в кластер управляемый пул узлов GPU на основе Linux с помощью команды az aks nodepool add . Параметр --enable-managed-gpu=true настраивает AKS на установку и управление драйвером GPU NVIDIA, плагином устройств NVIDIA Kubernetes, экспортёром метрик DCGM и компонентами мониторинга состояния GPU в пуле узлов.
В следующем примере добавляется управляемый пул узлов GPU с помощью операционной системы Ubuntu Linux по умолчанию.
az aks nodepool add \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name $GPU_NP \
--node-count 1 \
--node-vm-size $GPU_VM_SIZE \
--node-taints sku=gpu:NoSchedule \
--enable-managed-gpu=true
Параметр --node-taints sku=gpu:NoSchedule не допускает нагрузки, не использующие GPU, в пул GPU-узлов, если только эти нагрузки не включают соответствующий допуск.
После создания пула узлов используйте команду az aks nodepool show , чтобы убедиться, что управляемый профиль GPU включен.
az aks nodepool show \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name $GPU_NP \
--query "{Name:name, Mode:mode, VmSize:vmSize, Taints:nodeTaints, GpuProfile:gpuProfile}"
Выходные данные должны содержать следующие значения.
{
"GpuProfile": {
"driver": "Install",
"driverType": "",
"nvidia": {
"managementMode": "Managed",
"migStrategy": null
}
},
"Mode": "User",
"Name": "gpunp",
"Taints": [
"sku=gpu:NoSchedule"
],
"VmSize": "Standard_NC4as_T4_v3"
}
Подключение к кластеру
Кластером Kubernetes можно управлять при помощи kubectl клиента командной строки Kubernetes. Если вы используете Azure Cloud Shell, kubectl уже установлен. Чтобы установить kubectl локально, используйте команду az aks install-cli .
Настройте
kubectlдля подключения к кластеру Kubernetes с помощью команды az aks get-credentials. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMEПроверьте подключение к кластеру с помощью команды get kubectl . Эта команда возвращает список узлов кластера и отображает пул узлов для каждого узла.
kubectl get nodes -L kubernetes.azure.com/agentpool,kubernetes.azure.com/modeNAME STATUS ROLES AGE VERSION AGENTPOOL MODE aks-nodepool1-123456789-vmss000000 Ready <none> 20m v1.34.4 nodepool1 system aks-gpunp-123456789-vmss000000 Ready <none> 5m36s v1.34.4 gpunp userУбедитесь, что Kubernetes может планировать рабочие нагрузки GPU в пуле управляемых узлов GPU.
kubectl get nodes -l kubernetes.azure.com/agentpool=$GPU_NP -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.allocatable.nvidia\.com/gpu}{"\n"}{end}'В выходных данных показано количество GPU, доступных для выделения, для каждого узла в управляемом пуле GPU-узлов.
aks-gpunp-123456789-vmss000000 1
Включение сбора метрик GPU
Пулы управляемых узлов GPU включают экспортер метрик DCGM. Чтобы Azure Managed Prometheus мог принимать метрики GPU, сначала включите управляемую службу Azure Monitor для Prometheus в вашем кластере AKS. Затем создайте ConfigMap, который включает dcgmexporter профиль очистки в агенте Azure Monitor.
cat <<EOF | kubectl create -f -
kind: ConfigMap
apiVersion: v1
data:
schema-version:
v1
config-version:
ver1
default-scrape-settings-enabled: |-
dcgmexporter = true
metadata:
name: ama-metrics-settings-configmap
namespace: kube-system
EOF
После применения этого ConfigMap все существующие и новые пулы узлов GPU NVIDIA в кластере автоматически удаляются. Чтобы просмотреть метрики GPU в Управление Azure для Grafana, см. сведения о наблюдаемости GPU в Azure Kubernetes Service (AKS).
Развертывание приложения
Разверните рабочую нагрузку GPU, чтобы убедиться, что управляемый пул узлов GPU может запускать реальные приложения. В этом примере выполняется Ollama, которая обслуживает небольшую языковую модель с открытым исходным кодом (Llama 3.2 1B) с помощью API, совместимого с OpenAI. Ollama построена на основе llama.cpp, которая поддерживает графический процессор NVIDIA T4 в пуле узлов Standard_NC4as_T4_v3, используемом в этом кратком руководстве.
Следующий манифест создает Deployment и Service.
Deployment запрашивает один GPU (nvidia.com/gpu: 1), включает допуск для sku=gpu:NoSchedule taint и использует селектор узлов для выбора управляемого пула GPU-узлов. Когда контейнер запускается, он запускает сервер Ollama и загружает модель llama3.2:1b, чтобы под был готов обрабатывать запросы.
Разверните приложение с помощью следующей команды.
cat <<'EOF' | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: ollama
labels:
app: ollama
spec:
replicas: 1
selector:
matchLabels:
app: ollama
template:
metadata:
labels:
app: ollama
spec:
# Schedule onto the managed GPU node pool created in this quickstart.
nodeSelector:
kubernetes.azure.com/agentpool: gpunp
# Tolerate the GPU node pool taint (sku=gpu:NoSchedule).
tolerations:
- key: "sku"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"
containers:
- name: ollama
image: ollama/ollama:0.30.10
ports:
- name: http
containerPort: 11434
env:
# Listen on all interfaces so the Service and kubelet probes can reach it.
- name: OLLAMA_HOST
value: "0.0.0.0:11434"
# Model to pull and serve on startup. Fits comfortably on a 16-GB T4.
- name: MODEL
value: "llama3.2:1b"
# Start the server, wait until it's ready, and then pull the model so the
# pod is self-contained (no manual "ollama pull" step required).
command: ["/bin/sh", "-c"]
args:
- |
ollama serve &
pid=$!
echo "Waiting for the Ollama server to be ready..."
until ollama list >/dev/null 2>&1; do sleep 2; done
echo "Server ready. Pulling model: $MODEL"
ollama pull "$MODEL" || echo "WARN: pull failed; run 'kubectl exec deploy/ollama -- ollama pull $MODEL' manually"
echo "Model $MODEL is ready to serve."
wait $pid
resources:
requests:
cpu: "1"
memory: 4Gi
limits:
cpu: "4"
memory: 16Gi
nvidia.com/gpu: 1
startupProbe:
httpGet:
path: /api/tags
port: http
periodSeconds: 5
failureThreshold: 60
readinessProbe:
httpGet:
path: /api/tags
port: http
periodSeconds: 10
livenessProbe:
httpGet:
path: /
port: http
periodSeconds: 20
volumeMounts:
- name: ollama-data
mountPath: /root/.ollama
volumes:
- name: ollama-data
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: ollama
labels:
app: ollama
spec:
type: ClusterIP
selector:
app: ollama
ports:
- name: http
port: 11434
targetPort: http
EOF
Note
Этот манифест предназначен для пула gpunp узлов. Если для переменной GPU_NP использовалось другое значение, обновите kubernetes.azure.com/agentpool значение селектора узлов, чтобы оно соответствовало, прежде чем применить манифест.
Убедитесь, что развертывание завершено, с помощью команды kubectl rollout status. Начальная загрузка модели может занять несколько минут.
kubectl rollout status deployment/ollama --timeout=600s
Убедитесь, что модуль pod запущен в пуле управляемых узлов GPU с помощью команды get kubectl .
kubectl get pods -l app=ollama -o wide
Выходные данные должны отображать модуль pod, работающий на узле в пуле gpunp узлов.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ollama-5b8f6c9d4f-2xq7p 1/1 Running 0 5m 10.244.1.10 aks-gpunp-12345678-vmss000000 <none> <none>
Тестирование приложения
Перенаправите локальный порт в Service порт с помощью команды kubectl port-forward . Сохраните эту команду и откройте второй терминал для оставшихся шагов.
kubectl port-forward svc/ollama 11434:11434
Во втором терминале отправьте запрос модели с помощью конечной точки завершения чата, совместимого с OpenAI.
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama3.2:1b",
"messages": [{"role": "user", "content": "In one sentence, what is Azure Kubernetes Service?"}]
}'
Модель возвращает ответ в формате JSON, который содержит сгенерированный ответ и подтверждает, что рабочая нагрузка выполняет инференс с использованием управляемого пула GPU-узлов.
Убедитесь, что модель загружается на GPU с помощью ollama ps команды. Столбец PROCESSOR отображает 100% GPU, когда модель запускается на T4.
kubectl exec deploy/ollama -- ollama ps
NAME ID SIZE PROCESSOR CONTEXT UNTIL
llama3.2:1b baf6a787fdff 1.5 GB 100% GPU 4096 4 minutes from now
Вы также можете просмотреть GPU непосредственно из модуля pod с помощью nvidia-smi команды.
kubectl exec deploy/ollama -- nvidia-smi
После завершения тестирования остановите процесс kubectl port-forward, нажав Ctrl+C в его терминале. Приложение удаляется при удалении кластера на следующем шаге.
Удаление кластера
Если вы не планируете выполнять учебник AKS, очистите ненужные ресурсы, чтобы избежать расходов на выставление счетов Azure. Вы можете удалить группу ресурсов, службу контейнеров и все связанные ресурсы с помощью команды az group delete .
az group delete --name $RESOURCE_GROUP --no-wait --yes
Вы создали кластер AKS с управляемой идентификацией, назначаемой системой, которая используется в этом кратком руководстве по умолчанию. Платформа управляет этим удостоверением, так что вам не нужно удалять его вручную.
Дальнейшие действия
В этом кратком руководстве вы развернули кластер Kubernetes, а затем добавили управляемый пул узлов GPU на основе Linux. Дополнительные сведения об управляемых узлах GPU и метриках GPU см. в следующих статьях:
- Создайте полностью управляемый пул узлов GPU в Azure Kubernetes Service (AKS) (предварительная версия).
- Наблюдаемость GPU в Azure Kubernetes Service (AKS).
Дополнительные сведения об AKS и полный пример развертывания см. в руководстве по кластеру Kubernetes.