Configure vários nós e habilite a escala para zero usando o AKS

Concluído

O Serviço Kubernetes do Azure permite criar pools de nós diferentes para corresponder cargas de trabalho específicas aos nós em execução em cada pool de nós. O processo de correspondência de cargas de trabalho com nós permite que você planeje calcular o consumo e otimizar o custo.

A solução de rastreamento de drones da sua empresa é implantada no Serviço Kubernetes do Azure (AKS) como muitos aplicativos e serviços em contêineres. Sua equipe desenvolveu um novo serviço de modelagem preditiva que processa informações de trajetória de voo em condições climáticas extremas e cria rotas de voo ideais. Este serviço requer suporte a máquina virtual (VM) baseada em GPU e é executado apenas em dias específicos durante a semana.

Você deseja configurar um pool de nós de cluster dedicado ao processamento de informações de trajetória de voo. O processo é executado por apenas algumas horas por dia e você deseja usar um pool de nós baseado em GPU. No entanto, você deseja pagar pelos nós somente quando usá-los.

Vamos olhar para como os pools de nós funcionam e como o AKS usa os nós, depois como dimensionar a contagem de nós em um pool de nós.

O que é um pool de nós?

Um pool de nós descreve um grupo de nós com a mesma configuração em um cluster AKS. Esses nós contêm as VMs subjacentes que executam seus aplicativos. Você pode criar dois tipos de pools de nós em um cluster Kubernetes gerenciado pelo AKS:

  • Agrupamentos de nós do sistema

  • Grupos de nós de utilizador

Pólos de nós do sistema

Os grupos de nós do sistema sustentam componentes críticos do sistema que constituem o plano de controlo do cluster. Um pool de nós do sistema permite o uso do Linux apenas como o sistema operacional do nó e executa apenas cargas de trabalho baseadas em Linux. Os nós em um pool de nós do sistema são reservados para cargas de trabalho do sistema e normalmente não são usados para executar cargas de trabalho personalizadas. Cada agrupamento AKS deve conter pelo menos um pool de nós do sistema com pelo menos um nó, e deve definir os tamanhos das máquinas virtuais subjacentes para os nós.

Conjuntos de nós de utilizador

Os pools de nós de usuário suportam suas cargas de trabalho e você pode especificar Windows ou Linux como o sistema operacional do nó. Você também pode definir os tamanhos de VMs subjacentes para os nós e executar cargas de trabalho específicas. Por exemplo, sua solução de rastreamento de drones tem um serviço de processamento em lote que você implanta em um pool de nós com uma configuração para VMs de uso geral. O novo serviço de modelagem preditiva requer VMs baseadas em GPU de maior capacidade. Você decide configurar um pool de nós separado e configurá-lo para usar nós habilitados para GPU.

Número de nós num pool de nós

Você pode configurar até 100 nós num pool de nós. No entanto, o número de nós que você escolhe configurar depende do número de pods executados por nó.

Por exemplo, em uma pool de nós do sistema, é essencial definir que o número máximo de pods que possam ser executados em um único nó seja 30. Esse valor garante que haja espaço suficiente disponível para executar os pods críticos do sistema, essenciais para a integridade do cluster. Quando o número de pods excede esse valor mínimo, novos nós são necessários no pool para agendar cargas de trabalho extras. Por esse motivo, um pool de nós do sistema precisa de pelo menos um nó no pool. Para ambientes de produção, a contagem de nós recomendada para um pool de nós do sistema é um mínimo de três nós.

Os clusters de nós para utilizadores são projetados para executar cargas de trabalho personalizadas e não exigem o requisito de 30 pods. Os pools de nós de usuário permitem que você defina a contagem de nós de um pool como zero.

Gerenciar a demanda de aplicativos em um cluster AKS

No AKS, quando você aumenta ou diminui a quantidade de recursos de computação em um cluster do Kubernetes, você está dimensionando. Você pode dimensionar o número de instâncias de carga de trabalho que precisam ser executadas ou o número de nós nos quais essas cargas de trabalho são executadas. Você pode dimensionar cargas de trabalho em um cluster gerenciado pelo AKS de duas maneiras. A primeira opção é dimensionar os pods ou nós manualmente, conforme necessário. A segunda opção é através da automação, onde pode usar o autoscaler horizontal de pods para dimensionar pods e o autoscaler de clusters para dimensionar nós.

Como dimensionar um pool de nós manualmente

Se você estiver executando cargas de trabalho que são executadas por uma duração específica em intervalos conhecidos específicos, dimensionar manualmente o tamanho do pool de nós é uma boa maneira de controlar os custos do nó.

