Serviços Knative podem apresentar picos de tráfego previsíveis, como horários de pico comercial, períodos noturnos de baixa atividade ou janelas de processamento em lote agendadas. O Advanced Horizontal Pod Autoscaler (AHPA) gerencia ambos os padrões: prevê a demanda com base em métricas históricas (RPS, concorrência, CPU e memória) e dimensiona proativamente. Além disso, instanceBounds permite definir limites mínimos e máximos de réplicas durante janelas de tempo específicas por meio de expressões cron.
Quando uma janela agendada começa, o AHPA dimensiona os pods até o mínimo definido. Ao término da janela, o AHPA reduz a escala. Esse comportamento torna o dimensionamento automático baseado em agenda útil para garantir um limite seguro de réplicas durante o horário comercial e permitir o dimensionamento completo para zero durante a noite.
Pré-requisitos
Antes de começar, verifique se você tem:
Knative implantado no cluster. Para mais informações, consulte Implantar o Knative.
AHPA implantado. Para mais informações, consulte Implantar o AHPA.
Etapa 1: Configure métricas de dimensionamento automático com o AHPA
Crie um recurso AdvancedHorizontalPodAutoscalerTemplate que defina as métricas de dimensionamento preditivo e os limites de réplicas agendados. Aplique o seguinte YAML ao cluster:
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: AdvancedHorizontalPodAutoscalerTemplate
metadata:
name: ahpa-demo
spec:
metrics:
- type: Resource
resource:
name: rps
target:
type: Utilization
averageUtilization: 10 # Scale out when RPS per pod exceeds 10
maxReplicas: 50 # Global ceiling
minReplicas: 0 # Global floor (allows scale-to-zero)
prediction:
quantile: 95 # Use 95th-percentile forecast for conservative scaling
scaleUpForward: 180 # Predict 180 seconds ahead to scale before demand arrives
instanceBounds:
- startTime: "2023-06-01 00:00:00" # Bounds active from this date
endTime: "2123-06-01 00:00:00" # Bounds active until this date
bounds:
- cron: '* 0-6 ? * *' # 12 AM – 6 AM: allow scale-to-zero
maxReplicas: 50
minReplicas: 0
- cron: '* 7-9 ? * *' # 7 AM – 9 AM: maintain at least 5 replicas
maxReplicas: 50
minReplicas: 5
- cron: '* 10-16 ? * *' # 10 AM – 4 PM: maintain at least 10 replicas
maxReplicas: 50
minReplicas: 10
- cron: '* 17-23 ? * *' # 5 PM – 11 PM: maintain at least 2 replicas
maxReplicas: 50
minReplicas: 2
Parâmetros principais:
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Métricas usadas para o dimensionamento automático. Valores suportados: RPS, concorrência, CPU e memória. |
|
|
Sim |
Número máximo de réplicas permitido globalmente. |
|
|
Sim |
Número mínimo de réplicas a manter globalmente. |
|
|
Não |
Intervalo de tempo em que o AHPA aplica limites de réplicas por período. Contém |
|
|
Não |
Limites de réplicas por período. Cada entrada especifica uma expressão |
Sintaxe de expressão cron
Uma expressão cron consiste em cinco campos separados por espaços. Para referência completa, consulte Expressões cron.
|
Campo |
Caracteres especiais |
Obrigatório |
Valores válidos |
|
Minutos |
|
Sim |
0–59 |
|
Horas |
|
Sim |
0–23 |
|
Dia do mês |
|
Sim |
1–31 |
|
Mês |
|
Sim |
1–12 ou JAN–DEC (sem distinção entre maiúsculas e minúsculas) |
|
Dia da semana |
|
Não |
0–6 ou SUN–SAT (sem distinção entre maiúsculas e minúsculas). Se omitido, aplica-se a qualquer dia da semana. |
Caracteres especiais:
*— corresponde a qualquer valor (por exemplo,*em Horas significa a cada hora)/— define um passo (por exemplo,/5significa a cada 5 unidades),— separa valores individuais (por exemplo,1,3,5)-— define um intervalo (por exemplo,1-5)?— indica um valor variável; válido apenas nos campos Dia do mês e Dia da semana
Etapa 2: Crie um serviço Knative e ative o AHPA
Associe o AHPA a um serviço Knative adicionando duas anotações ao manifesto do serviço. Ao atualizar o modelo do AHPA, o Knative cria automaticamente uma nova revisão.
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, localize o cluster e clique no nome dele. No painel de navegação à esquerda, escolha Applications > Knative.
-
Na aba Services, defina Namespace como default, clique em Create from Template, cole o YAML a seguir e clique em Create.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go-demo spec: template: metadata: annotations: autoscaling.knative.dev/class: ahpa.autoscaling.knative.dev # Use the AHPA autoscaler autoscaling.knative.dev.alibabacloud/ahpa-template: "ahpa-demo" # Reference the AHPA template from Step 1 spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 env: - name: TARGET value: "Knative"Após criar o serviço, anote o endereço do gateway e o nome de domínio. Essas informações serão necessárias na Etapa 3.

Etapa 3: Acessar o serviço
Execute o comando a seguir para enviar uma solicitação ao serviço. Substitua o nome de domínio e o endereço do gateway pelos valores anotados na Etapa 2.
# helloworld-go-demo.default.example.com is the default domain name of the service.
# alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com is the gateway address of the service.
curl -H "Host: helloworld-go-demo.default.example.com" http://alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com
Saída esperada:
Hello Knative!
Etapa 4 (Opcional): Verifique o dimensionamento agendado
Visualize as tendências de dimensionamento de pods nos Monitoring Dashboards da página do Knative. Para instruções de configuração, consulte Visualizar o painel de monitoramento do Knative.
O Managed Service for Prometheus não coleta métricas de RPS ou concorrência quando a contagem de pods é zero. Essas métricas ficam visíveis no console somente após o acesso aos pods da aplicação Knative. Com os pods em execução, as métricas aparecem no console sem etapas adicionais.

Próximos passos
Configure o dimensionamento automático com base em solicitações simultâneas e RPS sem limites de agendamento. Para mais informações, consulte Ativar o dimensionamento automático para suportar flutuações de tráfego.