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

  1. Edite o arquivo YAML do configmap do escalador automático de cluster.

    oc edit cm iks-ca-configmap -n kube-system -o yaml
    

    Saída de exemplo

    apiVersion: v1
    data:
      workerPoolsConfig.json: |
        [
         {"name": "<worker_pool>","minSize": 1,"maxSize": 2,"enabled":false}
        ]
    kind: ConfigMap
    
  2. 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 minSize para 2 por 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, execute ibmcloud 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.
    
    
  3. Salve o arquivo de configuração.

  4. Obtenha seu pod do autoescalador do cluster.

    oc get pods -n kube-system
    
  5. Revise a seção Events do pod autoscaler do cluster para um evento ConfigUpdated para 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.

  1. Revise os parâmetros cluster autoscaler configmap.

  2. 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
    
  3. Abra o arquivo configmap.yaml e atualize as configurações que você deseja mudar.

  4. Reaplique o configmap do complemento do escalador automático de cluster.

    oc apply -f configmap.yaml
    
  5. 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 true para 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 entre most-pods e least-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 usando nodeSelector para 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 PodPriority configuram 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 - Never imagem 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 kubelet tenta 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 como Unready para uma análise de prontidão, se aplicável. O valor padrão é 3.
livenessProbePeriodSeconds
O intervalo, em segundos, em que o kubelet realiza 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 PreferNoSchedule ao mesmo tempo. Para desativar esse recurso, configure-o como 0. 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_count dentro 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 retryAttempts para ajustar a janela de nova tentativa para o escalador automático de cluster. O valor padrão é 60.
parallelDrain
Configure como true para 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-parallelism e --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_bucket prometheus 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 maxTotalUnreadyPercentage O 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 true para permitir a drenagem paralela de nós O valor padrão é false.
prometheusScrape
Configure como true para enviar métricas do Prometheus. Para parar de enviar métricas, configure como false.
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 maxRetryGap para 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 pods kube-system não têm sua capacidade diminuída. Não configure o valor como false porque diminuir a capacidade de pods kube-system pode 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, execute ibmcloud 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 tamanho minSize: <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 tamanho min não aciona automaticamente um aumento de capacidade. O tamanho do min é 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=: Quando true, o autoscaler do cluster pode dimensionar seu pool de trabalhadores. Quando false, 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 no ConfigMap. 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 default não está ativado, com um valor max de 2 e um valor min de 1.