Criar um cluster do AKS (Serviço de Kubernetes do Azure) que usa zonas de disponibilidade
Este artigo mostra como criar um cluster do AKS e distribuir os componentes do nó entre zonas de disponibilidade.
Antes de começar
- Você precisará da CLI do Azure versão 2.0.76 ou posterior instalada e configurada. Execute
az --version
para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure. - 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 de Azure Resource Manager e zonas de disponibilidade
Tenha os seguintes detalhes em mente ao criar um cluster do 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 o cluster não é implantado em uma zona de disponibilidade. - Se você não incluir a propriedade
"availabilityZones":
no modelo, o cluster não será implantado em uma zona de disponibilidade. - Você não pode atualizar as configurações para zonas de disponibilidade em um cluster existente, pois o comportamento é diferente quando você atualiza um cluster do AKS com modelos do Azure Resource Manager. Se você definir explicitamente um valor nulo em seu modelo para zonas de disponibilidade e atualizar o cluster, isso não atualizará o 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 do AKS existente e falhará.
Criar um cluster do AKS entre zonas de disponibilidade
Quando você cria um cluster usando o comando az aks create
, o parâmetro --zones
especifica as zonas de disponibilidade nas quais implantar nós do 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. São distribuídos automaticamente em todas as zonas de disponibilidade (se houver) 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 do AKS com um total de três nós. Um nó de agente na zona 1, um em 2 e um em 3.
Crie um grupo de recursos usando o comando
az group create
.az group create --name $RESOURCE_GROUP --location $LOCATION
Crie um cluster do AKS usando o comando
az aks create
com o parâmetro--zones
.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
Leva alguns minutos para o cluster do AKS ser criado.
Ao decidir a qual zona um novo nó deve pertencer, um pool de nós do AKS especificado usa um melhor balanceamento de zona de esforço oferecido pelos Conjuntos de Dimensionamento de Máquinas Virtuais do Azure subjacentes. O pool de nós do AKS é “balanceado” quando cada zona tem o mesmo número de VMs ou +- uma VM em todas as outras zonas para o conjunto de dimensionamento.
Verificar a distribuição de nós entre zonas
Quando o cluster estiver pronto, liste a zona de disponibilidade em que os nós de agente no conjunto de dimensionamento estão.
Obtenha as credenciais de cluster do AKS usando o comando
az aks get-credentials
:az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Liste os nós no cluster usando o comando
kubectl describe
e filtre no valortopology.kubernetes.io/zone
.kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
A saída de exemplo 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 nós a um pool de agentes, a plataforma do Azure distribui automaticamente as VMs subjacentes entre as zonas de disponibilidade especificadas.
Com as versões do Kubernetes 1.17.0 e posteriores, o AKS usa o rótulo topology.kubernetes.io/zone
e o failure-domain.beta.kubernetes.io/zone
preterido. Você pode obter o mesmo resultado executando o comando kubectl describe nodes
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 é semelhante à saída com mais detalhes:
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 de pods entre zonas
Conforme documentado em Well-Known Labels, Annotations and Taints, o Kubernetes usa o rótulo de topology.kubernetes.io/zone
para distribuir automaticamente os pods em um serviço ou controlador de replicação entre as 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 o cluster do AKS de 3 para 5 nós usando o comando
az aks scale
com o--node-count
definido 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 de pod entre as zonas usando o seguinte comando
kubectl describe
:kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
A saída de exemplo 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 um aplicativo NGINX com três réplicas usando os seguintes comandos
kubectl create deployment
ekubectl scale
: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 de pod entre as zonas usando o seguinte comando
kubectl describe
:kubectl describe pod | grep -e "^Name:" -e "^Node:"
A saída de exemplo 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á em execução no nó 0, localizado na zona de disponibilidade
eastus2-1
. O segundo pod está em execução no nó 2, que corresponde aeastus2-3
e o terceiro no nó 4, emeastus2-2
. Sem nenhuma configuração adicional, o Kubernetes distribui os pods corretamente entre todas as três zonas de disponibilidade.
Próximas etapas
Esse artigo descreveu como criar um cluster do AKS usando zonas de disponibilidade. Para mais considerações sobre clusters altamente disponíveis, confira Melhores práticas para a continuidade dos negócios e recuperação de desastres no AKS.
Azure Kubernetes Service