Criar um cluster do Serviço Kubernetes do Azure (AKS) que usa zonas de disponibilidade
Este artigo mostra como criar um cluster AKS e distribuir os componentes do nó pelas zonas de disponibilidade.
Antes de começar
- Você precisa da CLI do Azure versão 2.0.76 ou posterior instalada e configurada. Executar
az --version
para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI). - Leia a visão geral das zonas de disponibilidade no AKS para entender os benefícios e as limitações do uso de zonas de disponibilidade no AKS.
Modelos e zonas de disponibilidade do Azure Resource Manager
Lembre-se dos seguintes detalhes ao criar um cluster AKS com zonas de disponibilidade usando um modelo do Azure Resource Manager:
- Se você definir explicitamente um valor nulo em um modelo, por exemplo,
"availabilityZones": null
, o modelo tratará a propriedade como se ela não existisse. Isso significa que seu cluster não é implantado em uma zona de disponibilidade. - Se você não incluir a
"availabilityZones":
propriedade no modelo, o cluster não será implantado em uma zona de disponibilidade. - Não é possível atualizar as configurações de zonas de disponibilidade em um cluster existente, pois o comportamento é diferente quando você atualiza um cluster AKS com modelos do Azure Resource Manager. Se você definir explicitamente um valor nulo em seu modelo para zonas de disponibilidade e atualizar seu cluster, ele não atualizará seu cluster para zonas de disponibilidade. No entanto, se você omitir a propriedade de zonas de disponibilidade com sintaxe como
"availabilityZones": []
, a implantação tentará desabilitar as zonas de disponibilidade no cluster AKS existente e falhará.
Criar um cluster AKS entre zonas de disponibilidade
Quando você cria um cluster usando o az aks create
comando, o parâmetro especifica as --zones
zonas de disponibilidade nas quais implantar nós de agente. As zonas de disponibilidade nas quais os componentes do plano de controle gerenciado são implantados não são controladas por esse parâmetro. Eles são distribuídos automaticamente por todas as zonas de disponibilidade (se presentes) na região durante a implantação do cluster.
Os comandos de exemplo a seguir mostram como criar um grupo de recursos e um cluster AKS com um total de três nós. Um nó de agente na zona 1, um em 2 e, em seguida, um em 3.
Crie um grupo de recursos usando o
az group create
comando.az group create --name $RESOURCE_GROUP --location $LOCATION
Crie um cluster AKS usando o
az aks create
comando com o--zones
parâmetro.az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --generate-ssh-keys \ --vm-set-type VirtualMachineScaleSets \ --load-balancer-sku standard \ --node-count 3 \ --zones 1 2 3
A criação do cluster do AKS demora alguns minutos.
Ao decidir a que zona um novo nó deve pertencer, um pool de nós AKS especificado usa um balanceamento de zona de melhor esforço oferecido pelos Conjuntos de Escala de Máquina Virtual do Azure subjacentes. O pool de nós AKS é "equilibrado" quando cada zona tem o mesmo número de VMs ou +- uma VM em todas as outras zonas para o conjunto de escala.
Verificar a distribuição de nós entre zonas
Quando o cluster estiver pronto, liste em qual zona de disponibilidade os nós do agente no conjunto de escala estão.
Obtenha as credenciais do cluster AKS usando o
az aks get-credentials
comando:az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Liste os nós no cluster usando o
kubectl describe
comando e filtre otopology.kubernetes.io/zone
valor.kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
O exemplo de saída a seguir mostra os três nós distribuídos pela região especificada e zonas de disponibilidade, como eastus2-1 para a primeira zona de disponibilidade e eastus2-2 para a segunda zona de disponibilidade:
Name: aks-nodepool1-28993262-vmss000000 topology.kubernetes.io/zone=eastus2-1 Name: aks-nodepool1-28993262-vmss000001 topology.kubernetes.io/zone=eastus2-2 Name: aks-nodepool1-28993262-vmss000002 topology.kubernetes.io/zone=eastus2-3
À medida que você adiciona mais nós a um pool de agentes, a plataforma Azure distribui automaticamente as VMs subjacentes pelas zonas de disponibilidade especificadas.
Com as versões 1.17.0 e posteriores do Kubernetes, o AKS usa o topology.kubernetes.io/zone
rótulo e o preterido failure-domain.beta.kubernetes.io/zone
. Você pode obter o mesmo resultado executando o kubectl describe nodes
comando no exemplo anterior usando o seguinte comando:
kubectl get nodes -o custom-columns=NAME:'{.metadata.name}',REGION:'{.metadata.labels.topology\.kubernetes\.io/region}',ZONE:'{metadata.labels.topology\.kubernetes\.io/zone}'
O exemplo a seguir se assemelha à saída com detalhes mais detalhados:
NAME REGION ZONE
aks-nodepool1-34917322-vmss000000 eastus eastus-1
aks-nodepool1-34917322-vmss000001 eastus eastus-2
aks-nodepool1-34917322-vmss000002 eastus eastus-3
Verificar a distribuição do pod entre zonas
Conforme documentado em Rótulos, anotações e manchas conhecidos, o Kubernetes usa o topology.kubernetes.io/zone
rótulo para distribuir automaticamente pods em um controlador ou serviço de replicação nas diferentes zonas disponíveis. Neste exemplo, você testa o rótulo e dimensiona seu cluster de 3 para 5 nós para verificar se o pod se espalha corretamente.
Dimensione seu cluster AKS de 3 para 5 nós usando o
az aks scale
comando com o--node-count
conjunto como5
.az aks scale \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --node-count 5
Quando a operação de escala for concluída, verifique a distribuição do pod nas zonas usando o seguinte
kubectl describe
comando:kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
O exemplo de saída a seguir mostra os cinco nós distribuídos pela região especificada e zonas de disponibilidade, como eastus2-1 para a primeira zona de disponibilidade e eastus2-2 para a segunda zona de disponibilidade:
Name: aks-nodepool1-28993262-vmss000000 topology.kubernetes.io/zone=eastus2-1 Name: aks-nodepool1-28993262-vmss000001 topology.kubernetes.io/zone=eastus2-2 Name: aks-nodepool1-28993262-vmss000002 topology.kubernetes.io/zone=eastus2-3 Name: aks-nodepool1-28993262-vmss000003 topology.kubernetes.io/zone=eastus2-1 Name: aks-nodepool1-28993262-vmss000004 topology.kubernetes.io/zone=eastus2-2
Implante
kubectl scale
um aplicativo NGINX com três réplicas usando os seguinteskubectl create deployment
comandos:kubectl create deployment nginx --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine kubectl scale deployment nginx --replicas=3
Verifique a distribuição do pod nas zonas usando o seguinte
kubectl describe
comando:kubectl describe pod | grep -e "^Name:" -e "^Node:"
O exemplo de saída a seguir mostra os três pods distribuídos pela região especificada e zonas de disponibilidade, como eastus2-1 para a primeira zona de disponibilidade e eastus2-2 para a segunda zona de disponibilidade:
Name: nginx-6db489d4b7-ktdwg Node: aks-nodepool1-28993262-vmss000000/10.240.0.4 Name: nginx-6db489d4b7-v7zvj Node: aks-nodepool1-28993262-vmss000002/10.240.0.6 Name: nginx-6db489d4b7-xz6wj Node: aks-nodepool1-28993262-vmss000004/10.240.0.8
Como você pode ver na saída anterior, o primeiro pod está sendo executado no nó 0 localizado na zona
eastus2-1
de disponibilidade. O segundo pod está sendo executado no nó 2, correspondente aeastus2-3
, e o terceiro no nó 4, emeastus2-2
. Sem qualquer configuração extra, o Kubernetes distribui os pods corretamente pelas três zonas de disponibilidade.
Próximos passos
Este artigo descreveu como criar um cluster AKS usando zonas de disponibilidade. Para obter mais considerações sobre clusters altamente disponíveis, consulte Práticas recomendadas para continuidade de negócios e recuperação de desastres no AKS.
Azure Kubernetes Service