Cluster Autoscaler

Ao ativar o complemento Cluster Autoscaler, você pode passar os pares de chave/valor a seguir como argumentos.

Argumentos de Configuração Comuns à maioria dos Complementos de Cluster
Chave (API e CLI) Nome para Exibição da Chave (Console) Descrição Obrigatório/Opcional Valor Padrão Valor de Exemplo
affinity afinidade

Um grupo de regras de programação de afinidade.

Formato JSON em texto simples ou codificado em Base64.

Não utilizado por:
  • Operador de GPU Nvidia
Possíveis equivalentes:
  • Descoberta de Recursos do Nó, use master.affinity
  • Operador de Rede NVIDIA, use operator.affinity
  • Driver SMB CSI, use contoller.affinity
  • Operador de GPU AMD, use controllerManager.affinity
Opcional nulo nulo
nodeSelectors seletores de nó

Você pode usar seletores de nó e labels de nó para controlar os nós de trabalho nos quais os pods complementares são executados.

Para que um pod seja executado em um nó, o seletor de nós do pod deve ter a mesma chave/valor do label do nó.

Defina nodeSelectors como um par de chave/valor que corresponda ao seletor de nós do pod e ao label do nó de trabalho.

Formato JSON em texto simples ou codificado em Base64.

Não utilizado por:
  • Operador de GPU NVIDIA
  • SMB do Driver CSI
Possíveis equivalentes:
  • Descoberta de Recursos do Nó, use worker.nodeSelector
  • Operador de Rede NVIDIA, use operator.nodeSelectors
  • Operador de GPU AMD, use selector ou controllerManager.nodeSelector
Opcional nulo {"foo":"bar", "foo2": "bar2"}

O pod só será executado em nós que tenham o label foo=bar ou foo2=bar2.

numOfReplicas numOfReplicas O número de réplicas da implantação do complemento.
Não utilizado por:
  • Plug-in de GPU AMD
  • Operador de GPU NVIDIA
  • Operador de Rede NVIDIA
  • SMB do Driver CSI
Possíveis equivalentes:
  • CoreDNS, use nodesPerReplica
  • Descoberta de Recursos do Nó, use master.replicaCount
  • Operador de GPU AMD, use controllerManager.replicas
Obrigatório 1

Cria uma réplica da implantação do complemento por cluster.

2

Cria duas réplicas da implantação do complemento por cluster.

rollingUpdate rollingUpdate

Controla o comportamento desejado de atualização incremental por maxSurge e maxUnavailable.

Formato JSON em texto simples ou codificado em Base64.

Não utilizado por:
  • Descoberta de Recurso do Nó
  • Operador de Rede NVIDIA
  • SMB do Driver CSI
Possíveis equivalentes:
  • Operador de GPU NVIDIA, use daemonsets.rollingUpdate.maxUnavailable
  • Operador de GPU AMD, use upgradePolicy em devicePlugin, metricsExporter, testRunner, configManager ou draDriver
Opcional nulo nulo
tolerations tolerâncias

Você pode usar taints e tolerations para controlar os nós de trabalho nos quais os pods complementares são executados.

Para que um pod seja executado em um nó que tenha uma taint, o pod deve ter uma tolerância correspondente.

Defina tolerations como um par de chave/valor que corresponda à tolerância do pod e à mancha do nó de trabalho.

Formato JSON em texto simples ou codificado em Base64.

Possíveis equivalentes:
  • Descoberta de Recursos do Nó, use master.tolerations e/ou worker.tolerations
  • Operador de GPU NVIDIA, use daemonsets.tolerations
  • Operador de Rede NVIDIA, use operator.tolerations
  • Driver SMB CSI, use controller.tolerations
  • Operador de GPU AMD, usar tolerações em devicePlugin, metricsExporter, testRunner, configManager, draDriver ou controllerManager
Opcional nulo [{"key":"tolerationKeyFoo", "value":"tolerationValBar", "effect":"noSchedule", "operator":"exists"}]

Somente pods que têm essa tolerância podem ser executados em nós de trabalho que têm a mancha tolerationKeyFoo=tolerationValBar:noSchedule.

