Preparando seu cluster para o ajuste automático de escala
Nuvem privada virtual Infraestrutura clássica
Com o complemento cluster-autoscaler, é possível escalar os conjuntos de trabalhadores em seu cluster Red Hat® OpenShift® on IBM Cloud® clássico ou VPC automaticamente para aumentar ou diminuir o número de nós do trabalhador no conjunto
de trabalhadores com base nas necessidades de dimensionamento de suas cargas de trabalho planejadas. O complemento do cluster-autoscaler baseia-se no Projeto Kubernetes Cluster-Autoscaler. Para uma lista de versões de complemento suportadas por versão de cluster, consulte Supported cluster add-on versões.
Não é possível ativar o escalador automático de cluster em conjuntos de trabalhadores que usam reservas.
Entendendo o dimensionamento automático
-
O escalador automático de cluster varre periodicamente o cluster para ajustar o número de nós do trabalhador nos conjuntos de trabalhadores que ele gerencia em resposta às suas solicitações de recurso de carga de trabalho e quaisquer configurações customizadas que você configurar, como intervalos de varredura.
-
A cada minuto, o escalador automático de cluster verifica as situações a seguir.
- Pods pendentes para aumentar a capacidade: um pod é considerado pendente quando existem recursos de cálculo insuficientes para planejar o pod em um nó do trabalhador. Quando o escalador automático de cluster detecta os pods pendentes, ele aumenta a capacidade de seus nós do trabalhador uniformemente entre as zonas para atender às solicitações de recursos da carga de trabalho.
- Nós do trabalhador subutilizados para reduzir a escala: por padrão, os nós do trabalhador que são executados com menos de 50% do total de recursos de cálculo que são solicitados por 10 minutos ou mais e que podem reagendar suas cargas de trabalho em outros nós do trabalhador são considerados subutilizados. Se o escalador automático de cluster detectar nós do trabalhador subutilizados, ele diminuirá a capacidade dos nós do trabalhador um de cada vez para que você tenha apenas os recursos de cálculo necessários. Se desejar, será possível customizar o limite de utilização de redução de escala padrão de 50% por 10 minutos.
-
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.
-
O escalador automático de cluster ajusta o número de nós do trabalhador considerando as solicitações de recursos definidas para as implementações, não o uso real do nó do trabalhador. Se seus pods e implementações não solicitarem quantias apropriadas de recursos, você deverá ajustar seus arquivos de configuração.
-
O escalador automático de cluster não pode ajustá-los para você. Além disso, lembre-se de que os nós de trabalho utilizam alguns recursos de computação para as funcionalidades básicas do cluster, complementos padrão e personalizados, e reservas de recursos.
-
Em geral, o escalador automático de cluster calcula o número de nós do trabalhador que seu cluster precisa para executar sua carga de trabalho. Aumentar ou reduzir a escala do cluster depende de muitos fatores, incluindo os apresentados a seguir.
- O tamanho mínimo e máximo do nó do trabalhador por zona que você configurou.
- Solicitações de recursos de pod pendentes e certos metadados associados à carga de trabalho, como antiafinidade, rótulos para colocar pods somente em determinados tipos ou orçamentos de disrupção de pod.
- Os conjuntos de trabalhadores que o autoscaler do cluster gerencia, possivelmente em diferentes zonas de um cluster multizona.
-
As versões anteriores do autoscaler de cluster dependiam apenas dos nós de trabalho existentes para agendar simulações. Por exemplo, se um pool de trabalhadores fosse reduzido para 0 nós, o autoscaler não teria informações sobre a capacidade ou os rótulos desse pool, o que significava que ele não poderia aumentar o tamanho do pool de trabalhadores novamente. Como resultado, não havia suporte para a escala até zero.
-
A partir da versão 2.0.0, o autoscaler cria um nó de modelo para cada pool de trabalho. Este modelo é usado para fornecer um modelo da CPU, memória, rótulos e taints alocáveis de um novo nó no pool.
-
Além disso, na versão 2.0.0, duas novas configurações opcionais estão disponíveis no
iks-ca-configmapkube-systemnamespace:OSReservedMemoryGieOSReservedCPUMili.- Esses valores representam a quantidade de CPU e memória que o sistema operacional reserva em cada nó de trabalho.
- A utilização do kernel não pode ser ajustada usando esses valores, pois eles já estão definidos.
- O dimensionador automático subtrai esses valores da capacidade do nó ao calcular os recursos alocáveis para simulações de agendamento.
- Por padrão, o autoscaler usa os valores recomendados reservados pelo sistema operacional, mas os usuários podem substituí-los para ajustar a capacidade que pode ser programada.
Para obter mais informações, consulte as Perguntas frequentes do Cluster Autoscaler do Kubernetes nas seções “Como funciona o aumento de escala? ” e “Como funciona a redução de escala? ”.
Quais são as práticas recomendadas para o dimensionamento automático?
- Aproveite o dimensionador automático de cluster ao máximo usando as estratégias a seguir para seu nó do trabalhador e sua implementação de carga de trabalho. Para obter mais informações, consulte o site Kubernetes Perguntas frequentes sobre o Cluster Autoscaler.
- Experimente o escalador automático de clusters com algumas cargas de trabalho de teste para obter uma boa ideia de como aumentar e reduzir o trabalho, talvez você queira configurar e quaisquer outros aspectos que você possa desejar, como superprovisionar nós do trabalhador ou limitar apps.
- Em seguida, limpe seu ambiente de teste e planeje-se para incluir esses valores customizados e configurações adicionais com uma nova instalação do dimensionador automático de cluster.
Posso mudar a forma como o aumento de escala e a redução de escala funcionam?
Sim, você pode personalizar as configurações ou usar outros recursos do Kubernetes para definir como o escalonamento para cima e para baixo funciona.
-
Para aumentar a escala, você pode personalizar os valores do autoscaler do cluster ConfigMap, como
scanInterval,expander,skipNodes, oumaxNodeProvisionTime. Revise maneiras de superprovisionar nós do trabalhador para que seja possível ampliar o dimensionamento dos nós do trabalhador antes que um conjunto do trabalhador tenha insuficiência de recursos. Também é possível configurar interrupções de orçamento de pod do Kubernetes e cortes de prioridade de pod para afetar o funcionamento da ampliação do dimensionamento. -
Para reduzir a escala, personalize os valores do autoscaler do cluster ConfigMap, como
scaleDownUnneededTime,scaleDownDelayAfterAdd,scaleDownDelayAfterDeleteouscaleDownUtilizationThreshold.
Posso aumentar o tamanho mínimo por zona para acionar o aumento de escala do cluster para esse tamanho?
Não, 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
minSizecomo4por 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.
Como esse comportamento se difere de conjuntos de trabalhadores que não são gerenciados pelo escalador automático de cluster?
Quando você cria um conjunto de trabalhadores, você especifica quantos nós do trabalhador por zona ele terá. O conjunto de trabalhadores mantém esse número de nós do trabalhador até você redimensionar ou rebalancear. O conjunto de trabalhadores não inclui nem remove nós do trabalhador para você. Se você tiver mais pods do que pode ser planejado, os pods permanecerão no estado pendente até que você redimensione o conjunto de trabalhadores. Quando você ativa o escalador automático de cluster para um conjunto de trabalhadores, a capacidade dos nós do trabalhador é aumentada ou diminuída em resposta às suas configurações de especificação de pod e solicitações de recurso. Não é necessário redimensionar ou rebalancear o conjunto de trabalhadores manualmente.
Como funciona o dimensionamento automático da GPU?
O escalonamento automático de nós de trabalho de GPU é compatível somente com a versão do escalonador automático de cluster 1.2.4 e posterior e somente com as variantes de nó de trabalho de GPUs NVIDIA. O aumento de escala ocorre quando um
pod entra em estado pendente devido à escassez de recursos da GPU. Em seguida, o autoscaler amplia o cluster adicionando mais nós. A redução de escala ocorre quando a utilização fica abaixo do valor configurado scaleDownGPUUtilizationThreshold.
Quando isso acontece, o nó é considerado para redução de escala.
É possível dimensionar automaticamente diversos conjuntos do trabalhador ao mesmo tempo?
Sim, depois de instalar o escalador automático de cluster, é possível escolher quais conjuntos de trabalhadores dentro do cluster para escalar automaticamente no configmap. É possível executar apenas um escalador automático por cluster. Crie e ative o ajuste automático de escala em conjuntos de trabalhadores diferentes do conjunto de trabalhadores padrão, pois o conjunto de trabalhadores padrão possui componentes do sistema que podem evitar a diminuição automática de capacidade.
Como é possível ter certeza de que o ajustador automático de escala do cluster responde aos recursos de que meu app precisa?
O escalador automático de cluster escala o cluster em resposta às solicitações de recursos da carga de trabalho. Sendo assim, especifique solicitações de recursos para todas as implementações, pois as solicitações de recursos são aquilo que o escalador automático de cluster usa para calcular quantos nós do trabalhador são necessários para executar a carga de trabalho. Tenha em mente que a auto-inicialização é baseada no uso de cálculo que seu pedido de configurações de carga de trabalho e não considera outros fatores, como custos da máquina.
É possível reduzir o dimensionamento de um conjunto do trabalhador para 0 (zero) nós?
Sim! A partir da versão do complemento Cluster 2.0.0 Autoscaler, você pode reduzir pools de trabalhadores específicos para zero nós.
- Por que isso é útil?
- Reduzir para zero ajuda a economizar custos quando não há cargas de trabalho em execução. O autoscaler traz os nós de volta automaticamente quando necessário.
- Como ele funciona?
- Quando não há pods para executar, o autoscaler pode reduzir o pool de trabalhadores para 0 nós. Se novos pods precisarem de recursos, o autoscaler redimensiona automaticamente o pool.
- O que você precisa fazer?
-
- Verifique a versão do seu complemento e certifique-se de que está usando v2.0.0 ou posterior.
-
- Defina
minSize = 0para o pool de trabalhadores na sua configuração do autoscaler. Se você tiver ALBs públicos habilitados, definaminSize = 2por zona para alta disponibilidade.
- Defina
- Qual é o requisito de quorum do cluster?
- Observe que o cluster inteiro não pode ser reduzido a zero. Um número mínimo de nós deve permanecer ativo para manter o cluster saudável e manter etcd o quorum. Se esse quórum for atingido, você poderá reduzir outros pools de trabalhadores a zero.
É possível otimizar minhas implementações para o dimensionamento automático?
Sim, é possível incluir diversos recursos do Kubernetes em sua implementação para ajustar como o dimensionador automático de cluster considera suas solicitações de recurso para o dimensionamento.
- Contamine seu conjunto de trabalhadores para permitir que apenas as implementações ou os pods com a tolerância correspondente sejam implementados em seu conjunto de trabalhadores.
- Inclua um rótulo em seu conjunto de trabalhadores diferente do conjunto de trabalhadores padrão. Esse rótulo é usado em sua configuração de implementação para especificar
nodeAffinityounodeSelector, o que limita as cargas de trabalho que podem ser implementadas nos nós do trabalhador no conjunto de trabalhadores rotulados. - Use orçamentos de disrupção de pod para evitar replanejamento ou exclusões inesperadas dos pods.
- Se você estiver usando a prioridade de pod, será possível editar o corte de prioridade para mudar de quais tipos de acionador de prioridade será feito o aumento de escala. Por padrão, o limite de prioridade é zero (
0).
É possível usar contaminações e tolerâncias com conjuntos do trabalhador com dimensionamento automático?
Sim, mas certifique-se de aplicar contaminações no nível do conjunto de trabalhadores para que todos os nós do trabalhador existentes e futuros obtenha a mesma contaminação. Em seguida, deve-se incluir uma tolerância correspondente na configuração de carga de trabalho para que essas cargas de trabalho sejam planejadas para o conjunto de trabalhadores escalados automaticamente com a contaminação correspondente. Tenha em mente que, se você implementar uma carga de trabalho não tolerada pelo conjunto de trabalhadores contaminados, os nós do trabalhador não serão considerados para o aumento de capacidade e mais nós do trabalhador poderão ser solicitados, mesmo que o cluster tenha capacidade suficiente. No entanto, o conjunto de trabalhadores contaminados ainda será identificado como subutilizado se eles tiverem menos do que o limite (por padrão 50%) de seus recursos utilizados e, assim, serão considerados para a diminuição de capacidade.
Preparação de clusters para escalonamento automático
Antes de instalar o complemento de escalador automático de cluster da IBM Cloud, é possível configurar seu cluster para preparar o cluster para ajuste automático de escala.
O complemento do escalador automático do cluster não é suportado para os nós do trabalhador bare metal.
-
Antes de iniciar, consulte Instalar a CLI e os plug-ins necessários.
- IBM Cloud CLI (
ibmcloud) - Plug-in do IBM Cloud Kubernetes Service (
ibmcloud oc) - Plug-in do IBM Cloud Container Registry (
ibmcloud cr) - Kubernetes (
kubectl)
- IBM Cloud CLI (
-
Confirme se suas credenciais do IBM Cloud Identity and Access Management estão armazenadas no cluster. O ajustador automático de escala usa esse segredo para autenticar credenciais. Se o segredo estiver ausente, crie-o reconfigurando credenciais.
oc get secrets -n kube-system | grep storage-secret-store -
Planeje-se para escalar automaticamente um conjunto de trabalhadores diferente do conjunto de trabalhadores
default, pois o conjunto de trabalhadoresdefaulttem componentes do sistema que podem evitar a reduzir a escala automaticamente. Inclua um rótulo para o conjunto de trabalhadores para poder configurar a afinidade do nó para as cargas de trabalho que você deseja implementar no conjunto de trabalhadores com o ajuste automático de escala ativado. Por exemplo, seu rótulo pode serapp: nginx. Escolha a partir das opções a seguir:- Crie um conjunto de trabalhadores de VPC ou clássico diferente do conjunto de trabalhadores
defaultcom o rótulo que você deseja usar com as cargas de trabalho para execução no conjunto de trabalhadores escalado automaticamente. - Inclua o rótulo em um conjunto de trabalhadores existente diferente do conjunto de trabalhadores
default.
- Crie um conjunto de trabalhadores de VPC ou clássico diferente do conjunto de trabalhadores
-
Confirme se o seu conjunto de trabalhadores tem os rótulos necessários para o ajuste automático de escala. Na saída, você vê o rótulo
ibm-cloud.kubernetes.io/worker-pool-idnecessário e o rótulo que você criou anteriormente para a afinidade de nó. Se você não vir essas etiquetas, adicione um pool de trabalhadores e, em seguida, adicione sua etiqueta para a afinidade de nós.ibmcloud oc worker-pool get --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID | grep LabelsExemplo de saída de um conjunto de trabalhadores com o rótulo.
Labels: ibm-cloud.kubernetes.io/worker-pool-id=a1aa111111b22b22cc3c3cc444444d44-4d555e5 -
Contamine os conjuntos de trabalhadores que você deseja escalar automaticamente para que o conjunto de trabalhadores não aceite cargas de trabalho, exceto aquelas a serem executadas no conjunto de trabalhadores escalado automaticamente. É possível aprender mais sobre contaminações e tolerâncias na documentação do Kubernetes da comunidade. Como exemplo, é possível configurar uma contaminação de
use=autoscale:NoExecute. Neste exemplo, a contaminaçãoNoExecutedespeja os pods que não têm tolerância correspondente a essa contaminação.
Próximas etapas
Depois de preparar seu cluster, instale o complemento do autoscaler de cluster.