Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Achieve container scaling in seconds by using ack-autoscaling-placeholder

Última atualização: Nov 03, 2026

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

image

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=yes como 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.

Importante

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. Um replicaCount maior multiplica o custo fixo.

  • Para interromper a cobrança, defina replicaCount como 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.

  1. Faça login no ACK console. No painel de navegação à esquerda, clique em Marketplace > Marketplace.

  2. Na aba App Catalog, pesquise por ack-autoscaling-placeholder e clique em ack-autoscaling-placeholder.

  3. Na página ack-autoscaling-placeholder, clique em Deploy.

  4. Na aba Parameters, substitua o conteúdo de Parameter pelo seguinte exemplo YAML.

    Importante

    Defina resources.requests da 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 em Allocatable.

    Visualizar o exemplo YAML

    nameOverride: ""
    fullnameOverride: ""
    ##
    priorityClassDefault:
      enabled: true
      name: default-priority-class   # The default priority is low.
      value: -1
    ##
    deployments:
       - name: ack-place-holder
         replicaCount: 1
         containers:
           - name: placeholder
             image: registry-vpc.cn-shenzhen.aliyuncs.com/acs/pause:3.1
             pullPolicy: IfNotPresent
             resources:
               requests:
                 cpu: 4            # Reserves 4 vCPUs and 8 GiB of memory.
                 memory: 8Gi
         imagePullSecrets: {}
         annotations: {}
         nodeSelector:        # Node selector. Must match the labels of the elastic node pool.
           demo: "yes"  
         tolerations: []
         affinity: {}
         labels: {}

    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 Applications > Helm, o status da aplicação será Deployed.

Etapa 2: Criar a PriorityClass da carga de trabalho real

  1. Crie um arquivo chamado priorityClass.yaml com 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."
    Importante
    • O 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 (-1 neste 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.

  2. Implante a PriorityClass da carga de trabalho real.

    kubectl apply -f priorityClass.yaml

    Saída esperada:

    priorityclass.scheduling.k8s.io/high-priority created

Etapa 3: Criar a carga de trabalho real

  1. Crie um arquivo chamado workload.yaml com o seguinte exemplo YAML.

    Visualizar o exemplo YAML

    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: placeholder-test
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeSelector:    # Node selector. Must match the labels of the elastic node pool.
            demo: "yes"
          priorityClassName: high-priority     # Set this to the name of the PriorityClass configured in the previous step.
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 
            ports:
            - containerPort: 80
            resources:       
              requests:      
                cpu: 3         # The resource requests of the actual workload. Must not exceed the cpu request of the placeholder workload (4).
                memory: 5Gi    # Must not exceed the memory request of the placeholder workload (8Gi).
    Nota

    Se a solicitação de cpu ou memory da 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á.

  2. Implante a carga de trabalho real.

    kubectl apply -f workload.yaml

    Saída esperada:

    deployment.apps/placeholder-test created

Verificar o resultado

  1. Após a criação da carga de trabalho de placeholder ack-place-holder, o status do pod será Running.

  2. 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.

  3. 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.