topologySpreadConstraints topologySpreadConstraints

Como distribuir pods correspondentes entre a topologia fornecida.

Formato JSON em texto simples ou codificado em Base64.

Não utilizado por:
  • Descoberta de Recurso do Nó
  • Operador de GPU NVIDIA
  • Operador de Rede NVIDIA
  • SMB do Driver CSI
  • AMD GPU Operator
Opcional nulo nulo
Argumentos de Configuração Específicos para esta Extensão de Cluster
Chave (API e CLI) Nome para Exibição da Chave (Console) Descrição Obrigatório/Opcional Valor Padrão Valor de Exemplo
annotations anotações

Anotações a serem passadas para a implantação do Cluster Autoscaler.

Por exemplo, "{\"prometheus.io/scrape\":\"true\",\"prometheus.io/port\":\"8086\"}"

Formato JSON em texto simples ou codificado em Base64.

Opcional ""
authType authType O tipo de autenticação que o Cluster Autoscaler usa ao fazer solicitações, como um dos seguintes:
  • instance especifica o controlador de instâncias
  • workload especifica a identidade da carga de trabalho
Obrigatório instance
balanceSimilarNodeGroups balanceSimilarNodeGroups Detecte grupos de nós semelhantes e balanceie o número de nós entre eles. Opcional false
balancingIgnoreLabel balancingIgnoreLabel Definir um rótulo de nó que deve ser ignorado ao considerar a similaridade de grupo de nós. Um label por ocorrência de flag. O formato é label1, label2. Opcional ""
balancingLabel balancingLabel Defina um rótulo de nó a ser usado ao comparar a similaridade de grupo de nós. Se definido, todas as outras lógicas de comparação serão desativadas, e somente os rótulos serão considerados ao comparar grupos. Um label por ocorrência de flag. O formato é label1, label2. Opcional ""
cluster-autoscaler.ContainerResources recursos de contêiner do cluster-autoscaler

Você pode especificar as quantidades de recursos solicitadas pelos contêineres de complementos e definir limites de uso de recursos que os contêineres de complementos não podem exceder.

Formato JSON em texto simples ou codificado em Base64.

Opcional nulo {"limits": {"cpu": "500m", "memory": "200Mi" }, "requests": {"cpu": "100m", "memory": "100Mi"}}

Crie contêineres complementares que solicitem 100 mililitros de CPU e 100 mebibytes de memória. Limite os contêineres complementares a 500 milicores de CPU e 200 mebibytes de memória.

cordonNodeBeforeTerminating (Não mostrado na Console) Se CA cordonar nós antes de encerrar durante o processo de downscale. Opcional false
coresTotal (Não mostrado na Console) Número mínimo e máximo de núcleos no cluster, no formato <min>:<max>. O dimensionador automático do cluster não dimensionará o cluster além desses números. Opcional 0:320000
daemonsetEvictionForEmptyNodes (Não mostrado na Console) Se os pods DaemonSet serão normalmente encerrados de nós vazios. Opcional false
daemonsetEvictionForOccupiedNodes (Não mostrado na Console) Se os pods DaemonSet serão normalmente encerrados de nós não vazios. Opcional true
debuggingSnapshotEnabled (Não mostrado na Console) Se o snapshot de depuração do recurso de dimensionamento automático do cluster está ativado. Opcional false
emitPerNodegroupMetrics (Não mostrado na Console) Se verdadeiro, emita métricas por grupo de nós. Opcional false
enforceNodeGroupMinSize (Não mostrado na Console) A CA deve ampliar o grupo de nós para o tamanho mínimo configurado, se necessário. Opcional false
estimator (Não mostrado na Console) Tipo de estimador de recursos a ser usado na ampliação. Opcional binpacking
expander expansor Tipo de expansor do grupo de nós a ser usado na ampliação.

Observe que expander=price não é suportado.