Suponha que o serviço de modelagem preditiva requer um pool de nós baseado em GPU e é executado por uma hora todos os dias ao meio-dia. Você pode configurar o pool de nós com nós específicos baseados em GPU e dimensionar o pool de nós para zero nós quando não estiver usando o cluster.

Aqui está um exemplo do comando az aks node pool add que você pode usar para criar o pool de nós. Observe o parâmetro --node-vm-size, que especifica o tamanho Standard_NC6 da VM baseada em GPU para os nós no pool.

az aks nodepool add \
    --resource-group resourceGroup \
    --cluster-name aksCluster \
    --name gpunodepool \
    --node-count 1 \
    --node-vm-size Standard_NC6 \
    --no-wait

Quando o pool estiver pronto, você poderá usar o comando az aks nodepool scale para dimensionar o pool de nós para zero nós. Observe que o parâmetro --node-count está definido como zero. Aqui está um exemplo do comando:

az aks nodepool scale \
    --resource-group resourceGroup \
    --cluster-name aksCluster \
    --name gpunodepool \
    --node-count 0

Como dimensionar um cluster automaticamente

Diagrama que mostra como o autoscaler de cluster adiciona nós e como o autoscaler de pod horizontal adiciona pods.

O AKS usa o autoscaler de cluster do Kubernetes para dimensionar automaticamente cargas de trabalho. O cluster pode ser dimensionado usando duas opções:

  • O autoscaler horizontal de pods

  • O autoscaler do cluster

Vamos examinar cada opção, começando com o escalonador automático horizontal de pods.

Autoscaler horizontal de pod

Use o autoscaler de pod horizontal do Kubernetes para monitorar a demanda de recursos em um cluster e dimensionar automaticamente o número de réplicas de carga de trabalho.

O Kubernetes Metrics Server coleta métricas de memória e processador de controladores, nós e contêineres executados no cluster AKS. Uma maneira de acessar essas informações é usar a API de métricas. O autoscaler de pod horizontal verifica a API de métricas a cada 30 segundos para decidir se seu aplicativo precisa de mais instâncias para atender à demanda necessária.

Suponha que sua empresa também tenha um serviço de processamento em lote que agenda rotas de voo de drones. Você percebe que o serviço é inundado de solicitações e acumula um acúmulo de entregas, causando atrasos e frustrações para os clientes. Aumentar o número de réplicas de serviços de processamento em lote poderia permitir o processamento oportuno de pedidos.

Para resolver o problema, configure o pod autoscaler horizontal para aumentar o número de réplicas de serviço quando necessário. Quando o número de solicitações em lote diminui, o número de réplicas de serviço também diminui.

No entanto, o autoscaler de pod horizontal escalona pods somente nos nós disponíveis nos grupos de nós configurados do cluster.

Dimensionador automático de clusters

Uma restrição de recursos é acionada quando o horizontal pod autoscaler não consegue agendar outro pod nos nós existentes de um grupo de nós. Você precisa usar o autoscaler de cluster para dimensionar o número de nós nas pools de nós de um cluster em situações de restrição. O autoscaler de cluster verifica as métricas definidas e dimensiona o número de nós para cima ou para baixo com base nos recursos de computação necessários.

O autoscaler de cluster é utilizado juntamente com o autoscaler de pod horizontal.

O autoscaler do cluster monitora eventos de scale-up e scale-down e permite que o cluster do Kubernetes altere a contagem de nós em um pool de nós à medida que as demandas de recursos mudam.

Você configura cada pool de nós com regras de escala diferentes. Por exemplo, talvez você queira configurar apenas um pool de nós para permitir o dimensionamento automático ou configurar um pool de nós para dimensionar apenas para um número específico de nós.

Importante

Você perde a capacidade de reduzir o número de nós para zero quando ativa o autoscaler de cluster num pool de nós. Em vez disso, você pode definir a contagem de minutos como zero para economizar recursos de cluster.

Verifique os seus conhecimentos

1.

Suponha que sua solução de software tenha três componentes críticos. O primeiro componente é uma aplicação web. O segundo é um serviço que processa encomendas online. O terceiro é um serviço de renderização e análise de vídeo que é executado apenas conforme necessário e que requer VMs baseadas em GPU. Para otimizar o custo, quantos pools de nós você implantaria em um cluster do Serviço Kubernetes do Azure (AKS) para gerenciar a solução?

2.

Preencha a seguinte declaração. O dimensionador automático do Kubernetes cluster ajusta...