Todos os produtos
Search
Central de documentação

Container Compute Service:Scheduled scaling (CronHPA)

Última atualização: Sep 17, 2026

Para melhorar a utilização de recursos, reduzir custos e evitar desperdícios, o Container Compute Service (ACS) oferece o componente ack-kubernetes-cronhpa-controller, que dimensiona recursos automaticamente com base em cronogramas predefinidos. Este tópico descreve como usar o Cron Horizontal Pod Autoscaler (CronHPA) para dimensionar cargas de trabalho em um cluster ACS conforme um cronograma. Também explica como configurar a interação entre CronHPA e Horizontal Pod Autoscaler (HPA) sem conflitos.

Pré-requisitos

Informações básicas

O ack-kubernetes-cronhpa-controller é um controlador Kubernetes que dimensiona cargas de trabalho em um cluster com base em um cronograma semelhante ao crontab. É possível usar o CronHPA com qualquer objeto Kubernetes compatível com o sub-recurso scale, como Deployment ou StatefulSet. Para mais informações, visite o repositório kubernetes-cronhpa-controller.

A tabela a seguir descreve os parâmetros da configuração do CronHPA.

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
  namespace: default 
spec:
   scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: nginx-deployment-basic
   excludeDates:
   # exclude November 15th
   - "* * * 15 11 *"
   # exclude every Friday 
   - "* * * * * 5"
   jobs:
   - name: "scale-down"
     schedule: "30 */1 * * * *"
     targetSize: 1
   - name: "scale-up"
     schedule: "0 */1 * * * *"
     targetSize: 3
     runOnce: false

Parâmetro

Descrição

scaleTargetRef

scaleTargetRef especifica o objeto a ser dimensionado. Se os sub-recursos do objeto forem dimensionáveis, será possível ativar o CronHPA para ele.

excludeDates

O valor de excludeDates deve ser uma matriz de datas. Os jobs de dimensionamento não são executados nas datas especificadas em excludeDates.

Nota

A menor unidade de tempo que pode ser excluída é um Day.

O formato é " ", que representa "<Segundos> <Minutos> <Horas> <Dia do mês> <Mês> <Dia da semana>".

Por exemplo, para não executar jobs de dimensionamento em 15 de novembro, defina excludeDates com o seguinte valor:

excludeDates:
      - "* * * 15 11 *"

jobs

É possível definir vários jobs do CronHPA dentro de um único spec. Cada job pode ter os seguintes campos:

  • name: Os nomes distinguem os jobs do CronHPA. Portanto, o name de cada job deve ser exclusivo na configuração do CronHPA.

  • schedule: O cronograma de dimensionamento, semelhante a um crontab. O kubernetes-cronhpa-controller utiliza uma biblioteca Golang para suportar diversas regras. Para mais informações, consulte go-cron. O formato das expressões cron deve obedecer às regras abaixo. Caso contrário, não será possível criar as expressões.

    Crie expressões cron seguindo estas regras:

    Field name   | Mandatory?  | Allowed values  | Allowed special characters
          ----------   | ---------- | --------------  | --------------------------
          Seconds      | Yes        | 0-59            | * / , -
          Minutes      | Yes        | 0-59            | * / , -
          Hours        | Yes        | 0-23            | * / , -
          Day of month | Yes        | 1-31            | * / , - ?
          Month        | Yes        | 1-12 or JAN-DEC | * / , -
          Day of week  | Yes        | 0-6 or SUN-SAT  | * / , - ?
  • targetSize: A quantidade de pods para a qual você deseja dimensionar no horário agendado.

  • runOnce: Se você definir runOnce como true, o job será executado apenas uma vez e encerrará logo após essa execução.

Instale o controlador CronHPA

Instale o controlador CronHPA ack-kubernetes-cronhpa-controller usando um dos métodos a seguir.

  1. Faça login no console do ACS. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, clique em Add-ons.

  3. Na página Add-ons, clique na aba Applications. Localize ack-kubernetes-cronhpa-controller, clique em Install e, em seguida, clique em OK na caixa de diálogo exibida.

Nota

Caso o CronHPA não seja mais utilizado, desinstale o controlador. Para mais detalhes sobre como desinstalar o ack-kubernetes-cronhpa-controller, consulte Gerenciar add-ons.

Crie jobs do CronHPA

Antes de criar e executar jobs do CronHPA para sua aplicação, certifique-se de que o controlador CronHPA esteja funcionando normalmente no cluster e que exista apenas uma tarefa HPA criada para a aplicação. Para saber como permitir que CronHPA e HPA interajam sem conflitos, consulte Permitir que CronHPA e HPA interajam sem conflitos. Crie jobs do CronHPA usando um dos métodos abaixo:

Método 1: Crie um job durante a criação da aplicação

Na página Advanced do assistente de criação de aplicações, localize a seção Scaling. Selecione Enable ao lado de CronHPA. Para etapas detalhadas sobre a criação de aplicações, consulte Criar uma carga de trabalho stateless (Deployment) ou Criar uma carga de trabalho stateful (StatefulSet).

Se aparecer uma mensagem informando que o componente ack-kubernetes-cronhpa-controller não está instalado, clique em Install para instalá-lo.

O console ACK verifica automaticamente se o componente CronHPA está instalado. Caso não esteja, um botão Install será exibido. Após instalar o componente CronHPA, as configurações do job de dimensionamento agendado serão mostradas. A tabela a seguir descreve os parâmetros.

Parâmetro

Descrição

Job Name:

Insira um nome para o job do CronHPA. O nome de cada job deve ser exclusivo.

Desired Number of Replicas

Os pods replicados serão dimensionados para a quantidade desejada no horário agendado.

Scaling Schedule

Defina o cronograma de dimensionamento.

Para mais informações sobre como configurar o cronograma de um job CronHPA, consulte predefined-schedules.

Método 2: Crie um job para uma aplicação existente

O exemplo a seguir demonstra como criar um job do CronHPA para uma aplicação existente. Neste exemplo, utiliza-se uma aplicação stateless.

  1. Faça login no console do ACS. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, escolha Workloads > Deployments.

  3. Na página Deployments, localize a aplicação e clique em Details na coluna Actions.

  4. Clique na aba Pod Scaling e configure o job de dimensionamento agendado.

    • Se o componente CronHPA não estiver instalado, um botão Install será exibido. Clique em Install e prossiga para a próxima etapa.

    • Se o controlador CronHPA já estiver instalado, siga as etapas abaixo.

  5. Clique em Create à direita de CronHPA. Na caixa de diálogo Create, defina os parâmetros do job.

    A tabela a seguir descreve os parâmetros.

    Parâmetro

    Descrição

    Job Name

    Insira um nome para o job do CronHPA. O nome de cada job deve ser exclusivo.

    Desired Number of Replicas

    Os pods replicados serão dimensionados para a quantidade desejada no horário agendado.

    Scaling Schedule

    Defina o cronograma de dimensionamento. Para mais informações sobre como configurar o cronograma de um job CronHPA, consulte predefined-schedules.

Criar ou modifique jobs do CronHPA

  1. Siga as etapas em Criar jobs do CronHPA para acessar a página Pod Scaling.

  2. Na aba Pod Scaling, dentro da seção CronHPA, localize o job desejado e clique em Add or Modify Job na coluna Actions.

  3. Na caixa de diálogo Edit, clique em Add Task para criar um novo job ou clique em um job existente para modificá-lo. Ao terminar, clique em OK.

    O formulário de configuração do job inclui os seguintes campos: Job Name, Desired Number of Replicas e Scaling Schedule (que suporta cinco métodos: By Hour, By Day, By Week, By Month ou cron expression). Se selecionar cron expression, insira a expressão na caixa de entrada no formato: Seconds Minutes Hours Day-of-month Month Day-of-week (por exemplo, 1 2 3 4 * * significa 03:02:01 no dia 4 de cada mês).

    Nota

    É possível excluir um job do CronHPA. Na caixa de diálogo Edit, os jobs existentes aparecem como tags. Remova um job clicando no ícone de exclusão ao lado do nome dele. Para adicionar um novo job, insira um nome na caixa de entrada Job Name e clique em Add Job. Após fazer as alterações, clique em OK.

Modelos de CronHPA e HPA

CronHPA

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
spec:
   scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: nginx-deployment-basic
   jobs:
   - name: "scale-down"
     schedule: "30 */1 * * * *"
     targetSize: 1
   - name: "scale-up"
     schedule: "0 */1 * * * *"
     targetSize: 11	
	

HPA

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-deployment-basic-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment-basic
  minReplicas: 4
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50	
	

Permitir que CronHPA e HPA interajam sem conflitos

Tanto o CronHPA quanto o HPA atuam sobre cargas de trabalho, como Deployments ou StatefulSets. Se ambos forem usados simultaneamente para dimensionar a mesma carga de trabalho, podem ocorrer conflitos. Para resolver isso, o CronHPA permite usar o próprio HPA como objeto de dimensionamento, garantindo compatibilidade com seus recursos.