Opcional random
expendablePodsPriorityCutoff (Não mostrado na Console) Pods com prioridade abaixo do limite serão dispensáveis. Eles podem ser mortos sem qualquer consideração durante a redução e eles não causam aumento de escala. Os pods com prioridade nula (PodPriority desativado) não podem ser gastos. Opcional -10
ignoreDaemonsetsUtilization (Não mostrado na Console) Se os pods DaemonSet serão ignorados ao calcular a utilização de recursos para redução. Opcional false
ignoreMirrorPodsUtilization (Não mostrado na Console) Se os pods de Espelho serão ignorados ao calcular a utilização de recursos para redução. Opcional false
leaderElect (Não mostrado na Console) Inicie um cliente de eleição líder e ganhe liderança antes de executar o loop principal. Ative isso ao executar componentes replicados para alta disponibilidade. Opcional true
leaderElectLeaseDuration (Não mostrado na Console) A duração que os candidatos não-líderes vão esperar depois de observar uma renovação de liderança até tentar adquirir a liderança de um líder liderado, mas não renovado slot. Esta é efetivamente a duração máxima que um líder pode ser interrompido antes de ser substituído por outro candidato. Isso só é aplicável se a eleição do líder estiver ativada. Opcional 15s
leaderElectRenewDeadline (Não mostrado na Console) O intervalo entre as tentativas do dimensionador automático de cluster ativo de renovar um slot de liderança antes que ele pare de liderar. Deve ser menor ou igual à duração do leasing. Isso só é aplicável se a eleição do líder estiver ativada. Opcional 10s
leaderElectResourceLock (Não mostrado na Console) O tipo de objeto de recurso usado para bloqueio durante a escolha do líder. As opções suportadas são leases (padrão), endpoints, endpointsleases, configmaps e configmapsleases. Opcional leases
leaderElectRetryPeriod (Não mostrado na Console) A duração que os clientes devem esperar entre a tentativa de aquisição e renovação de uma liderança. Isso só é aplicável se a eleição do líder estiver ativada. Opcional 2s
maxAutoprovisionedNodeGroupCount (Não mostrado na Console) O número máximo de grupos provisionados automaticamente no cluster. Opcional 15
maxEmptyBulkDelete maxEmptyBulkDelete Número máximo de nós vazios que podem ser excluídos ao mesmo tempo. Opcional 10
maxFailingTime (Não mostrado na Console) Tempo máximo da última execução bem-sucedida do dimensionador automático registrada antes da reinicialização automática. Opcional 15m
maxGracefulTerminationSec (Não mostrado na Console) Número máximo de segundos que a CA aguarda o encerramento do pod ao tentar reduzir um nó. Opcional 600
maxInactivity (Não mostrado na Console) Tempo máximo da última atividade do dimensionador automático registrada antes da reinicialização automática. Opcional 10m
maxNodeProvisionTime maxNodeProvisionTime Tempo máximo que a CA aguarda o provisionamento do nó. Opcional 15m
maxNodesTotal (Não mostrado na Console) Número máximo de nós em todos os pools de nós. O dimensionador automático do cluster não aumentará o cluster além desse número. Opcional 0
maxTotalUnreadyPercentage (Não mostrado na Console) Porcentagem máxima de nós não prontos no cluster. Depois que isso é excedido, a CA interrompe as operações. Opcional 45
memoryTotal (Não mostrado na Console) Número mínimo e máximo de gigabytes de memória no cluster, no formato <min>:<max>. O dimensionador automático do cluster não dimensionará o cluster além desses números. Opcional 0:6400000
minReplicaCount (Não mostrado na Console) Número mínimo ou réplicas que um conjunto de réplicas ou controlador de replicação deve ter para permitir a exclusão de seus pods em redução. Opcional 0
nodes nós

Uma lista de Número mínimo de nós, Número máximo de nós e o OCID do pool de nós a ser gerenciado pelo dimensionador automático do cluster.

O formato é <min>:<max>:<node-pool1-ocid>, <min>:<max>:<node-pool2-ocid>.

Use nodes ou nodeGroupAutoDiscovery, mas não ambos.

Formato JSON em texto simples ou codificado em Base64.

Obrigatório, se nodeGroupAutoDiscovery não estiver definido ""
nodeGroupAutoDiscovery (Não mostrado na Console)

Uma lista de pares de chave/valor de tag, Número mínimo de nós, Número máximo de nós e o OCID do compartimento no qual o pool de nós a ser gerenciado pelo dimensionador automático do cluster está localizado.

