Cluster Proportional Autoscaler
O Cluster Proportional Autoscaler (CPA) é um controlador que ajusta automaticamente a escala de um deployment específico com base no número de nodes no cluster. Ele é especialmente útil quando um serviço precisa estar disponível em todos os nodes ou deve escalar proporcionalmente aos recursos totais do cluster.
Ao contrário de autoscalers tradicionais, o CPA não depende de métricas de carga. Em vez disso, utiliza fórmulas proporcionais definidas manualmente.
Modos de operação Copiar link
O CPA suporta dois modos para calcular o número de réplicas:
Modo linear Copiar link
No modo linear, o número de réplicas é calculado com a seguinte fórmula:
replicas = max(min, min(max, cores / coresPorReplica, nodes / nodesPorReplica))Você pode usar ambos os parâmetros (coresPerReplica e nodesPerReplica) ou apenas um. Os valores min e max definem os limites inferior e superior para o número de réplicas.
Exemplo de configuração:
config:
linear:
coresPerReplica: 2
nodesPerReplica: 1
min: 2
max: 20
preventSinglePointFailure: true
includeUnschedulableNodes: trueNeste exemplo:
- Um pod é criado por node
- Um pod adicional é criado a cada 2 núcleos de CPU
- Sempre pelo menos 2 pods, máximo de 20
- Se houver apenas um node, 2 pods serão criados para evitar ponto único de falha
- Nodes não agendáveis também são considerados
Modo ladder Copiar link
No modo ladder, o número de réplicas é definido explicitamente usando uma tabela de consulta. Isso é útil quando você precisa de um número exato de pods para determinados tamanhos de cluster.
Exemplo de configuração:
config:
ladder:
coresToReplicas:
- [ 1, 1 ]
- [ 64, 3 ]
- [ 512, 5 ]
- [ 1024, 7 ]
- [ 2048, 10 ]
nodesToReplicas:
- [ 1, 1 ]
- [ 2, 2 ]
- [ 5, 3 ]Neste exemplo:
- Com 1 node → 1 pod
- Com 2 nodes → 2 pods
- Com 5 ou mais nodes → 3 pods
- Núcleos de CPU também são considerados:
- 64 cores → 3 pods
- 2048 cores → 10 pods
Instalar via painel de controle Copiar link
Para instalar o Cluster Proportional Autoscaler:
- Vá para a seção Kubernetes e clique no cluster.
- Na aba Complementos, clique em Cluster Proportional Autoscaler.
- No assistente de instalação, ajuste a configuração editando o manifest na seção Configuração.
Por padrão, o autoscaler é configurado para escalar o metrics-server no namespace kube-system usando o modo linear, criando um pod por node:
config:
linear:
coresPerReplica: 1
nodesPerReplica: 1
min: 1
max: 100
preventSinglePointFailure: true
includeUnschedulableNodes: true
options:
logToStdErr: true
logLevel: 7
namespace: kube-system
target: deployment/metrics-serverSe quiser escalar um serviço diferente, por exemplo, nginx no namespace default, altere os parâmetros target e namespace antes da instalação.
Para mudar modos de escala ou parâmetros, edite a seção config. Por exemplo, você pode descomentar os parâmetros do modo ladder e utilizá-lo em vez do linear.
Instalar manualmente Copiar link
Para maior flexibilidade ou múltiplos autoscalers para diferentes serviços, utilize o Helm.
Passo 1: Adicionar repositório Helm
helm repo add cluster-proportional-autoscaler https://kubernetes-sigs.github.io/cluster-proportional-autoscalerIsso adiciona uma fonte externa de onde o autoscaler pode ser instalado.
Passo 2: Atualizar lista de charts
helm repo updatePasso 3: Criar arquivo values.yaml com o seguinte conteúdo:
config:
linear:
coresPerReplica: 1
nodesPerReplica: 1
min: 1
max: 100
preventSinglePointFailure: true
includeUnschedulableNodes: true
options:
logToStdErr: true
logLevel: 7
namespace: kube-system
target: deployment/metrics-server
serviceAccount:
create: trueEsta configuração:
- Usa o modo linear, criando um pod por node (
nodesPerReplica: 1) - Limita as réplicas entre 1 e 100
- Habilita
preventSinglePointFailure(adiciona um pod extra se houver apenas um node) - Inclui nodes não agendáveis nos cálculos
- Especifica o deployment e namespace alvo
- Cria automaticamente uma service account com permissões necessárias
Passo 4: Instalar o autoscaler com Helm
helm upgrade --install metrics-autoscaler cluster-proportional-autoscaler/cluster-proportional-autoscaler --values values.yamlPasso 5: Verificar se o pod está em execução
kubectl get pods -n kube-systemEscalar múltiplos serviços Copiar link
Com a instalação manual, é possível rodar múltiplas instâncias independentes do autoscaler para diferentes serviços.
Para isso:
- Crie um arquivo separado
values-nginx.yaml - Atualize os parâmetros
targetenamespacepara o deployment (por exemplo,nginxno namespacedefault) - Instale usando um nome de release diferente:
helm upgrade --install nginx-autoscaler cluster-proportional-autoscaler/cluster-proportional-autoscaler --values values-nginx.yamlDessa forma, você pode escalar qualquer número de serviços com configurações individuais.