Conceitos de escalabilidade de cluster
Nó de fome
spec.containers.resources
Na chave de um arquivo YAML pod, você define o número de recursos que o pod requer. Depois de criar um novo pod dentro de um nó, o Kubernetes aloca automaticamente esse número especificado de recursos para o pod para que ele seja executado com a quantidade de energia necessária.
Um único nó é uma única máquina virtual (VM) que tem uma quantidade limitada de recursos disponíveis para pods, como CPU e RAM. Você não pode girar um número infinito de pods em um nó. Quando um nó não atende aos requisitos necessários para o recurso do pod, o pod compete com os recursos especificados para os recursos do nó, o que leva à fome do nó. O pod permanece em um status Pendente e não é agendado para nenhum nó até que recursos suficientes estejam disponíveis.
Escalabilidade do cluster
Para evitar a inanição do nó, o operador precisa dimensionar o cluster e adicionar mais VMs ao pool de nós. Você pode executar o dimensionamento manual de cluster usando o comando CLI az aks scale
do Azure. Você também pode usar o portal do Azure para dimensionar manualmente seu cluster. Entre no portal e selecione seu cluster do Serviço Kubernetes do Azure (AKS). Em Configurações, selecione Pools de nós. Selecione o pool de nós que deseja dimensionar e, em seguida, selecione Dimensionar pool de nós.
O dimensionamento manual pode ser avassalador, especialmente para clusters com demanda inconsistente e flutuante. Quando o número de pods flutua consistentemente, você precisa monitorá-lo constantemente para pods não programados e fazer os ajustes necessários em tempo real.
Dimensionador automático de cluster
No AKS, a ferramenta de escalonamento automático de cluster automatiza o processo de dimensionamento de cluster. Quando você o habilita em seu cluster AKS, ele observa pods não programados com restrições de recursos e aumenta automaticamente o número de nós para atender aos requisitos.
O autoscaler de cluster também pode diminuir o número de nós em um cluster se houver capacidade de cluster não utilizada por um período de tempo especificado. Quando essa condição é atendida, o autoscaler corda (torna o nó indisponível para o agendamento de novas cargas de trabalho) e drena (move as cargas de trabalho existentes para outro nó) o nó. Como resultado, todos os pods agendados nesse nó são movidos com segurança para outros nós. Ele também garante que nenhum outro pod seja agendado durante o processo. Em seguida, ele remove o nó do pool.
Há algumas situações em que o autoscaler do cluster não pode remover um nó devido a pods que não podem ser movidos para fora desse nó. Estas situações incluem:
- Um pod é criado diretamente com um arquivo YAML e não está vinculado a nenhum controlador, como Deployments ou ReplicaSets.
- O Pod Disruption Budget (PDB) é muito restritivo e não permite que o número de pods fique abaixo de um determinado limite.
- O pod tem um seletor de nó para esse nó específico ou uma afinidade de nó que o impede de ir para outro lugar.
Quando o dimensionamento automático está habilitado, o dimensionamento manual do cluster é desabilitado.