Criar um cluster Azure Kubernetes Service (AKS) que utiliza zonas de disponibilidadeCreate an Azure Kubernetes Service (AKS) cluster that uses availability zones

Um cluster Azure Kubernetes Service (AKS) distribui recursos como nós e armazenamento em secções lógicas da infraestrutura Azure subjacente.An Azure Kubernetes Service (AKS) cluster distributes resources such as nodes and storage across logical sections of underlying Azure infrastructure. Este modelo de implantação ao utilizar zonas de disponibilidade, garante que os nós numa determinada zona de disponibilidade são fisicamente separados dos definidos noutra zona de disponibilidade.This deployment model when using availability zones, ensures nodes in a given availability zone are physically separated from those defined in another availability zone. Os clusters AKS implantados com múltiplas zonas de disponibilidade configuradas através de um cluster fornecem um nível mais elevado de disponibilidade para proteger contra uma falha de hardware ou um evento de manutenção planeado.AKS clusters deployed with multiple availability zones configured across a cluster provide a higher level of availability to protect against a hardware failure or a planned maintenance event.

Ao definir piscinas de nó em um cluster para abranger várias zonas, os nós em uma determinada piscina de nós são capazes de continuar a operar mesmo que uma única zona tenha caído.By defining node pools in a cluster to span multiple zones, nodes in a given node pool are able to continue operating even if a single zone has gone down. As suas aplicações podem continuar disponíveis mesmo que haja uma falha física num único datacenter se orquestrado para tolerar a falha de um subconjunto de nós.Your applications can continue to be available even if there is a physical failure in a single datacenter if orchestrated to tolerate failure of a subset of nodes.

Este artigo mostra-lhe como criar um cluster AKS e distribuir os componentes do nó através de zonas de disponibilidade.This article shows you how to create an AKS cluster and distribute the node components across availability zones.

Antes de começarBefore you begin

Precisa da versão 2.0.76 do Azure CLI ou posteriormente instalada e configurada.You need the Azure CLI version 2.0.76 or later installed and configured. Executar az --version para localizar a versão.Run az --version to find the version. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).If you need to install or upgrade, see Install Azure CLI.

Limitações e disponibilidade da regiãoLimitations and region availability

Os clusters AKS podem ser criados atualmente utilizando zonas de disponibilidade nas seguintes regiões:AKS clusters can currently be created using availability zones in the following regions:

  • Leste da AustráliaAustralia East
  • Sul do BrasilBrazil South
  • Canadá CentralCanada Central
  • E.U.A. CentralCentral US
  • E.U.A. LesteEast US
  • E.U.A. Leste 2East US 2
  • França CentralFrance Central
  • Alemanha Centro-OesteGermany West Central
  • Leste do JapãoJapan East
  • Europa do NorteNorth Europe
  • Sudeste AsiáticoSoutheast Asia
  • E.U.A. Centro-SulSouth Central US
  • Sul do Reino UnidoUK South
  • US Gov - VirginiaUS Gov Virginia
  • Europa OcidentalWest Europe
  • E.U.A. Oeste 2West US 2

Aplicam-se as seguintes limitações quando cria um cluster AKS utilizando zonas de disponibilidade:The following limitations apply when you create an AKS cluster using availability zones:

  • Só é possível definir zonas de disponibilidade quando o cluster ou a piscina de nó são criados.You can only define availability zones when the cluster or node pool is created.
  • As definições da zona de disponibilidade não podem ser atualizadas após a criação do cluster.Availability zone settings can't be updated after the cluster is created. Também não é possível atualizar um cluster de zonas existentes e não ingem disponibilidade para usar zonas de disponibilidade.You also can't update an existing, non-availability zone cluster to use availability zones.
  • O tamanho do nó escolhido (VM SKU) selecionado deve estar disponível em todas as zonas de disponibilidade selecionadas.The chosen node size (VM SKU) selected must be available across all availability zones selected.
  • Os clusters com zonas de disponibilidade ativadas requerem a utilização de Balançadores de Carga Padrão Azure para distribuição em zonas.Clusters with availability zones enabled require use of Azure Standard Load Balancers for distribution across zones. Este tipo de balançador de carga só pode ser definido no cluster criar tempo.This load balancer type can only be defined at cluster create time. Para obter mais informações e as limitações do balançador de carga padrão, consulte as limitações SKU padrão do balançador de carga Azure.For more information and the limitations of the standard load balancer, see Azure load balancer standard SKU limitations.

