Configurando o ajuste automático de escala para conjuntos de trabalhadores
Atualize o configmap do escalador automático de cluster para permitir a escala automática dos nós do trabalhador em seus conjuntos de trabalhadores com base nos valores mínimo e máximo que você configurou.
Depois de editar o configmap para habilitar o autoescalonamento em um pool de workers, o autoescalonador do cluster ajusta o tamanho do seu cluster em resposta às solicitações da sua carga de trabalho. Isso significa que você não pode redimensionar ou rebalancear seus pools de trabalhadores. A varredura e o aumento e redução de escala acontecem em intervalos regulares ao longo do tempo e, dependendo do número de nós do trabalhador, podem levar um período de tempo mais longo para serem concluídas, como 30 minutos. Posteriormente, se você desejar remover o escalador automático de cluster, deverá primeiro desativar cada conjunto de trabalhadores no configmap.
A partir da versão 1.2.4, não há mais suporte para a opção maxEmptyBulkDelete. Remova essa opção de seu configmap executando o comando kubectl edit configmap iks-ca-configmap -n kube-system e excluindo a opção. Como substituto,
você pode usar a opção maxScaleDownParallelism que foi adicionada na versão 1.2.4. Para obter mais informações, consulte a referência do configmap.
Antes de Iniciar
-
Edite o arquivo YAML do configmap do escalador automático de cluster.
oc edit cm iks-ca-configmap -n kube-system -o yamlSaída de exemplo
apiVersion: v1 data: workerPoolsConfig.json: | [ {"name": "<worker_pool>","minSize": 1,"maxSize": 2,"enabled":false} ] kind: ConfigMap -
Edite o configmap com os parâmetros para definir como o escalador automático de cluster escalará seu conjunto de trabalhadores do cluster. Nota: a menos que você tenha desativado todos os balanceadores de carga do aplicativo (ALBs) públicos em cada zona de seu cluster padrão, deve-se mudar o
minSizepara2por zona para que os pods do ALB possam ser difundidos para alta disponibilidade."name": "default": substitua"default"pelo nome ou ID do conjunto de trabalhadores que deseja escalar. Para listar conjuntos de trabalhadores, executeibmcloud oc worker-pool ls --cluster CLUSTER_NAME_OR_ID. Para gerenciar mais de um conjunto de trabalhadores, copie a linha JSON para uma linha separada por vírgulas, como a seguir.
[ {"name": "default","minSize": 1,"maxSize": 2,"enabled":false}, {"name": "Pool2","minSize": 2,"maxSize": 5,"enabled":true} ] ``` O escalador automático de cluster pode escalar apenas os conjuntos de trabalhadores que têm o rótulo `ibm-cloud.kubernetes.io/worker-pool-id`. Para verificar se o conjunto de trabalhadores tem o rótulo necessário, execute `ibmcloud oc worker-pool get --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID | grep Labels`. Se o seu pool de trabalhadores não tiver a etiqueta necessária, adicione um novo pool de trabalhadores e utilize esse pool com o autoscaler do cluster. {: note} - `"minSize": 1`: Especifique o número mínimo de nós de trabalho por zona. A configuração de um `minSize` não aciona automaticamente um aumento de escala. O limite mínimo de nós de trabalho ( `minSize` ) é um limite que impede que o autoscaler do cluster reduza o número de nós de trabalho para menos do que um determinado número por zona. Se o seu cluster ainda não tiver esse número por zona, o escalador automático de cluster não aumentará a capacidade até que você tenha solicitações de recurso de carga de trabalho que requeiram mais recursos. Por exemplo, se você tiver um conjunto de trabalhadores com um nó do trabalhador por três zonas (três nós do trabalhador no total) e configurar o `minSize` como `4` por zona, o escalador automático do cluster não provisionará imediatamente um adicional de três nós do trabalhador por zona (12 nós do trabalhador no total). Em vez disso, o aumento da capacidade é acionado por solicitações de recurso. Se você criar uma carga de trabalho que solicite os recursos de 15 nós do trabalhador, o escalador automático de cluster aumentará a capacidade do conjunto de trabalhadores para atender a essa solicitação. Agora, a configuração “ `minSize` ” significa que o autoscaler do cluster não reduz o número de nós de trabalho para menos de quatro por zona, mesmo que você remova a carga de trabalho que solicita esse número. Para obter mais informações, consulte a [documentação do Kubernetes](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#when-does-cluster-autoscaler-change-the-size-of-a-cluster){: external}. - `"maxSize": 2`: especifique o número máximo de nós do trabalhador por zona para a qual o escalador automático do cluster pode aumentar a capacidade do conjunto de trabalhadores. O valor deve ser igual ou maior que o valor que você configurou para o `minSize`. - `"enabled": false`: defina o valor como `true` para que o escalador automático do cluster gerencie a escala do conjunto de trabalhadores. Configure o valor como `false` para impedir que o escalador automático de cluster escale o conjunto de trabalhadores. Posteriormente, se você desejar [remover o escalador automático de cluster](/docs/openshift?topic=openshift-cluster-scaling-install-addon&interface=ui#autoscaler-remove-console), deverá primeiro desativar cada conjunto de trabalhadores no configmap. -
Salve o arquivo de configuração.
-
Obtenha seu pod do autoescalador do cluster.
oc get pods -n kube-system -
Revise a seção
Eventsdo pod autoscaler do cluster para um eventoConfigUpdatedpara verificar se o configmap foi atualizado com êxito. A mensagem do evento para o configmap está no seguinte formato:minSize:maxSize:PoolName:<SUCCESS|FAILED>:error message.oc describe pod -n kube-system <cluster_autoscaler_pod>Saída de exemplo
Name: ibm-iks-cluster-autoscaler-857c4d9d54-gwvc6 Namespace: kube-system ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ConfigUpdated 3m ibm-iks-cluster-autoscaler-857c4d9d54-gwvc6 {"1:3:default":"SUCCESS:"}
Se você ativar um conjunto de trabalhadores para ajuste automático de escala e depois incluir uma zona nesse conjunto de trabalhadores, reinicie o pod do escalador automático de cluster para que ele absorva essa mudança: oc delete pod -n kube-system <cluster_autoscaler_pod>.
Customizando os valores de configuração do escalador automático de cluster
Customize as configurações do escalador automático de cluster, como a quantia de tempo que ele aguarda antes de aumentar ou diminuir a capacidade dos nós do trabalhador.
-
Ao modificar um parâmetro configmap diferente do conjunto de trabalhadores
minSize,maxSizeou se você ativar ou desativar um conjunto de trabalhadores, os pods do escalador automático de cluster serão reiniciados.
-
Revise os parâmetros cluster autoscaler configmap.
-
Faça o download do configmap de complemento do escalador automático de cluster e revise os parâmetros.
oc get cm iks-ca-configmap -n kube-system -o yaml > configmap.yaml -
Abra o arquivo
configmap.yamle atualize as configurações que você deseja mudar. -
Reaplique o configmap do complemento do escalador automático de cluster.
oc apply -f configmap.yaml -
Verifique se os pods foram reiniciados com sucesso.
oc get pods -n kube-system | grep autoscaler
Referência do configmap do escalador automático do cluster..
balancingIgnoreLabel- A chave de rótulo do nó a ser ignorada durante o balanceamento de zona Além dos rótulos de nó fixos, o escalador automático pode ignorar 5 rótulos de nó adicionais durante o balanceamento de zona Por exemplo,
balancingIgnoreLabel1:label1,balancingIgnoreLabel2: custom-label2 coresTotal- O número mínimo e máximo de númentos no cluster. O escalador automático de cluster não escala o cluster além desses números.. O valor padrão é
0:320000. enforceNodeGroupMinSize- Configure esse valor como
truepara aumentar a capacidade do conjunto de trabalhadores para o tamanho mínimo configurado, se necessário. O valor padrão éfalse. expander- Como o autoscaler do cluster determina qual pool de workers deve ser dimensionado caso haja vários pools de workers. O valor padrão é
random. random: seleciona aleatoriamente entremost-podseleast-waste.most-pods: seleciona o conjunto de trabalhadores que é capaz de planejar a maioria dos pods ao aumentar a capacidade. Use esse método se você estiver usandonodeSelectorpara certificar-se de que os pods sejam colocados em nós do trabalhador específicos.least-waste: seleciona o conjunto de trabalhadores que tem a CPU menos não usada depois do aumento de escala. Se dois conjuntos de trabalhadores usarem a mesma quantia de recursos da CPU depois do aumento de escala, o conjunto de trabalhadores com a memória menos não usada será selecionado.expendablePodsPriorityCutoff- Os pods com prioridade sob o corte são dispensáveis. Elas podem ser removidas sem consideração durante a redução de escala e não causam aumento de escala. Os pods que
PodPriorityconfiguram como nulos não são dispensáveis. O valor padrão é-10. ignoreDaemonSetsUtilization- Ignora os pods do autoscaler DaemonSet ao calcular a utilização de recursos para redução de escala. O valor padrão é
false. imagePullPolicy- Quando baixar a imagem “ Docker ”. O valor padrão é
Always. Always: extrai a imagem toda vez que o pod é iniciado.IfNotPresent: Extrai a imagem somente se a imagem ainda não estiver presente localmente. \n -Neverimagem de satélite: Presume que a imagem existe localmente e nunca a extrai.kubeClientBurst- Burst permitido para o cliente Kubernetes. O valor padrão é
300. kubeClientQPS- O valor de QPS para o cliente Kubernetes. Quantas consultas são aceitas quando o burst é esgotado. O valor padrão é
5.0. livenessProbeFailureThreshold- O número de vezes que o
kubelettenta novamente uma verificação de atividade após o pod ser iniciado e a primeira verificação de atividade falhar. Depois que o limite de falha for atingido, o contêiner será reiniciado e o pod será marcado comoUnreadypara uma análise de prontidão, se aplicável. O valor padrão é3. livenessProbePeriodSeconds- O intervalo, em segundos, em que o
kubeletrealiza um teste de atividade. O valor padrão é600. livenessProbeTimeoutSeconds- O tempo, em segundos, após o qual a sonda de verificação de atividade expira. O valor padrão é
10. logLevel- O nível de log para o escalador automático. Os níveis de registro são
info,debug,warning,error. O valor padrão éinfo. maxBulkSoftTaintCount- O número máximo de nós de trabalho que podem ser marcados ou desmarcados com a opção
PreferNoScheduleao mesmo tempo. Para desativar esse recurso, configure-o como0. O valor padrão é0. maxBulkSoftTaintTime- O tempo máximo durante o qual os nós de trabalho podem ser marcados ou desmarcados com a opção “
PreferNoSchedule” ao mesmo tempo. O valor padrão é10m. maxDrainParallelism- Número máximo de nós que ainda precisam ser drenados que podem ser drenados e excluídos em paralelo. O valor padrão é
1. maxEmptyBulkDelete- Somente suportado em versões anteriores a 1.2.4 O número máximo de nós vazios que podem ser excluídos pelo autoscaler ao mesmo tempo. O valor padrão é
10. maxFailingTime- O tempo máximo, em minutos, durante o qual o pod do autoscaler do cluster permanece em execução sem que uma ação seja concluída, antes que o pod seja reiniciado automaticamente. O valor padrão é
15m. maxGracefulTerminationSec- O número máximo de segundos que o escalador automático espera que o pod termine quando ele diminuir a capacidade de um nó. O valor padrão é
600. maxInactivity- O tempo máximo, em minutos, durante o qual o pod do autoscaler do cluster permanece em execução sem nenhuma atividade registrada antes de ser reiniciado automaticamente. O valor padrão é
10m. maxNodeGroupBinpackingDuration- Tempo máximo em segundos gasto na simulação de empacotamento de compartimentos para cada pool de trabalhadores. O valor padrão é
10s. maxNodeProvisionTime- O tempo máximo, em minutos, que um nó de trabalho pode levar para iniciar o provisionamento antes que o autoscaler do cluster cancele a solicitação de aumento de escala. O valor padrão é
120m. maxNodeSkipevalTimeTrackerEnabled- Versão 1.35 e posterior: Habilita métricas adicionais para analisar o comportamento de redução de escala do Cluster Autoscaler quando os nós são ignorados durante a avaliação. O valor padrão é
false. - Quando ativado, o Cluster Autoscaler expõe a métrica
cluster_autoscaler_skipped_scale_events_countdentro do pod CA para monitorar eventos de scale-down ignorados. maxNodesPerScaleUp- Número máximo de nós que podem ser adicionados em um único aumento de escala. Isso destina-se estritamente para otimizar a latência do algoritmo do escalador automático e não deve ser utilizado como um limite de taxa para aumento de escala.
O valor padrão é
1000. maxPodEvictionTime- Tempo máximo que o escalador automático tenta despejar um pod antes de parar. O valor padrão é
2m. maxRetryGap- O tempo máximo, em segundos, para uma nova tentativa após uma falha na conexão com a API do serviço. Use este parâmetro e o parâmetro
retryAttemptspara ajustar a janela de nova tentativa para o escalador automático de cluster. O valor padrão é60. parallelDrain- Configure como
truepara permitir a drenagem paralela de nós O valor padrão éfalse. - Depreciado A configuração
parallelDrain(mapeia para--parallel-drain) é compatível apenas com as versões do Cluster Autoscaler 1.26- 1.31. Para as versões 1.32 e posteriores, use--max-drain-parallelisme--max-scale-down-parallelism. maxScaleDownParallelism- Número máximo de nós, tanto vazios quanto que precisam ser drenados, que podem ser excluídos em paralelo. O valor padrão é
10. maxTotalUnreadyPercentage- A porcentagem máxima de nós não prontos no cluster Após esse valor ser excedido, o escalador automático para operações. O valor padrão é
45. memoryTotal- A quantidade mínima e máxima de memória em gigabytes para o cluster O escalador automático de cluster não escala o cluster além desses números.. O valor padrão é
0:6400000. minReplicaCount- O número mínimo de réplicas que um replicaSet ou controlador de replicação deve permitir que sejam excluídas durante a redução de escala. O valor padrão é
0. newPodScaleUpDelay- Pods mais novos que esse valor em segundos não são considerados para aumento de capacidade. Pode ser aumentado para pods individuais através da anotação
cluster-autoscaler.kubernetes.io/pod-scale-up-delay. O valor padrão é0s. nodeDeleteDelayAfterTaint- Quanto tempo em segundos esperar antes de excluir um nó após contaminá-lo. O valor padrão é
5s. nodeDeletionBatcherInterval- Quanto tempo em minutos o escalador automático pode reunir nós para excluí-los em lote. O valor padrão é
0m. nodeRemovalLatencyTrackingEnabled- Versão 1.35 e posterior: Ativa as métricas de histograma relacionadas à latência de redução de escala do nó. Essas métricas fornecem visibilidade do tempo que o Cluster Autoscaler leva para remover os nós ou cancelar a remoção
quando os nós se tornam necessários novamente. O valor padrão é
false. - Quando ativado, o Cluster Autoscaler expõe a métrica de histograma
cluster_autoscaler_node_removal_latency_seconds_bucketprometheus do pod CA para monitorar o comportamento de redução de escala. okTotalUnreadyCount- Número de nós não prontos permitidos, independentemente do valor de
maxTotalUnreadyPercentageO valor padrão é3. OSReservedCPUMili- A quantidade de CPU reservada em MiliCPU. O valor padrão é
30. OSReservedMemoryGi- A quantidade de memória reservada em GiB. O valor padrão é
0.3. parallelDrain- Configure como
truepara permitir a drenagem paralela de nós O valor padrão éfalse. prometheusScrape- Configure como
truepara enviar métricas do Prometheus. Para parar de enviar métricas, configure comofalse. resourcesLimitsCPU- A quantidade máxima de CPU do nó de trabalho que o pod “
ibm-iks-cluster-autoscaler” pode consumir. O valor padrão é600m. resourcesLimitsMemory- A quantidade máxima de memória do nó de trabalho que o pod “
ibm-iks-cluster-autoscaler” pode consumir. O valor padrão é600Mi. resourcesRequestsCPU- A quantidade mínima de CPU do nó de trabalho com a qual o pod “
ibm-iks-cluster-autoscaler” é iniciado. O valor padrão é200m. resourcesRequestsMemory- A quantidade mínima de memória do nó de trabalho com a qual o pod “
ibm-iks-cluster-autoscaler” é iniciado. O valor padrão é200Mi. retryAttempts- O número máximo de tentativas de repetição após uma falha na conexão com a API do serviço. Use este parâmetro e o parâmetro
maxRetryGappara ajustar a janela de repetição de tentativas do autoscaler do cluster. | O valor padrão é64``. scaleDownCandidatesPoolMinCount- O número mínimo de nós que são considerados como candidatos não vazios adicionais para escalar para baixo quando alguns candidatos de iterações anteriores não são mais válidos O valor padrão é
50. scaleDownCandidatesPoolRatio- A proporção de nós que são considerados como candidatos não vazios adicionais para escalar para baixo quando alguns candidatos da iteração anterior não são mais válidos O valor padrão é
0.1. scaleDownDelayAfterAdd- O tempo que leva para que a avaliação de redução de escala seja retomada após a ampliação. O valor padrão é
10m.
scaleDownDelayAfterDelete | O tempo que leva para que a avaliação de redução de escala seja retomada após a exclusão de um nó. O valor padrão é o mesmo do parâmetro “ scan-interval ”, que é 1m.
scaleDownDelayAfterFailure- A quantia de tempo em minutos que o escalador automático deve aguardar após uma falha. O valor padrão é
3m. scaleDownEnabled- Quando configurado como
false, o escalador automático não executa a redução de escala (scale down) O valor padrão étrue. scaleDownGPUUtilizationThreshold- A soma das solicitações de GPU de todos os pods em execução no nó dividida pelos recursos alocáveis do nó. Quando as solicitações de recursos são menores que esse limite, um nó pode ser considerado para redução. O cálculo de utilização considera
apenas os recursos de GPU. A utilização da CPU e da memória é ignorada. O valor padrão é
0.5. scaleDownNonEmptyCandidatesCount- O número máximo de nós não vazios considerados em uma iteração como candidatos para redução com drenagem. | O valor padrão é
30. scaleDownUnneededTime- O tempo, em minutos, durante o qual um nó de trabalho deve permanecer ocioso antes de poder ser reduzido. O valor padrão é
10m. scaleDownUnreadyEnabled- Quando configurado como
true, os nós não prontos são planejados para redução de capacidade O valor padrão étrue. scaleDownUnreadyTime- A quantia de tempo em minutos que o escalador automático deve esperar antes que um nó não pronto seja considerado para redução de capacidade.. O valor padrão é
20m. scaleDownUtilizationThreshold- O limite de utilização do nó de trabalho. Se a utilização do nó de trabalho for inferior ao limite, considera-se que o nó de trabalho foi reduzido. A utilização do nó de trabalho é calculada como a soma dos recursos de CPU e memória solicitados
por todos os pods em execução no nó de trabalho, dividida pela capacidade de recursos do nó de trabalho. | O valor padrão é
0.5. scanInterval- Configure com que frequência, em minutos, o escalador automático de cluster varre o uso de carga de trabalho que aciona o aumento ou a diminuição de capacidade. O valor padrão é
1m. skipNodesWithLocalStorage- Quando configurado como
true, os nós do trabalhador que têm pods que estão salvando dados no armazenamento local não têm sua capacidade diminuída. O valor padrão étrue. skipNodesWithSystemPods- Quando configurado como
true, os nós do trabalhador que têm os podskube-systemnão têm sua capacidade diminuída. Não configure o valor comofalseporque diminuir a capacidade de podskube-systempode ter resultados inesperados. O valor padrão étrue. unremovableNodeRecheckTimeout- O tempo limite em minutos antes do escalador automático verificar novamente um nó que não pôde ser removido na tentativa anterior. O valor padrão é
5m. workerPoolsConfig.json- Os pools de trabalho que você deseja dimensionar automaticamente, incluindo o número mínimo e máximo de nós de trabalho por zona no formato
{"name": "<pool_name>","minSize": 1,"maxSize": 2,"enabled":false}. POOL_NAME: o nome ou ID do conjunto de trabalhadores a ser ativado ou desativado para o ajuste automático de escala. Para listar conjuntos de trabalhadores disponíveis, executeibmcloud oc worker-pool ls --cluster CLUSTER_NAME_OR_ID.maxSize: <number_of_workers>: O número máximo de nós de trabalho por zona até o qual o autoscaler do cluster pode aumentar a escala. O valor deve ser igual a ou maior que o valor configurado para o tamanhominSize: <number_of_workers>.min=<number_of_workers>: O número mínimo de nós de trabalho por zona até o qual o autoscaler do cluster pode reduzir a escala. Se você precisar que seus pods ALB sejam distribuídos para alta disponibilidade, deverá definir o valor como pelo menos 2. Se você desativou todos os ALBs públicos em cada zona do seu cluster padrão, pode definir o valor como “0”. Lembre-se de que configurar um tamanhominnão aciona automaticamente um aumento de capacidade. O tamanho dominé um limite para que o autoscaler do cluster não reduza o número de nós de trabalho por zona para menos do que esse número mínimo. Se o cluster ainda não tiver esse número de nós do trabalhador por zona, o autoescalador de cluster não aumentará a capacidade até que haja solicitações de recurso de carga de trabalho que requeiram mais recursos.enabled=: Quandotrue, o autoscaler do cluster pode dimensionar seu pool de trabalhadores. Quandofalse, o autoscaler do cluster não dimensiona o pool de trabalhadores. Posteriormente, se você quiser remover o autoscaler do cluster, será necessário primeiro desativar cada pool de workers noConfigMap. Se você habilitar um pool de workers para o autoescalonamento e, posteriormente, adicionar uma zona a esse pool, reinicie o pod do autoescalonador do cluster para que ele reconheça essa alteração:oc delete pod -n kube-system <cluster_autoscaler_pod>.- Por padrão, o conjunto de trabalhadores
defaultnão está ativado, com um valormaxde2e um valorminde1.