O formato é compartmentId:<compartment-ocid>,nodepoolTags:<tagKey1>=<tagValue1>&<tagKey2>=<tagValue2>,min:<min-nodes>,max:<max-nodes>

Use nodeGroupAutoDiscovery ou nodes, mas não ambos.

Observe que as tags de pool de nós minSize e maxSize sempre têm precedência sobre min:{{<min-nodes>}} e max:{{<max-nodes>}}, respectivamente.

Suportado com o Cluster Autoscaler versão 1.30.3, versão 1.31.1, versão 1.32.0 e posterior.

Formato JSON em texto simples ou codificado em Base64.

Obrigatório, se nodes não estiver definido
okTotalUnreadyCount (Não mostrado na Console) Número de nós não prontos permitidos, independentemente de maxTotalUnreadyPercentage. Opcional 3
recordDuplicatedEvents (Não mostrado na Console) Ative o dimensionador automático para imprimir eventos duplicados em uma janela de 5 minutos. Opcional false
scaleDownCandidatesPoolMinCount (Não mostrado na Console)

Número mínimo de nós que são considerados candidatos não vazios adicionais para redução quando alguns candidatos da iteração anterior não são mais válidos. Ao calcular o tamanho do pool para candidatos adicionais que tomamos.

max(#nodes * scale-down-candidates-pool-ratio,
              scale-down-candidates-pool-min-count)
Obrigatório 50
scaleDownCandidatesPoolRatio (Não mostrado na Console) Uma proporção de nós que são considerados candidatos não vazios adicionais para redução quando alguns candidatos da iteração anterior não são mais válidos. Menor valor significa melhor capacidade de resposta da CA, mas possível latência de redução mais lenta. Um valor mais alto pode afetar o desempenho da CA com grandes clusters (centenas de nós). Definir como 1.0 para desativar essa heurística - a CA usará todos os nós como candidatos adicionais. Obrigatório 0.1
scaleDownDelayAfterAdd scaleDownDelayAfterAdd Quanto tempo depois de aumentar essa escala, a avaliação é retomada. Obrigatório 10m
scaleDownDelayAfterDelete (Não mostrado na Console) Quanto tempo após a exclusão do nó que a avaliação de redução é retomada, o padrão é scan-interval. Obrigatório 10s
scaleDownDelayAfterFailure (Não mostrado na Console) Quanto tempo após a falha de redução que a avaliação de redução é retomada. Obrigatório 3m
scaleDownEnabled scaleDownEnabled A CA deve reduzir o cluster. Opcional true
scaleDownNonEmptyCandidatesCount (Não mostrado na Console) Número máximo de nós não vazios considerados em uma iteração como candidatos para redução com drenagem. Menor valor significa melhor capacidade de resposta da CA, mas possível latência de redução mais lenta. Um valor mais alto pode afetar o desempenho da CA com grandes clusters (centenas de nós). Definir como valor não positivo para desativar essa heurística - A CA não limitará o número de nós que considera. Obrigatório 30
scaleDownUnneededTime scaleDownUnneededTime Quanto tempo um nó deve ser desnecessário antes de ser elegível para redução. Obrigatório 10m
scaleDownUnreadyTime (Não mostrado na Console) Quanto tempo um nó não pronto deve ser desnecessário antes de ser elegível para redução. Obrigatório 20m
scaleDownUtilizationThreshold (Não mostrado na Console) Nível de utilização do nó, definido como a soma dos recursos solicitados divididos por capacidade, abaixo da qual um nó pode ser considerado para redução. Obrigatório 0.5
scanInterval scanInterval Com que frequência o cluster é reavaliado para expansão ou redução. Opcional 10s
skipNodesWithCustomControllerPods (Não mostrado na Console) Se true, o dimensionador automático do cluster nunca excluirá nós com pods de propriedade de controladores personalizados. Opcional true
skipNodesWithLocalStorage (Não mostrado na Console) Se o true, o dimensionador automático do cluster nunca excluirá nós com pods com armazenamento local, por exemplo, EmptyDir ou HostPath. Opcional true
skipNodesWithSystemPods (Não mostrado na Console) Se true, o dimensionador automático do cluster nunca excluirá nós com pods do kube-system (exceto para DaemonSet ou pods de espelho). Opcional true
statusConfigMapName (Não mostrado na Console) O nome do status ConfigMap que a CA grava. Opcional cluster-autoscaler-status
stderrthreshold (Não mostrado na Console) O limite de severidade do log, além do qual os logs são enviados para stderr. Por exemplo, se você definir isso como error, todos os logs com uma severidade maior que error serão enviados ao stderr. Opcional info
unremovableNodeRecheckTimeout unremovableNodeRecheckTimeout O timeout antes de verificarmos novamente um nó que não pôde ser removido antes. Obrigatório 5m
v (Não mostrado na Console) O número do nível de detalhamento do log. Opcional 0
writeStatusConfigmap (Não mostrado na Console) A CA deve gravar informações de status em um configmap. Opcional true
Considerações sobre Clusters Grandes