Limitações dos discos AzureAzure disks limitations

Os volumes que utilizam discos geridos a Azure não são atualmente recursos redundantes em zonas.Volumes that use Azure managed disks are currently not zone-redundant resources. Os volumes não podem ser fixados em zonas e devem ser co-localizados na mesma zona que um dado nó que alberga a cápsula-alvo.Volumes cannot be attached across zones and must be co-located in the same zone as a given node hosting the target pod.

Kubernetes está ciente das zonas de disponibilidade do Azure desde a versão 1.12.Kubernetes is aware of Azure availability zones since version 1.12. Pode implementar um objeto PersistenteVolumeClaim referenciando um Disco Gerido Azure num cluster AKS de várias zonas e kubernetes cuidará de agendar qualquer cápsula que adua este PVC na zona de disponibilidade correta.You can deploy a PersistentVolumeClaim object referencing an Azure Managed Disk in a multi-zone AKS cluster and Kubernetes will take care of scheduling any pod that claims this PVC in the correct availability zone.

Visão geral das zonas de disponibilidade para clusters AKSOverview of availability zones for AKS clusters

As zonas de disponibilidade são uma oferta de alta disponibilidade que protege as suas aplicações e dados contra falhas no datacenter.Availability zones are a high-availability offering that protects your applications and data from datacenter failures. As zonas são localizações físicas únicas dentro de uma região de Azure.Zones are unique physical locations within an Azure region. Cada zona é composta por um ou mais datacenters equipados com energia, refrigeração e rede independentes.Each zone is made up of one or more datacenters equipped with independent power, cooling, and networking. Para garantir a resiliência, há sempre mais de uma zona em todas as regiões ativadas por zonas.To ensure resiliency, there's always more than one zone in all zone enabled regions. A separação física das zonas de disponibilidade numa região protege as aplicações e os dados de falhas do datacenter.The physical separation of availability zones within a region protects applications and data from datacenter failures.

Para mais informações, veja quais são as zonas de disponibilidade em Azure?For more information, see What are availability zones in Azure?.

Os clusters AKS que são implantados usando zonas de disponibilidade podem distribuir nós em várias zonas dentro de uma única região.AKS clusters that are deployed using availability zones can distribute nodes across multiple zones within a single region. Por exemplo, um cluster na região  leste dos EUA 2   pode criar nós nas três zonas de disponibilidade no Leste dos EUA 2.For example, a cluster in the  East US 2 region can create nodes in all three availability zones in East US 2. Esta distribuição de recursos de cluster AKS melhora a disponibilidade do cluster, uma vez que são resistentes ao fracasso de uma zona específica.This distribution of AKS cluster resources improves cluster availability as they're resilient to failure of a specific zone.

Distribuição de nó AKS em zonas de disponibilidade

Se uma única zona ficar indisponível, as suas aplicações continuam a funcionar se o cluster estiver espalhado por várias zonas.If a single zone becomes unavailable, your applications continue to run if the cluster is spread across multiple zones.

Criar um cluster AKS em zonas de disponibilidadeCreate an AKS cluster across availability zones

Quando cria um cluster utilizando as az aks criar comando, o --zones parâmetro define em que zonas os nós de agente são implantados.When you create a cluster using the az aks create command, the --zones parameter defines which zones agent nodes are deployed into. Os componentes do plano de controlo, tais como etcd ou API, estão espalhados pelas zonas disponíveis na região se definirmos o parâmetro no tempo de criação do --zones cluster.The control plane components such as etcd or the API are spread across the available zones in the region if you define the --zones parameter at cluster creation time. As zonas específicas pelas quais os componentes do plano de controlo estão espalhados são independentes das zonas explícitas selecionadas para a piscina inicial do nó.The specific zones which the control plane components are spread across are independent of what explicit zones are selected for the initial node pool.

