Se suas cargas de trabalho precisarem iniciar rapidamente, sem aguardar recursos de nó, use o add-on ack-autoscaling-placeholder. Ele fornece um buffer para o dimensionamento automático de nós. Quando os recursos do nó são insuficientes, a carga de trabalho real preempta os recursos reservados e inicia imediatamente; em seguida, o dimensionamento automático de nós expande o cluster.
Fluxo de trabalho
Pré-requisitos
O dimensionamento automático de nós está ativado no cluster do Container Service for Kubernetes (ACK) e há um pool de nós elástico configurado. Para mais informações, consulte Enable node autoscaling.
-
Um rótulo de nó foi definido no pool de nós elástico por meio do item de configuração Node Labels. Esse rótulo agenda as cargas de trabalho para o pool de nós especificado, facilitando a verificação do resultado. Para mais informações, consulte Create and manage node pools.
O procedimento deste tópico usa o rótulo
demo=yescomo exemplo.
Etapa 1: Implantar o add-on ack-autoscaling-placeholder e criar uma carga de trabalho de placeholder
O ack-autoscaling-placeholder oferece um buffer para o dimensionamento automático de nós, permitindo o provisionamento excessivo e o pré-aquecimento dos nós do cluster. Isso garante que as cargas de trabalho escalem horizontalmente com rapidez, sem precisar aguardar a criação e adição de novos nós ao cluster.
Este fluxo de trabalho consome recursos faturáveis:
Cada réplica de placeholder reserva a CPU e a memória solicitadas em uma instância ECS em execução. A capacidade reservada é faturada independentemente de uma carga de trabalho real consumi-la ou não.
Quando uma carga de trabalho real preempta um placeholder, o placeholder resultante em estado Pending aciona o dimensionamento automático de nós para adicionar instâncias ECS, cobradas conforme os preços de instância do pool de nós.
A capacidade total reservada corresponde às solicitações de uma única réplica multiplicadas pelo valor de
replicaCount. UmreplicaCountmaior multiplica o custo fixo.Para interromper a cobrança, defina
replicaCountcomo 0 ou desinstale o add-on ack-autoscaling-placeholder.
Para consultar os preços dos recursos utilizados neste fluxo de trabalho, veja ECS billing overview e Billing overview.
Faça login no ACK console. No painel de navegação à esquerda, clique em .
Na aba App Catalog, pesquise por ack-autoscaling-placeholder e clique em ack-autoscaling-placeholder.
Na página ack-autoscaling-placeholder, clique em Deploy.
-
Na aba Parameters, substitua o conteúdo de Parameter pelo seguinte exemplo YAML.
ImportanteDefina
resources.requestsda carga de trabalho de placeholder com base nos recursos alocáveis do nó de destino, e não na capacidade total do nó. Cada nó reserva recursos para o kubelet, o sistema operacional e o kube-proxy.Para verificar os recursos alocáveis, execute
kubectl describe node <node-name>e consulte os valores emAllocatable.No painel de criação, conclua a configuração conforme solicitado e clique em OK.
Após a criação da aplicação, na página , o status da aplicação será Deployed.
Etapa 2: Criar a PriorityClass da carga de trabalho real
-
Crie um arquivo chamado
priorityClass.yamlcom o seguinte exemplo YAML.apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: high-priority value: 1000000 # The priority value. It must be higher than the default priority of the placeholder pod in the previous step. globalDefault: false description: "High-priority class for production workloads only."ImportanteO valor de uma PriorityClass deve ser um número inteiro entre -2147483648 e 1000000000. Valores maiores são reservados para as PriorityClasses integradas de pods críticos do sistema.
O valor da PriorityClass da carga de trabalho real precisa ser superior ao valor da PriorityClass do placeholder (
-1neste tópico). Caso contrário, a carga de trabalho real não conseguirá preemptar o placeholder.Mantenha a prioridade do placeholder acima do limiar de prioridade de pods descartáveis do dimensionamento automático de nós. Se ficar abaixo desse limiar, o dimensionamento automático ignorará os pods de placeholder em estado Pending, nenhuma expansão será acionada e o buffer pré-aquecido nunca será reabastecido.
-
Implante a PriorityClass da carga de trabalho real.
kubectl apply -f priorityClass.yamlSaída esperada:
priorityclass.scheduling.k8s.io/high-priority created
Etapa 3: Criar a carga de trabalho real
-
Crie um arquivo chamado
workload.yamlcom o seguinte exemplo YAML.NotaSe a solicitação de
cpuoumemoryda carga de trabalho real exceder a solicitação da carga de trabalho de placeholder, a carga real não caberá nos recursos reservados. Consequentemente, ela não poderá iniciar no nó onde o placeholder está em execução, e a inicialização em nível de segundos descrita neste tópico não ocorrerá. -
Implante a carga de trabalho real.
kubectl apply -f workload.yamlSaída esperada:
deployment.apps/placeholder-test created
Verificar o resultado
Após a criação da carga de trabalho de placeholder ack-place-holder, o status do pod será Running.
-
Ao implantar a carga de trabalho real, a PriorityClass de alta prioridade permite que ela preempete os recursos reservados pela carga de trabalho de placeholder e inicie rapidamente. O pod da carga de trabalho de placeholder é então despejado e permanece no estado Pending devido à insuficiência de recursos no nó.
-
A carga de trabalho real placeholder-test é implantada rapidamente no nó onde a carga de trabalho de placeholder estava em execução.
O status do pod é Running e o número de reinicializações é 0, confirmando que a carga de trabalho está operando conforme esperado no nó de destino.
-
A carga de trabalho de placeholder é despejada e entra no estado Pending.
O agendamento do pod falha devido à mensagem
0/5 nodes are available: 1 Insufficient cpu, indicando que nenhum nó disponível no cluster atende às solicitações de recursos de CPU.
-
Como o dimensionamento automático de nós está ativado para o pool de nós, a insuficiência de recursos aciona uma expansão. A carga de trabalho de placeholder é então agendada para o novo nó expandido, e seu status passa a ser Running.
Próximas etapas
Para implementar expansão elástica em várias zonas em cenários de alta disponibilidade, consulte Enable rapid multi-zone auto scaling.