A tabela a seguir descreve considerações para configurar este complemento de cluster em clusters grandes.

Nome do Argumento Número wrt de Atribuições dos Nós Descrição À medida que o tamanho do cluster aumenta Riscos Recomendação
cluster-autoscaler.ContainerResources S

Define solicitações e limites de CPU e memória para o pod do Cluster Autoscaler.

À medida que o tamanho do cluster aumenta, o Cluster Autoscaler experimenta:

  • Crescimento significativo na avaliação de estado do cluster para nós e pods
  • Mais simulações de programação
  • Uso mais alto de CPU e memória
  • Maior latência de tomada de decisão para operações de ampliação e redução

Se os recursos forem subdimensionados:

  • O pod do Cluster Autoscaler pode ser encerrado porque excede seu limite de memória.
  • As decisões de dimensionamento podem ser atrasadas, deixando os pods no estado Pending .
  • Os ciclos de varredura de cluster podem diminuir a velocidade, reduzindo a capacidade de resposta.
  • Um backlog de pods não programáveis pode se acumular.

Aumente os recursos de CPU e memória conforme apropriado:

  • Aumente a memória para processar o estado de um cluster grande.
  • Aumente a CPU para executar simulações de programação e tomar decisões de dimensionamento com mais rapidez.
balanceSimilarNodeGroups N

Controla se o Cluster Autoscaler equilibra nós em pools de nós semelhantes.

Clusters grandes geralmente usam vários pools de nós, aumentando a possibilidade de dimensionamento desigual entre pools.

A ativação desse argumento adiciona a sobrecarga de computação e aumenta ligeiramente a complexidade das decisões de dimensionamento.

Se este argumento estiver desativado:

  • Os nós podem ser distribuídos de forma desigual em pools de nós semelhantes.
  • Pools de nós específicos podem se tornar hotspots.
  • A tolerância a falhas pode ser reduzida.

Ative esse argumento para ambientes com vários pools de nós e para cenários de alta disponibilidade que exigem dimensionamento balanceado.

numOfReplicas N

Controla o número de pods do Cluster Autoscaler.

O Cluster Autoscaler usa a eleição de líderes. Somente uma instância ativa toma decisões de dimensionamento, enquanto outras réplicas fornecem alta disponibilidade.

Se a contagem for muito baixa, uma falha de nó, falha de pod ou upgrade poderá interromper temporariamente as decisões de dimensionamento automático. Isso pode atrasar a ampliação de nós para cargas de trabalho pendentes e a redução de nós subutilizados até que o Cluster Autoscaler se torne disponível novamente.

Use duas ou três réplicas para fornecer alta disponibilidade.

affinity / nodeSelectors / tolerations N

O Cluster Autoscaler é um componente crítico do plano de controle.

O posicionamento do pod afeta a estabilidade e a confiabilidade do Cluster Autoscaler.

Se esses argumentos não forem configurados adequadamente:

  • O Cluster Autoscaler pode ser executado em nós instáveis.
  • O Cluster Autoscaler pode ser executado em nós com recursos restritos.
  • Os pods podem ser reiniciados.
  • O desempenho pode ser reduzido.
  • Execute o Cluster Autoscaler em nós dedicados de sistema ou infraestrutura com recursos suficientes.
  • Configure tolerâncias quando os nós do sistema de destino estiverem contaminados.