Se não definir nenhuma zona para o conjunto de agentes predefinidos quando criar um cluster AKS, os componentes do plano de controlo não são garantidos para se espalharem por zonas de disponibilidade.If you don't define any zones for the default agent pool when you create an AKS cluster, control plane components are not guaranteed to spread across availability zones. Pode adicionar piscinas de nó adicionais utilizando o nodepool az aks adicionar comando e especificar --zones para novos nós, mas não altera a forma como o plano de controlo foi espalhado por zonas.You can add additional node pools using the az aks nodepool add command and specify --zones for new nodes, but it will not change how the control plane has been spread across zones. As definições da zona de disponibilidade só podem ser definidas no intervalo ou node pool-tempo.Availability zone settings can only be defined at cluster or node pool create-time.

O exemplo a seguir cria um cluster AKS chamado myAKSCluster no grupo de recursos chamado myResourceGroup.The following example creates an AKS cluster named myAKSCluster in the resource group named myResourceGroup. Um total de 3 nós são criados - um agente na zona 1, um em 2, e depois um em cada 3.A total of 3 nodes are created - one agent in zone 1, one in 2, and then one in 3.

az group create --name myResourceGroup --location eastus2

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --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.It takes a few minutes to create the AKS cluster.

Ao decidir a que zona deve pertencer um novo nó, uma dada piscina de nó AKS utilizará uma melhor zona de esforço de equilíbrio oferecida por conjuntos de escala de máquina virtual Azure subjacentes.When deciding what zone a new node should belong to, a given AKS node pool will use a best effort zone balancing offered by underlying Azure Virtual Machine Scale Sets. Um determinado conjunto de nó AKS é considerado "equilibrado" se cada zona tiver o mesmo número de VMs ou + - 1 VM em todas as outras zonas para o conjunto de escala.A given AKS node pool is considered "balanced" if each zone has the same number of VMs or +- 1 VM in all other zones for the scale set.

Verificar distribuição de nó em zonasVerify node distribution across zones

Quando o cluster estiver pronto, enumere os nós de agente na escala definida para ver em que zona de disponibilidade estão implantados.When the cluster is ready, list the agent nodes in the scale set to see what availability zone they're deployed in.

Primeiro, obtenha as credenciais de cluster AKS usando o comando az aks get-credentials:First, get the AKS cluster credentials using the az aks get-credentials command:

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

Em seguida, utilize o comando de desação do kubectl para listar os nós no cluster e filtrar o valor failure-domain.beta.kubernetes.io/zone.Next, use the kubectl describe command to list the nodes in the cluster and filter on the failure-domain.beta.kubernetes.io/zone value. O exemplo a seguir é para uma concha bash.The following example is for a Bash shell.

kubectl describe nodes | grep -e "Name:" -e "failure-domain.beta.kubernetes.io/zone"

A saída de exemplo mostra os três nóns distribuídos pela região especificada e zonas de disponibilidade, tais como eastus2-1 para a primeira zona de disponibilidade e leste2-2 para a segunda zona de disponibilidade:The following example output shows the three nodes distributed across the specified region and availability zones, such as eastus2-1 for the first availability zone and eastus2-2 for the second availability zone:

Name:       aks-nodepool1-28993262-vmss000000
            failure-domain.beta.kubernetes.io/zone=eastus2-1
Name:       aks-nodepool1-28993262-vmss000001
            failure-domain.beta.kubernetes.io/zone=eastus2-2
Name:       aks-nodepool1-28993262-vmss000002
            failure-domain.beta.kubernetes.io/zone=eastus2-3

Ao adicionar nós adicionais a um conjunto de agentes, a plataforma Azure distribui automaticamente os VMs subjacentes pelas zonas de disponibilidade especificadas.As you add additional nodes to an agent pool, the Azure platform automatically distributes the underlying VMs across the specified availability zones.

Note que nas versões mais recentes de Kubernetes (1.17.0 e posterior), a AKS está a utilizar a etiqueta mais recente topology.kubernetes.io/zone para além da depreciada failure-domain.beta.kubernetes.io/zone .Note that in newer Kubernetes versions (1.17.0 and later), AKS is using the newer label topology.kubernetes.io/zone in addition to the deprecated failure-domain.beta.kubernetes.io/zone. Pode obter o mesmo resultado acima, executando o seguinte script:You can get the same result as above with by running the following script:

kubectl get nodes -o custom-columns=NAME:'{.metadata.name}',REGION:'{.metadata.labels.topology\.kubernetes\.io/region}',ZONE:'{metadata.labels.topology\.kubernetes\.io/zone}'

O que lhe dará uma saída mais sucinta:Which will give you a more succinct output:

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 distribuição de cápsulas em zonasVerify pod distribution across zones

Como documentado em Etiquetas, Anotações e Manchas Bem Conhecidas,a Kubernetes utiliza a failure-domain.beta.kubernetes.io/zone etiqueta para distribuir automaticamente cápsulas num controlador de replicação ou serviço nas diferentes zonas disponíveis.As documented in Well-Known Labels, Annotations and Taints, Kubernetes uses the failure-domain.beta.kubernetes.io/zone label to automatically distribute pods in a replication controller or service across the different zones available. Para testar isto, pode escalar o seu cluster de 3 a 5 nóns, para verificar a propagação correta da cápsula:In order to test this, you can scale up your cluster from 3 to 5 nodes, to verify correct pod spreading:

az aks scale \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 5

Quando a operação de escala terminar após alguns minutos, o comando kubectl describe nodes | grep -e "Name:" -e "failure-domain.beta.kubernetes.io/zone" numa casca bash deve dar uma saída semelhante a esta amostra:When the scale operation completes after a few minutes, the command kubectl describe nodes | grep -e "Name:" -e "failure-domain.beta.kubernetes.io/zone" in a Bash shell should give an output similar to this sample:

Name:       aks-nodepool1-28993262-vmss000000
            failure-domain.beta.kubernetes.io/zone=eastus2-1
Name:       aks-nodepool1-28993262-vmss000001
            failure-domain.beta.kubernetes.io/zone=eastus2-2
Name:       aks-nodepool1-28993262-vmss000002
            failure-domain.beta.kubernetes.io/zone=eastus2-3
Name:       aks-nodepool1-28993262-vmss000003
            failure-domain.beta.kubernetes.io/zone=eastus2-1
Name:       aks-nodepool1-28993262-vmss000004
            failure-domain.beta.kubernetes.io/zone=eastus2-2

Temos agora dois nós adicionais nas zonas 1 e 2.We now have two additional nodes in zones 1 and 2. Pode implementar uma aplicação composta por três réplicas.You can deploy an application consisting of three replicas. Usaremos o NGINX como exemplo:We will use NGINX as an example:

kubectl create deployment nginx --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
kubectl scale deployment nginx --replicas=3

Ao visualizar nós onde as suas cápsulas estão a funcionar, vê que as cápsulas estão a correr nos nós correspondentes a três zonas de disponibilidade diferentes.By viewing nodes where your pods are running, you see pods are running on the nodes corresponding to three different availability zones. Por exemplo, com o comando kubectl describe pod | grep -e "^Name:" -e "^Node:" numa concha bash obteria uma saída semelhante a esta:For example, with the command kubectl describe pod | grep -e "^Name:" -e "^Node:" in a Bash shell you would get an output similar to this:

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 pode ver na saída anterior, a primeira cápsula está a funcionar no nó 0, que está localizado na zona de eastus2-1 disponibilidade.As you can see from the previous output, the first pod is running on node 0, which is located in the availability zone eastus2-1. A segunda cápsula está a funcionar no nó 2, que corresponde a eastus2-3 , e a terceira no nó 4, em eastus2-2 .The second pod is running on node 2, which corresponds to eastus2-3, and the third one in node 4, in eastus2-2. Sem qualquer configuração adicional, a Kubernetes está a espalhar corretamente as cápsulas pelas três zonas de disponibilidade.Without any additional configuration, Kubernetes is spreading the pods correctly across all three availability zones.

Passos seguintesNext steps

Este artigo detalhou como criar um cluster AKS que utiliza zonas de disponibilidade.This article detailed how to create an AKS cluster that uses availability zones. Para obter mais considerações sobre clusters altamente disponíveis, consulte as melhores práticas para a continuidade do negócio e recuperação de desastres em AKS.For more considerations on highly available clusters, see Best practices for business continuity and disaster recovery in AKS.