Configurar vários nós e permitir o dimensionamento para zero com o AKS

Concluído

O Azure Kubernetes Service permite-lhe criar vários conjuntos de nós para corresponder cargas de trabalho específicas aos nós executados em cada conjunto. 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 monitorização de drones da sua empresa é implementada no Azure Kubernetes Service (AKS) como muitos serviços e aplicações com contentores. A sua equipa desenvolveu um novo serviço de modelação preditiva que processa as informações de rotas de voos em condições climáticas extremas e cria rotas de voo ideais. Este serviço requer o suporte de máquinas virtuais (VMs) baseadas em GPU e só é executado em dias específicos durante a semana.

Quer configurar um conjunto de nós de cluster dedicado ao processamento de informações de rotas de voos. O processo é executado por apenas algumas horas por dia e você deseja usar um pool de nós baseado em GPU. No entanto, só quer pagar pelos nós quando os utiliza.

Vamos ver como os pools de nós e como o AKS usa nós e, em seguida, como dimensionar a contagem de nós em um pool de nós.

O que é um conjunto de nós?

Um conjunto de nós descreve um grupo de nós com a mesma configuração num cluster do AKS. Estes nós contêm VMs subjacentes que executam as suas aplicações. Pode criar dois tipos de conjuntos de nós num cluster do Kubernetes gerido pelo AKS:

  • Conjuntos de nós de sistema

  • Conjuntos de nós de utilizador

Conjuntos de nós de sistema

Os pools de nós do sistema hospedam pods críticos do sistema que compõem o plano de controle do cluster. Um conjunto de nós de sistema permite a utilização do Linux apenas como o SO do nó e só executa cargas de trabalho baseadas em Linux. Os nós num conjunto de nós de sistema são reservados para cargas de trabalho do sistema e normalmente não são utilizados para executar cargas de trabalho personalizadas. Cada cluster do AKS tem de conter no mínimo um conjunto de nós de sistema com, pelo menos, um nó e tem de definir os tamanhos das VMs subjacentes dos nós.

Conjuntos de nós de utilizador

Os conjuntos de nós de utilizador suportam cargas de trabalho e pode especificar o Windows ou o Linux como o sistema operativo dos nós. Também pode definir os tamanhos das VMs subjacentes dos 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 modelação preditiva exige VMs baseadas em GPU de maior capacidade. Decide configurar um conjunto de nós separado e configurá-lo para utilizar nós com capacidade de GPU.

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

Pode configurar até 100 nós num conjunto de nós. No entanto, o número de nós que escolhe configurar depende do número de pods que são executados por nó.

Por exemplo, num conjunto de nós de sistema, é essencial definir o número máximo de pods em execução num único nó como 30. Esse valor garante que haja espaço suficiente disponível para executar os pods do sistema 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 este motivo, um conjunto de nós de sistema precisa de, pelo menos, um nó no conjunto. Para ambientes de produção, a contagem de nós recomendada para um conjunto de nós de sistema é um mínimo de três nós.

Os conjuntos de nós de utilizador são concebidos para executar cargas de trabalho personalizadas e não têm o requisito de 30 pods. Os conjuntos de nós de utilizador permitem-lhe definir a contagem de nós de um conjunto para zero.

Gerir a procura de aplicações num cluster do 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, consoante necessário, os pods ou nós manualmente. A segunda opção é através da automação, onde você pode usar o pod autoscaler horizontal para dimensionar pods e o cluster autoscaler para dimensionar nós.

Como dimensionar um conjunto 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. Pode configurar o conjunto de nós com nós específicos baseados em GPU e dimensionar o conjunto de nós para zero nós quando não estiver a utilizar o cluster.

Veja a seguir um exemplo do comando az aks node pool add que pode utilizar para criar o conjunto de nós. Repare no parâmetro --node-vm-size, que especifica o tamanho da VM baseada em GPU Standard_NC6 para os nós no conjunto.

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

Assim que o conjunto estiver pronto, pode utilizar o comando az aks nodepool scale para dimensionar o conjunto de nós para zero nós. Repare que o parâmetro --node-count que está definido para zero. Veja a seguir 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 utiliza o dimensionar automático de clusters do Kubernetes para dimensionar automaticamente as cargas de trabalho. O cluster pode ser dimensionado através de duas opções:

  • O dimensionador automático de pods horizontal

  • O dimensionador automático de cluster

Vamos observar cada opção, a começar pelo dimensionador automático de pods horizontal.

Dimensionador automático de pods horizontal

Utilize o dimensionador automático de pods horizontal do Kubernetes para monitorizar a procura de recursos num cluster e dimensionar automaticamente o número de réplicas da carga de trabalho.

O Servidor de Métricas do Kubernetes recolhe as métricas da memória e do processador nos controladores, nós e contentores que são executados no cluster do AKS. Uma forma de aceder a estas informações é ao utilizar 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.

Imagine que a sua empresa também tem um serviço de processamento em lotes que agenda percursos 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, diminui o número de réplicas de serviço.

No entanto, o dimensionador automático de pods horizontal apenas dimensiona pods em nós disponíveis nos conjuntos de nós configurados do cluster.

Dimensionador automático de cluster

Uma restrição de recursos é acionada quando o autoscaler de pod horizontal não pode agendar outro pod nos nós existentes em um pool de nós. Você precisa usar o autoscaler 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 aumenta ou reduz o número de nós com base nos recursos de computação necessários.

O dimensionador automático de cluster é utilizado juntamente com o dimensionador automático de pods horizontal.

O dimensionador automático de cluster monitoriza os eventos de aumento e redução vertical e permite que o cluster do Kubernetes altere a contagem de nós num conjunto de nós à medida que a procura de recursos se altera.

Pode configurar cada conjunto de nós com diferentes regras de dimensionamento. 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

Perde a capacidade para dimensionar a contagem de nós para zero quando ativa o dimensionador automático de cluster num conjunto de nós. Em vez disso, você pode definir a contagem de minutos como zero para economizar recursos de cluster.

Verifique o seu conhecimento

1.

Imagine que tem uma solução de software com três componentes críticos. O primeiro componente é uma aplicação Web. O segundo é um serviço que processa encomendas online. O terceira é um serviço de análise e composição de vídeo executado apenas conforme necessário e que requer VMs baseadas em GPU. Para otimizar o custo, quantos conjuntos de nós iria implementar num cluster do Azure Kubernetes Service (AKS) para gerir a solução?

2.

Conclua a seguinte afirmação. O dimensionador automático de clusters do Kubernetes dimensiona...