Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure Kubernetes Service (AKS) es un servicio de Kubernetes administrado que puede usar para implementar y administrar clústeres rápidamente. En este inicio rápido, aprenderá a:
- Implemente un clúster de AKS mediante CLI de Azure.
- Agregue un grupo de nodos de GPU basado en Linux con nodos de GPU administrados habilitados.
- Compruebe que AKS instaló y configuró la pila de software de la GPU para la planificación.
Los nodos de GPU totalmente administrados son una característica en versión preliminar. Al habilitar nodos de GPU administrados, AKS instala y administra el controlador de GPU nvidia, el complemento de dispositivos NVIDIA Kubernetes, el exportador de métricas de Data Center GPU Manager (DCGM) y los componentes de supervisión de estado de GPU para el grupo de nodos de GPU. Los nodos de GPU administrados también integran métricas de GPU en tiempo real para su ingesta en Azure Managed Prometheus y el servicio administrado para Prometheus de Azure Monitor. Para más información, consulte Creación de un grupo de nodos de GPU totalmente administrado en Azure Kubernetes Service (AKS) (versión preliminar) y observabilidad de GPU en Azure Kubernetes Service (AKS).
Note
En este artículo se incluyen los pasos para implementar un clúster solo con fines de evaluación. Antes de implementar un clúster listo para producción, familiarícese con la arquitectura de referencia de línea base para considerar cómo se alinea con sus requisitos empresariales.
Importante
Las características en versión preliminar de AKS están disponibles en modalidad de autoservicio y previa suscripción. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y la garantía limitada. Las versiones preliminares de AKS cuentan con soporte parcial por parte del servicio al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:
Antes de empezar
En esta guía rápida se presupone un conocimiento básico de los conceptos de Kubernetes. Para más información, consulte Conceptos básicos de Kubernetes de Azure Kubernetes Service (AKS).
- Si no tiene una cuenta de Azure, cree una cuenta gratuita antes de comenzar.
Use el entorno de Bash en Azure Cloud Shell. Para obtener más información, consulte Introducción a Azure Cloud Shell.
Si prefieres ejecutar comandos de referencia CLI localmente, instala la CLI de Azure. Si estás utilizando Windows o macOS, considera ejecutar CLI de Azure en un contenedor Docker. Para obtener más información, consulte Cómo ejecutar el CLI de Azure en un contenedor de Docker.
Si estás utilizando una instalación local, inicia sesión en CLI de Azure utilizando el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Autenticación en Azure mediante la CLI de Azure.
Cuando se le solicite, instale la extensión CLI de Azure en el primer uso. Para obtener más información sobre las extensiones, consulte Uso y administración de extensiones con la CLI de Azure.
Ejecute az version para ver la versión y las bibliotecas dependientes que están instaladas. Para actualizar a la versión más reciente, ejecute az upgrade.
- Necesita CLI de Azure versión 2.85.0 o posterior. Para encontrar la versión, ejecute
az --version. Si tiene que instalar o actualizar la CLI de Azure, vea Instalación de la CLI de Azure. - Asegúrese de que la identidad que usa para crear el clúster tiene los permisos mínimos adecuados. Para más información sobre el acceso y la identidad en AKS, consulte Opciones de acceso e identidad en Azure Kubernetes Service (AKS).
- Si tiene varias suscripciones de Azure, seleccione el identificador de suscripción adecuado para la facturación mediante el comando az account set. Para obtener más información, consulte Administración de suscripciones de Azure: CLI de Azure.
- En función de su suscripción de Azure, es posible que tenga que solicitar un aumento de la cuota de vCPU para la familia de máquinas virtuales con GPU que utilice en este inicio rápido. Para más información, consulte Aumento de las cuotas de vCPU de la familia de máquinas virtuales.
- Los tamaños de máquina virtual habilitados para GPU contienen hardware especializado sujeto a precios más altos y disponibilidad regional. Para más información, consulte Tamaños de máquina virtual optimizados para GPU.
Instalación de la extensión aks-preview de la CLI
Instale la extensión de la aks-preview CLI mediante el comando az extension add .
az extension add --name aks-preview
Actualice la extensión para asegurarse de que tiene la versión más reciente mediante el comando az extension update .
az extension update --name aks-preview
Registro de la característica de vista previa
Registre el indicador de características ManagedGPUExperiencePreview en su suscripción con el comando az feature register.
az feature register --namespace Microsoft.ContainerService --name ManagedGPUExperiencePreview
Tarda unos minutos en que el estado muestre Registrado. Para comprobar el estado de registro se usa el comandoaz feature show.
az feature show --namespace Microsoft.ContainerService --name ManagedGPUExperiencePreview --query properties.state
Cuando el estado muestre Registrado, actualice el registro del Microsoft.ContainerService proveedor de recursos mediante el comando az provider register .
az provider register --namespace Microsoft.ContainerService
Definición de variables de entorno
Defina las siguientes variables de entorno para usarlas en este inicio rápido.
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"
La RANDOM_STRING variable almacena una cadena aleatoria de 10 dígitos. Los valores de las variables RESOURCE_GROUP y CLUSTER_NAME se concatenan con el valor RANDOM_STRING para crear nombres únicos. La GPU_NP variable almacena el nombre del grupo de nodos de GPU administrado. La GPU_VM_SIZE variable almacena el tamaño de máquina virtual habilitado para GPU para el grupo de nodos. La LOCATION variable tiene el valor westus. Puede usar estos valores de variable o crear sus propios. Use el echo comando para ver valores de variable como echo $RANDOM_STRING.
Creación de un grupo de recursos
Un grupo de recursos Azure es un grupo lógico para implementar y administrar recursos Azure. Al crear un grupo de recursos, especifique una ubicación. Esta ubicación es donde se almacenan los metadatos del grupo de recursos y dónde se ejecutan los recursos en Azure si no especifica otra región durante la creación de recursos.
Use el comando az group create para crear un grupo de recursos.
az group create --name $RESOURCE_GROUP --location $LOCATION
En el ejemplo siguiente se muestra el resultado.
{
"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"
}
Creación de un clúster de AKS
Use el comando az aks create para crear un clúster de AKS. En el ejemplo siguiente se crea un clúster con un nodo del sistema y se habilita una identidad administrada asignada por el sistema.
az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--node-count 1 \
--generate-ssh-keys
Al crear un nuevo clúster, AKS crea automáticamente un segundo grupo de recursos para almacenar los recursos de AKS. Para más información, consulte ¿Por qué se crean dos grupos de recursos con AKS?
El clúster de este ejemplo especifica un recuento de nodos de uno para ahorrar tiempo y recursos. En un entorno de producción, use un recuento de nodos de tres o más nodos. El az aks create comando tiene como valor predeterminado tres nodos si no especifica un recuento de nodos.
Adición de un grupo de nodos de GPU administrado
Agregue un grupo de nodos de GPU administrados basado en Linux al clúster mediante el comando az aks nodepool add . El --enable-managed-gpu=true parámetro configura AKS para instalar y administrar el controlador de GPU nvidia, el complemento de dispositivos NVIDIA Kubernetes, el exportador de métricas DCGM y los componentes de supervisión del estado de GPU en el grupo de nodos.
En el ejemplo siguiente se agrega un grupo de nodos de GPU administrado mediante el sistema operativo Ubuntu Linux predeterminado.
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
El --node-taints sku=gpu:NoSchedule parámetro mantiene las cargas de trabajo que no son de GPU fuera del grupo de nodos de GPU a menos que las cargas de trabajo incluyan una tolerancia coincidente.
Después de crear el grupo de nodos, use el comando az aks nodepool show para confirmar que el perfil de GPU administrado está habilitado.
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}"
La salida debe incluir los valores siguientes.
{
"GpuProfile": {
"driver": "Install",
"driverType": "",
"nvidia": {
"managementMode": "Managed",
"migStrategy": null
}
},
"Mode": "User",
"Name": "gpunp",
"Taints": [
"sku=gpu:NoSchedule"
],
"VmSize": "Standard_NC4as_T4_v3"
}
Conectarse al clúster
Para administrar un clúster de Kubernetes, use kubectl, el cliente de línea de comandos de Kubernetes. Si usa Azure Cloud Shell, kubectl ya está instalado. Para instalar kubectl localmente, use el comando az aks install-cli.
Configure
kubectlpara conectarse al clúster de Kubernetes mediante el comando az aks get-credentials . Con este comando se descargan las credenciales y se configura la CLI de Kubernetes para usarlas.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMECompruebe la conexión al clúster mediante el comando kubectl get . Este comando devuelve una lista de los nodos del clúster y muestra el grupo de nodos para cada nodo.
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 userCompruebe que Kubernetes puede programar cargas de trabajo de GPU en el grupo de nodos de GPU administrado.
kubectl get nodes -l kubernetes.azure.com/agentpool=$GPU_NP -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.allocatable.nvidia\.com/gpu}{"\n"}{end}'La salida muestra el recuento de GPU allocatable para cada nodo del grupo de nodos de GPU administrado.
aks-gpunp-123456789-vmss000000 1
Habilitación de la recopilación de métricas de GPU
Los grupos de nodos de GPU administrados incluyen el exportador de métricas DCGM. Para ingerir las métricas de GPU en Azure Managed Prometheus, primero habilite el servicio administrado de Azure Monitor para Prometheus en su clúster de AKS. A continuación, cree un ConfigMap que habilite el perfil de extracción dcgmexporter en el agente de 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
Después de aplicar este ConfigMap, todos los grupos de nodos con GPU de NVIDIA, tanto existentes como nuevos, en el clúster se recopilan automáticamente. Para ver las métricas de GPU en Azure Managed Grafana, consulte Observabilidad de GPU en Azure Kubernetes Service (AKS).
Implementación de la aplicación
Implemente una carga de trabajo de GPU para confirmar que el grupo de nodos de GPU administrado puede ejecutar aplicaciones reales. En este ejemplo se ejecuta Ollama, que sirve un pequeño modelo de lenguaje grande de código abierto (Llama 3.2 1B) a través de una API compatible con OpenAI. Ollama se basa en llama.cpp, que admite la GPU NVIDIA T4 en el Standard_NC4as_T4_v3 grupo de nodos que usa esta guía de inicio rápido.
El siguiente manifiesto crea un Deployment y un Service. El Deployment solicita una GPU (nvidia.com/gpu: 1), incluye una tolerancia para la marca sku=gpu:NoSchedule y usa un selector de nodos para seleccionar el grupo de nodos de GPU administrado. Cuando se inicia el contenedor, se inicia el servidor de Ollama y se descarga el modelo llama3.2:1b para que el pod esté listo para procesar solicitudes.
Implemente la aplicación mediante el comando siguiente.
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
Este manifiesto tiene como destino el grupo de gpunp nodos. Si usó un valor diferente para la GPU_NP variable, actualice el valor del kubernetes.azure.com/agentpool selector de nodos para que coincida antes de aplicar el manifiesto.
Confirme que la implementación está lista mediante el comando kubectl rollout status . La descarga del modelo inicial puede tardar unos minutos.
kubectl rollout status deployment/ollama --timeout=600s
Compruebe que el pod se ejecuta en el grupo de nodos de GPU administrado mediante el comando kubectl get .
kubectl get pods -l app=ollama -o wide
La salida debe mostrar el pod en ejecución en un nodo del grupo de nodos 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>
Prueba de la aplicación
Reenvíe un puerto local a Service mediante el comando kubectl port-forward . Mantenga este comando en ejecución y abra un segundo terminal para los pasos restantes.
kubectl port-forward svc/ollama 11434:11434
En el segundo terminal, envíe un prompt al modelo mediante el endpoint de finalizaciones de chat compatible con 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?"}]
}'
El modelo devuelve una respuesta JSON que contiene una respuesta generada, que confirma que la carga de trabajo atiende la inferencia desde el grupo de nodos de GPU administrado.
Confirme que el modelo se carga en la GPU mediante el ollama ps comando . La PROCESSOR columna muestra 100% GPU cuándo se ejecuta el modelo en el 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
También puede ver la GPU directamente desde dentro del pod mediante el nvidia-smi comando .
kubectl exec deploy/ollama -- nvidia-smi
Cuando termine de probar, detenga el kubectl port-forward proceso seleccionando Ctrl+C en su terminal. La aplicación se quita al eliminar el clúster en el paso siguiente.
Eliminación del clúster
Si no planea realizar el tutorial de AKS, limpie los recursos innecesarios para evitar los cargos de facturación de Azure. Puede quitar el grupo de recursos, el servicio de contenedor y todos los recursos relacionados mediante el comando az group delete .
az group delete --name $RESOURCE_GROUP --no-wait --yes
Ha creado el clúster de AKS con una identidad administrada asignada por el sistema, que es la opción de identidad predeterminada que se usa en este inicio rápido. La plataforma administra esta identidad para que no tenga que quitarla manualmente.
Pasos siguientes
En este inicio rápido, ha implementado un clúster de Kubernetes y, a continuación, ha agregado un grupo de nodos de GPU administrados basado en Linux. Para más información sobre los nodos de GPU administrados y las métricas de GPU, consulte los siguientes artículos:
- Cree un grupo de nodos de GPU totalmente administrado en Azure Kubernetes Service (AKS) (versión preliminar).
- Observabilidad de GPU en Azure Kubernetes Service (AKS).
Para más información sobre AKS y realizar un ejemplo completo de código a implementación, continúe con el tutorial del clúster de Kubernetes.