As configurações do CronHPA e do HPA indicam as seguintes informações:

  • Ambos utilizam o campo spec.scaleTargetRef para identificar o alvo do dimensionamento.

  • O CronHPA usa regras crontab em spec.jobs para agendar o dimensionamento das réplicas.

  • O HPA dispara atividades de dimensionamento com base no uso de recursos.

Quando ambos estão implantados, podem tentar dimensionar pods da mesma aplicação especificada por scaleTargetRef. Como operam de forma independente e sem conhecimento mútuo, os controladores dimensionam os pods separadamente, fazendo com que a atividade posterior sobrescreva a anterior.

Solução de compatibilidade entre CronHPA e HPA

Conforme mencionado, o conflito pode ser resolvido se o CronHPA tiver ciência do estado atual do HPA. Para isso, o ACK configura o scaleTargetRef no CronHPA para apontar diretamente para o objeto HPA, e não para a carga de trabalho final. Ao realizar uma operação de dimensionamento, o CronHPA primeiro localiza o verdadeiro scaleTargetRef através do objeto HPA e então ajusta a carga de trabalho com base nesse estado. Isso evita que os controladores se sobrescrevam e garante um dimensionamento consistente e previsível.

image

O modelo YAML a seguir mostra as configurações que permitem a interação sem conflitos entre CronHPA e HPA:

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
spec:
   scaleTargetRef:
      apiVersion: autoscaling/v1
      kind: HorizontalPodAutoscaler
      name:  nginx-deployment-basic-hpa
   jobs:
   - name: "scale-down"
     schedule: "30 */1 * * * *"
     targetSize: 1
     runOnce: false
   - name: "scale-up"
     schedule: "0 */1 * * * *"
     targetSize: 3
     runOnce: false

Com base na definição do CronHPA, um objeto CronHPA consegue determinar os valores de spec.minReplicas, spec.maxReplicas e status.desiredReplicas no HPA. Ele também conhece a contagem atual de réplicas da carga de trabalho especificada por spec.scaleTargetRef. O CronHPA interage com o HPA ajustando-o. Ele usa o maior valor entre sua contagem alvo de réplicas e a contagem atual para decidir se deve dimensionar a carga de trabalho ou aumentar o limite superior do HPA. Da mesma forma, usa o menor valor entre sua contagem alvo e a configuração do HPA para decidir se deve modificar o limite inferior do HPA.

A tabela a seguir descreve as regras que permitem a interação sem conflitos entre CronHPA e HPA.

HPA (min/max)

CronHPA

Deployment

Resultado do dimensionamento

Descrição

1/10

5

5

  • HPA (min/max): 1/10

  • Deployment: 5

Se o número de pods desejado pelo CronHPA for igual ao número atual, o CronHPA não altera os limites máximo e mínimo na configuração do HPA. Além disso, nenhuma atividade de dimensionamento é disparada.

1/10

4

5

  • HPA (min/max): 1/10

  • Deployment: 5

Quando o número de pods desejado pelo CronHPA é menor que o número atual, nenhuma atividade de dimensionamento ocorre.

1/10

6

5

  • HPA (min/max): 6/10

  • Deployment: 6

  • Se o número de pods desejado pelo CronHPA for maior que o número atual, o CronHPA adiciona pods até atingir a quantidade desejada.

  • Caso o número desejado pelo CronHPA ultrapasse o valor de minReplicas na configuração do HPA, o CronHPA altera o valor de minReplicas.

5/10

4

5

  • HPA (min/max): 4/10

  • Deployment: 5

  • Quando o número de pods desejado pelo CronHPA é menor que o número atual, nenhuma atividade de dimensionamento é disparada.

  • Se o número desejado pelo CronHPA for inferior ao valor de minReplicas na configuração do HPA, o CronHPA ajusta o valor de minReplicas.

5/10

11

5

  • HPA (min/max): 11/11

  • Deployment: 11

  • Se o número de pods desejado pelo CronHPA for maior que o número atual, o CronHPA adiciona pods até atingir a quantidade desejada.

  • Caso o número desejado pelo CronHPA exceda o valor de maxReplicas na configuração do HPA, o CronHPA altera o valor de maxReplicas.

A lista a seguir descreve os parâmetros da tabela:

  • HPA (min/max): As quantidades mínima e máxima de pods especificadas na configuração do HPA.

  • CronHPA: A quantidade desejada de pods especificada na configuração do CronHPA.

  • Deployment: O número de réplicas da aplicação antes do dimensionamento.

O CronHPA não altera diretamente o número de pods do Deployment. Em vez disso, ele aciona o HPA para realizar o dimensionamento. Essa abordagem resolve o conflito entre CronHPA e HPA.