authType N

Define como o Cluster Autoscaler se autentica com APIs do OCI.

O Cluster Autoscaler conta com APIs do OCI para criar nós durante operações de expansão e excluir nós durante operações de expansão.

  • Falhas de autenticação impedem operações de dimensionamento.
  • A latência ou as falhas da API podem atrasar o provisionamento do nó.
  • Use um mecanismo de autenticação confiável. Os principais da instância são preferenciais.
  • Certifique-se de que as permissões e os limites de serviço necessários estejam configurados.
rollingUpdate N

Controla a estratégia de atualização de implantação do Cluster Autoscaler.

O tempo de inatividade do Cluster Autoscaler interrompe as decisões de dimensionamento e reduz a capacidade de resposta do cluster durante um upgrade.

Se este argumento não estiver configurado corretamente:

  • Todas as réplicas podem ser reiniciadas ao mesmo tempo.
  • O recurso de dimensionamento pode estar temporariamente indisponível.
  • Configure maxUnavailable com cuidado.
  • Certifique-se de que pelo menos uma instância do Cluster Autoscaler permaneça ativa durante uma atualização.
maxNodesTotal S

Define o número máximo de nós que o Cluster Autoscaler pode gerenciar.

Este argumento define um limite superior fixo para o tamanho do cluster e impede a expansão não controlada.

Se o valor for muito baixo, o Cluster Autoscaler interromperá o dimensionamento mesmo quando os pods permanecerem no estado Pending .

Se o valor for muito alto:

  • O cluster pode atingir os limites de tenancy ou serviço do OCI.
  • Os custos podem aumentar inesperadamente.

Defina o valor um pouco maior que o tamanho máximo esperado do cluster. Por exemplo, defina-o com mais de 20000 para um cluster que deve conter até 20.000 nós.

coresTotal S

Define o número mínimo e máximo total de núcleos de CPU no cluster.

Esse argumento controla o dimensionamento de capacidade de CPU agregada e ajuda a evitar o subprovisionamento ou o superprovisionamento.

Se o valor máximo for muito baixo, o Cluster Autoscaler bloqueará operações de expansão.

Se o valor máximo for muito alto, o provisionamento excessivo de nós poderá aumentar os custos.

Defina coresTotal com base na capacidade máxima planejada de CPU e nas cotas de recursos de nuvem da sua organização. Certifique-se de que o coresTotal seja alto o suficiente para suportar cargas de trabalho de pico.

memoryTotal S

Define a memória total mínima e máxima no cluster.

Esse argumento controla o provisionamento total da memória do cluster e é particularmente importante para cargas de trabalho com uso intenso de memória.

Se o valor máximo for muito baixo, o Cluster Autoscaler impedirá operações de expansão, o que pode deixar cargas de trabalho sem memória suficiente.

Se o valor máximo for muito alto, o cluster poderá ser superprovisionado e os custos poderão aumentar.

Alinhe os valores mínimo e máximo com a estratégia de dimensionamento do pool de nós.

maxEmptyBulkDelete S

Define o número máximo de nós vazios que podem ser excluídos simultaneamente.

Este argumento controla a velocidade das operações de redução.

Se o valor for muito baixo:

  • As operações de redução podem ser lentas.
  • Recursos ociosos podem permanecer no cluster por mais tempo.

Se o valor for muito alto, um grande número de nós poderá ser excluído ao mesmo tempo.

  • Aumente o valor moderadamente para clusters grandes.
  • Evite a exclusão agressiva em massa.
nodes S

Define o número mínimo e máximo de nós para cada pool de nós.

Esse argumento controla os limites de dimensionamento para cada pool de nós.

Se os limites forem muito restritivos, o pool de nós não poderá ser dimensionado suficientemente.

Se os limites forem muito permissivos, os nós poderão ser distribuídos de forma desigual entre pools de nós.

  • Configure os limites de cada pool de nós com base no tipo de carga de trabalho e no domínio de disponibilidade.
  • Alinhe os valores com a definição balanceSimilarNodeGroups .