Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Azure Kubernetes Service (AKS) é um serviço Kubernetes gerido que pode usar para implementar e gerir clusters rapidamente. Neste início rápido, vais aprender como:
- Implemente um cluster AKS usando CLI do Azure.
- Adicione um pool de nós de GPU baseado em Linux com nós de GPU geridos ativados.
- Verifique se o AKS instalou e configurou a pilha de software da GPU necessária ao agendamento.
Os nós totalmente geridos da GPU são uma funcionalidade de pré-visualização. Quando ativa nós de GPU geridos, o AKS instala e gere o controlador da GPU da NVIDIA, o plug-in de dispositivo do Kubernetes da NVIDIA, o exportador de métricas do Data Center GPU Manager (DCGM) e os componentes de monitorização do estado de funcionamento da GPU para o conjunto de nós de GPU. Os nós de GPU geridos também integram métricas de GPU em tempo real para ingestão no Azure Managed Prometheus e no serviço gerido do Azure Monitor para Prometheus. Para mais informações, veja Criar um pool de nós GPU totalmente gerido no Azure Kubernetes Service (AKS) (pré-visualização) e a observabilidade da GPU no Azure Kubernetes Service (AKS).
Note
Este artigo inclui passos para implementar um cluster apenas para fins de avaliação. Antes de implementar um cluster pronto para produção, familiarize-se com a arquitetura de referência base para considerar como esta se alinha com os requisitos do seu negócio.
Importante
As funcionalidades de pré-visualização do AKS estão disponíveis num regime de autosserviço e de adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões de pré-visualização do AKS são apenas parcialmente abrangidas pelo suporte ao cliente, na medida do possível. Assim sendo, estas funcionalidades não se destinam ao uso em produção. Para obter mais informações, consulte os seguintes artigos de suporte:
Antes de começares
Este guia de iniciação rápida pressupõe uma compreensão básica dos conceitos do Kubernetes. Para obter mais informações, consulte Conceitos principais do Kubernetes para o Serviço Kubernetes do Azure (AKS).
- Se não tiver uma conta do Azure, crie uma conta gratuita antes de começar.
Usa o ambiente Bash em Azure Cloud Shell. Para mais informações, veja Get started with Azure Cloud Shell.
Se preferires executar comandos de referência de CLI localmente, instala o CLI do Azure. Se estiver a usar Windows ou macOS, considere executar o CLI do Azure num contentor Docker. Para mais informações, veja Como executar o CLI do Azure num contentor Docker.
Se você estiver usando uma instalação local, entre na CLI do Azure usando o comando az login . Para concluir o processo de autenticação, siga os passos exibidos no seu terminal. Para outras opções de iniciação de sessão, veja Autenticar para Azure usando CLI do Azure.
Quando solicitado, instale a extensão do CLI do Azure na primeira utilização. Para mais informações sobre extensões, veja Usar e gerir extensões com a CLI do Azure.
Execute az version para descobrir a versão e as bibliotecas dependentes que estão instaladas. Para atualizar para a versão mais recente, execute az upgrade.
- Precisas do CLI do Azure versão 2.85.0 ou posterior. Para localizar a versão, execute
az --version. Se você precisar instalar ou atualizar a CLI do Azure, consulte Instalar a CLI do Azure. - Certifique-se de que a identidade que está a usar para criar o seu cluster tem as permissões mínimas apropriadas. Para obter mais informações sobre acesso e identidade para AKS, consulte Opções de acesso e identidade para o Serviço Kubernetes do Azure (AKS).
- Se tiver várias subscrições do Azure, selecione o ID de subscrição apropriado para faturação usando o comando az account set. Para mais informações, veja Como gerir subscrições do Azure - CLI do Azure.
- Dependendo da sua subscrição Azure, poderá ter de solicitar um aumento da quota de vCPU para a família de máquinas virtuais com GPU que utiliza neste início rápido. Para obter mais informações, consulte Aumentar cotas de vCPU da família VM.
- Os tamanhos de VM com GPU incluem hardware especializado e estão sujeitos a preços mais elevados e à disponibilidade regional. Para mais informações, consulte Tamanhos de máquinas virtuais otimizados para GPU.
Instalar a aks-preview extensão CLI
Instala a extensão da aks-preview CLI utilizando o comando az extension add.
az extension add --name aks-preview
Atualize a extensão para garantir que tem a versão mais recente usando o comando de atualização da extensão az .
az extension update --name aks-preview
Registe-se na funcionalidade de pré-visualização
Registe o sinalizador de funcionalidade ManagedGPUExperiencePreview na sua subscrição com o comando az feature register.
az feature register --namespace Microsoft.ContainerService --name ManagedGPUExperiencePreview
Leva alguns minutos para que o status mostre Registrado. Verifique o status do registro usando o comando az feature show .
az feature show --namespace Microsoft.ContainerService --name ManagedGPUExperiencePreview --query properties.state
Quando o estado mostrar Registado, atualize o registo do fornecedor de recursos Microsoft.ContainerService utilizando o comando az provider register.
az provider register --namespace Microsoft.ContainerService
Definir variáveis de ambiente
Defina as seguintes variáveis de ambiente para uso durante este início 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"
A RANDOM_STRING variável armazena uma sequência aleatória de 10 dígitos. Os valores das variáveis RESOURCE_GROUP e CLUSTER_NAME são concatenados com o valor RANDOM_STRING para criar nomes únicos. A GPU_NP variável armazena o nome do pool de nós da GPU gerida. A GPU_VM_SIZE variável armazena o tamanho da VM com GPU para o pool de nós. A LOCATION variável tem o valor westus. Pode usar estes valores variáveis ou criar os seus próprios. Use o echo comando para exibir valores de variáveis como echo $RANDOM_STRING.
Criar um grupo de recursos
Um grupo de recursos do Azure é um grupo lógico para implementar e gerir recursos do Azure. Quando criares um grupo de recursos, especifica uma localização. Esta localização é onde os metadados do grupo de recursos são armazenados e onde os seus recursos correm no Azure caso não especifique outra região durante a criação dos recursos.
Use o comando criar grupo az para criar um grupo de recursos.
az group create --name $RESOURCE_GROUP --location $LOCATION
O exemplo seguinte mostra o 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"
}
Criar um cluster do AKS
Utilize o comando az aks create para criar um cluster AKS. O exemplo seguinte cria um cluster com um nó de sistema e ativa uma identidade gerida atribuída pelo sistema.
az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--node-count 1 \
--generate-ssh-keys
Quando você cria um novo cluster, o AKS cria automaticamente um segundo grupo de recursos para armazenar os recursos do AKS. Para obter mais informações, consulte Por que dois grupos de recursos são criados com o AKS?
O cluster neste exemplo especifica um número de nós de um para poupar tempo e recursos. Num ambiente de produção, utilize um número de nós igual ou superior a três. O az aks create comando por defeito tem três nós se não especificares a contagem de nós.
Adicionar um pool de nós de GPU gerido
Adicione um pool de nós de GPU geridos baseado no Linux ao seu cluster utilizando o comando az aks nodepool add. O parâmetro --enable-managed-gpu=true configura o AKS para instalar e gerir o controlador da GPU NVIDIA, o plug-in de dispositivo do Kubernetes da NVIDIA, o exportador de métricas do DCGM e os componentes de monitorização do estado da GPU no pool de nós.
O exemplo seguinte adiciona um pool de nós GPU gerido utilizando o sistema operativo Ubuntu Linux por defeito.
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
O --node-taints sku=gpu:NoSchedule parâmetro mantém cargas de trabalho não-GPU fora do pool de nós da GPU, a menos que as cargas de trabalho incluam uma tolerância correspondente.
Depois de criar o conjunto de nós, use o comando az aks nodepool show para confirmar que o perfil de GPU gerido está ativado.
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}"
A sua saída deve incluir os seguintes valores.
{
"GpuProfile": {
"driver": "Install",
"driverType": "",
"nvidia": {
"managementMode": "Managed",
"migStrategy": null
}
},
"Mode": "User",
"Name": "gpunp",
"Taints": [
"sku=gpu:NoSchedule"
],
"VmSize": "Standard_NC4as_T4_v3"
}
Ligar ao cluster
Para gerenciar um cluster Kubernetes, use o cliente de linha de comando Kubernetes, kubectl. Se você usa o Azure Cloud Shell, kubectl já está instalado. Para instalar kubectl localmente, use o comando az aks install-cli .
Configure
kubectlpara se ligar ao seu cluster Kubernetes usando o comando az-aks get-credentials . Este comando baixa credenciais e configura a CLI do Kubernetes para usá-las.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMEVerifica a ligação ao teu cluster usando o comando kubectl get . Este comando devolve uma lista dos nós do cluster e mostra o pool de nós para cada nó.
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 userVerifique se o Kubernetes consegue programar cargas de trabalho de GPU no conjunto de nós GPU gerido.
kubectl get nodes -l kubernetes.azure.com/agentpool=$GPU_NP -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.allocatable.nvidia\.com/gpu}{"\n"}{end}'A saída mostra o número de GPUs alocáveis para cada nó no conjunto gerido de nós de GPU.
aks-gpunp-123456789-vmss000000 1
Ativar a recolha de métricas da GPU
Pools de nós de GPU geridos incluem o exportador de métricas DCGM. Para integrar as métricas da GPU no Azure Managed Prometheus, ative primeiro o serviço gerido Azure Monitor para Prometheus no seu cluster AKS. Depois, crie um ConfigMap que ative o perfil de scraping dcgmexporter no agente do 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
Depois de aplicar este ConfigMap, todos os grupos de nós com GPU NVIDIA, existentes e novos, no cluster são automaticamente recolhidos. Para visualizar métricas GPU em Azure Managed Grafana, veja a observabilidade GPU em Azure Kubernetes Service (AKS).
Implementar a aplicação
Implemente uma carga de trabalho da GPU para confirmar que o pool de nós da GPU gerida pode executar aplicações reais. Este exemplo corre o Ollama, que serve um pequeno modelo de linguagem open source (Llama 3.2 1B) através de uma API compatível com OpenAI. O Ollama baseia-se em llama.cpp, que suporta a GPU NVIDIA T4 no conjunto de nós Standard_NC4as_T4_v3 utilizado por este guia de início rápido.
O seguinte manifesto cria um Deployment e um Service. O Deployment solicita uma GPU (nvidia.com/gpu: 1), inclui uma tolerância para o taint sku=gpu:NoSchedule e usa um seletor de nós para direcionar para o pool de nós GPU gerido. Quando o contentor inicia, lança o servidor Ollama e puxa o llama3.2:1b modelo para que o pod esteja pronto para receber pedidos.
Implemente a aplicação usando o seguinte comando.
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 manifesto destina-se ao conjunto de nós gpunp. Se usou um valor diferente para a GPU_NP variável, atualize o kubernetes.azure.com/agentpool valor do seletor de nós para corresponder antes de aplicar o manifesto.
Confirme que a implementação está pronta usando o comando de estado de implementação do kubectl . O download inicial do modelo pode demorar alguns minutos.
kubectl rollout status deployment/ollama --timeout=600s
Verifique que o pod está em execução no conjunto de nós de GPU gerido utilizando o comando kubectl get.
kubectl get pods -l app=ollama -o wide
O resultado deve mostrar o pod em execução num nó no conjunto de nós 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>
Testar a aplicação
Encaminhe uma porta local para o Service usando o comando kubectl port-forward . Mantenha este comando ativo e abra um segundo terminal para os passos restantes.
kubectl port-forward svc/ollama 11434:11434
No segundo terminal, envie um prompt ao modelo usando o endpoint de conclusão de chat compatível com 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?"}]
}'
O modelo devolve uma resposta JSON que contém uma resposta gerada, o que confirma que a carga de trabalho está a processar inferência a partir do conjunto de nós de GPU geridos.
Confirma que o modelo está carregado na GPU usando o ollama ps comando. A PROCESSOR coluna mostra 100% GPU quando o modelo corre no 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
Também podes ver a GPU diretamente do interior do pod usando o nvidia-smi comando.
kubectl exec deploy/ollama -- nvidia-smi
Quando terminar o teste, pare o kubectl port-forward processo selecionando Ctrl+C no seu terminal. A aplicação é removida quando apagas o cluster no passo seguinte.
Eliminar o cluster
Se não planeias fazer o tutorial do AKS, limpa recursos desnecessários para evitar cobranças no Azure. Pode remover o grupo de recursos, o serviço de contentores e todos os recursos relacionados usando o comando delete do grupo az .
az group delete --name $RESOURCE_GROUP --no-wait --yes
Criou o cluster do AKS com uma identidade gerida atribuída pelo sistema, que é a opção de identidade predefinida utilizada neste guia de início rápido. A plataforma gerencia essa identidade para que você não precise removê-la manualmente.
Passos seguintes
Neste quickstart, implementaste um cluster Kubernetes e depois adicionaste um pool de nós de GPU gerido baseado em Linux. Para mais informações sobre nós de GPU geridos e métricas de GPU, consulte os seguintes artigos:
- Criar um pool de nós GPU totalmente gerido no Azure Kubernetes Service (AKS) (pré-visualização).
- Observabilidade da GPU no Azure Kubernetes Service (AKS).
Para saber mais sobre o AKS e fazer um exemplo completo de código para implantação, continue para o tutorial do cluster Kubernetes.