Exercício – Configurar conjuntos de nós spot com o dimensionador automático de cluster num cluster do AKS
Os pools de nós de usuário spot permitem que você acesse a capacidade de computação do Azure não utilizada a preços mais baixos com suporte para cenários de computação de alto desempenho.
No exercício anterior, você criou um pool de nós de usuário padrão, usou o autoscaler de cluster para gerenciar a criação de nós e dimensionou a contagem de nós manualmente.
A próxima etapa é adicionar um pool de nós de usuário spot com dimensionamento automático para reduzir os custos operacionais do cluster. O uso do cluster varia com base nos recursos necessários e não é previsível, portanto, você configura regras para capturar os picos e quedas. A carga de trabalho é implantada com a afinidade de nó habilitada para que o pod seja agendado em nós no pool de nós spot.
Criar um conjunto de nós spot
Você precisa criar um pool de nós separado que ofereça suporte ao serviço de processamento em lote. Este conjunto de nós é um conjunto de nós spot que utiliza a política de expulsão Eliminar e um preço máximo de spot de -1.
Execute o mesmo comando
az aks nodepool add
que no exercício anterior para adicionar um novo conjunto de nós spot ao cluster. Você precisa alterar o nome do pool de nós e adicionar mais alguns parâmetros para identificar esse pool de nós como um pool de nós spot.Insira os seguintes valores para definir os parâmetros do pool de nós:
- Nome:
batchprocpl2
- Prioridade:
Spot
- Política de expulsão:
Delete
- Preço máximo do spot:
-1
Execute o comando seguinte para criar o conjunto de nós spot:
az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl2 \ --enable-cluster-autoscaler \ --max-count 3 \ --min-count 1 \ --priority Spot \ --eviction-policy Delete \ --spot-max-price -1 \ --node-vm-size Standard_DS2_v2 \ --no-wait
Tenha em atenção que este pedido pode falhar, devido às restrições de capacidade na localização que selecionou.
- Nome:
Execute o comando
az aks nodepool show
para mostrar os detalhes do novo conjunto de nós spot para o processamento em lotes:az aks nodepool show \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl2
Veja a seguir um exemplo da saída do comando.
{ "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 3, "enableAutoScaling": true, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl2", "maxCount": 3, "maxPods": 110, "minCount": 1, "mode": "User", "name": "batchprocpl2", "nodeImageVersion": "AKSUbuntu-1604-2020.06.10", "nodeLabels": { "kubernetes.azure.com/scalesetpriority": "spot" }, "nodeTaints": [ "kubernetes.azure.com/scalesetpriority=spot:NoSchedule" ], "orchestratorVersion": "1.17.9", "osDiskSizeGb": 128, "osType": "Linux", "provisioningState": "Creating", "proximityPlacementGroupId": null, "resourceGroup": "akscostsavinggrp", "scaleSetEvictionPolicy": "Delete", "scaleSetPriority": "Spot", "spotMaxPrice": -1.0, "tags": null, "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": { "maxSurge": null }, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null }
Alguns valores neste resultado são diferentes dos que viu em conjuntos de nós anteriores. Vamos rever estes itens:
O valor da propriedade
enableAutoScaling
está definido comotrue
.Os valores
maxCount
eminCount
estão definidos.A propriedade
scaleSetEvictionPolicy
está definida comoDelete
.A propriedade
scaleSetPriority
está definida comoSpot
.A propriedade
spotMaxPrice
está definida como-1
.Os valores
nodeLabels
enodeTaints
são aplicados a este conjunto de nós. Pode utilizar estes valores para agendar cargas de trabalho nos nós no conjunto de nós.
Configurar um espaço de nomes
Execute o comando para criar um namespace chamado
costsavings
para okubectl create namespace
aplicativo. Vai utilizar este espaço de nomes para tornar mais fácil a seleção das cargas de trabalho.kubectl create namespace costsavings
Aqui está a saída do comando anterior:
namespace/costsavings created
Agendar um pod com a afinidade de nós spot
Você pode agendar um pod para ser executado em um nó local adicionando uma tolerância e uma afinidade ao arquivo de manifesto de implantação do pod. Quando a tolerância e a afinidade do nó correspondem à mancha e ao rótulo aplicados aos nós locais, o pod é programado nesses nós.
Os nós em um pool de nós spot recebem uma mancha igual kubernetes.azure.com/scalesetpriority=spot:NoSchedule
e um rótulo igual a kubernetes.azure.com/scalesetpriority=spot
. Use as informações desse par chave-valor na seção e affinity
do arquivo de manifesto tolerations
YAML de suas cargas de trabalho. Com o segundo conjunto de processamento em lotes configurado como um conjunto de nós spot, pode agora criar um ficheiro de implementação para agendar cargas de trabalho a serem executadas.
Com o editor integrado, crie um ficheiro de manifesto para a implementação do Kubernetes denominado
spot-node-deployment.yaml
:code spot-node-deployment.yaml
Gorjeta
O Cloud Shell inclui um editor de ficheiros integrado. O editor do Cloud Shell suporta funcionalidades como o realce da linguagem, a paleta de comandos e um explorador de ficheiros. Para criação e edição de ficheiros simples, inicie o editor ao executar
code .
no terminal do Cloud Shell. Esta ação abre o editor com o diretório de trabalho ativo definido no terminal. Para abrir o ficheiro de manifesto diretamente para edição rápida, executecode spot-node-deployment.yaml
. Este comando abre o editor sem o explorador de ficheiros.Cole o seguinte texto no ficheiro:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent tolerations: - key: "kubernetes.azure.com/scalesetpriority" operator: "Equal" value: "spot" effect: "NoSchedule" affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "kubernetes.azure.com/scalesetpriority" operator: In values: - "spot"
Prima Ctrl+S para guardar o ficheiro e, em seguida, prima Ctrl+Q para fechar o editor.
Execute o comando para aplicar a configuração e implantar o
kubectl apply
aplicativo nocostsavings
namespace:kubectl apply \ --namespace costsavings \ -f spot-node-deployment.yaml
Aqui está a saída do comando anterior:
pod/nginx created
Você pode obter mais informações sobre o pod em execução usando o sinalizador ao executar
kubectl get pods
o-o wide
comando. Neste caso, quer ver em que nó é que o pod está agendado. Certifique-se de que consulta os pods no espaço de nomescostsavings
.kubectl get pods --namespace costsavings -o wide
A saída deve ser semelhante à seguinte:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 43s 10.244.3.3 aks-batchprocpl2-25254417-vmss000000 <none> <none>
Repare no nome do nó:
aks-batchprocpl2-25254417-vmss000000
. Este nó faz parte do conjunto de nós spotbatchprocpl2
que criou anteriormente.