Configurar vários nós e habilitar o redimensionamento para zero usando o AKS

Concluído

O Serviço de Kubernetes do Azure permite que você crie diferentes pools de nós que correspondam a cargas de trabalho específicas para os 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 acompanhamento de drones da sua empresa é implantada no AKS (Serviço de Kubernetes do Azure), assim como muitos aplicativos e serviços em contêineres. Sua equipe desenvolveu um novo serviço de modelagem preditiva que processa as informações do caminho de voo sob condições climáticas extremas e cria rotas de voo otimizadas. Esse serviço exige compatibilidade com VMs (máquinas virtuais) baseadas em GPU e só é executado em dias específicos durante a semana.

É recomendável configurar um pool de nós de cluster dedicado ao processamento das informações de caminho 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ê só quer pagar pelos nós quando usá-los.

Vamos examinar como os pools de nós e como o AKS usa nós e 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 do 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 do Kubernetes gerenciado pelo AKS:

  • Pools de nós do sistema

  • Pools de nós do usuário

Pools de nós do sistema

Os pools de nós do sistema hospedam pods de sistema críticos que compõem o plano de controle do cluster. Um pool de nós do sistema só permite o uso do Linux como o sistema operacional do nó e executa apenas cargas de trabalho baseadas em Linux. Os nós de 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 cluster do AKS precisa conter pelo menos um pool de nós do sistema com no mínimo um nó, e você precisa definir os tamanhos de VM subjacentes para os nós.

Pools de nós do usuário

Os pools de nós do usuário dão suporte a suas cargas de trabalho e permitem que você especifique o Windows ou o Linux como o sistema operacional do nó. Você também pode definir os tamanhos de VM 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 exige VMs de maior capacidade e baseadas em GPU. Você decide configurar um pool de nós separado e configurá-lo para usar nós habilitados para GPU.

Número de nós em um pool de nós

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

Por exemplo, em um pool de nós do sistema é essencial definir o número máximo de pods a ser executado em cada nó como 30. Esse valor garante que haja espaço suficiente disponível para executar os pods do sistema que são críticos 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, o pool de nós do sistema precisa ter 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 é de, no mínimo, três nós.

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

Gerenciar a demanda por aplicativos em um cluster do AKS

No AKS, quando você aumenta ou diminui a quantidade de recursos de computação em um cluster do Kubernetes, você está colocando em escala. 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 os nós manualmente, conforme necessário. A segunda opção é por meio da automação, em que você pode usar o dimensionador automático de pod horizontal para dimensionar pods e o dimensionador automático de cluster 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 exija um pool de nós baseado em GPU e seja executado por uma hora todos os dias ao meio-dia. Você poderá configurar o pool de nós com nós específicos baseados em GPU e reduzir o pool de nós para zero nó 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 da VM baseada em GPU Standard_NC6 para os nós do 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 reduzir o número de nós do pool de nós para zero. Observe 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

Diagram that shows how the cluster autoscaler adds nodes and how the horizontal pod autoscaler adds pods.

O AKS usa o dimensionador automático de cluster do Kubernetes para dimensionar automaticamente as cargas de trabalho. O cluster pode ser dimensionado por meio de duas opções:

  • O dimensionador automático de pod horizontal

  • O dimensionador automático de cluster

Vamos examinar cada uma das opções, começando com o dimensionador automático de pod horizontal.

Dimensionador automático de pod horizontal

Use o dimensionador automático 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 Servidor de Métricas do Kubernetes coleta as métricas de memória e processador dos controladores, dos nós e dos contêineres em execução no cluster do AKS. Uma das maneiras de acessar essas informações é por meio da API de Métricas. O dimensionador automático de pod horizontal verifica a API de Métricas a cada 30 segundos para decidir se o 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 lotes que agende rotas de voo dos drones. Observe que o serviço é inundado com solicitações e cria uma lista de pendências de entregas, causando atrasos e frustrações para os clientes. O aumento do número de réplicas do serviço de processo em lote pode permitir o processamento de pedidos em tempo hábil.

Para resolver o problema, você configura o dimensionador automático de pod horizontal para aumentar o número de réplicas de serviço quando necessário. Quando o número de solicitações em lotes diminui, ele diminui o número de réplicas de serviço.

No entanto, o dimensionador automático de pod horizontal só dimensionará os pods em nós disponíveis nos pools de nós configurados do cluster.

Dimensionador automático de cluster

Uma restrição de recurso é disparada quando o dimensionador automático de pod horizontal não pode agendar outro pod nos nós existentes em um pool de nós. Você precisa usar o dimensionador automático de cluster para dimensionar o número de nós nos pools de nós de um cluster em tempos de restrições. O dimensionador automático de cluster verifica as métricas definidas e escala ou reduz verticalmente o número de nós com base nos recursos de computação necessários.

O dimensionador automático de cluster é usado juntamente com o dimensionador automático de pod horizontal.

O dimensionador automático de cluster monitora os eventos de escala e redução vertical e permite que o cluster do Kubernetes altere a contagem de nós em um pool de nós à medida que mudam as demandas de recursos.

Configure cada pool de nós com regras de dimensionamento 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 a contagem de nós para zero quando habilita o dimensionador automático de cluster em um pool de nós. Em vez disso, você pode definir a contagem mínima como zero para salvar em recursos de cluster.

Verificar seu conhecimento

1.

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

2.

Complete a afirmação a seguir. O dimensionador automático de cluster do Kubernetes dimensiona...