O Advanced Horizontal Pod Autoscaler (AHPA) prevê a carga futura com base em métricas históricas como RPS, concorrência, CPU e memória, e planeja o dimensionamento com antecedência para reduzir o atraso no dimensionamento. O AHPA também permite definir o número máximo e mínimo de réplicas de pod por período de tempo. Com uma expressão Cron, você pode especificar esse intervalo de réplicas para janelas de tempo específicas.
Pré-requisitos
O Knative está implantado no seu cluster. Para mais informações, consulte Implantar e gerenciar componentes do Knative.
Etapa 1: Configurar métricas de dimensionamento com o AHPA
Use o arquivo YAML a seguir para criar um arquivo de configuração do AHPA e implantá-lo no seu cluster.
YAML
" commentTypeId="40" timestamp="2024-12-14T17:39:13+08:00" authorId="32557" uuid="b9b20be9-2f64-473e-b772-5b5940ff9a3d">apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: AdvancedHorizontalPodAutoscalerTemplate
metadata:
name: ahpa-demo
spec:
metrics:
- type: Resource
resource:
name: rps
target:
type: Utilization
averageUtilization: 10 # The current threshold. A value of 10 indicates that the target RPS utilization threshold is 10.
maxReplicas: 50 # Defines the maximum number of pod replicas as 50.
minReplicas: 0 # Defines the minimum number of pod replicas as 0.
prediction:
quantile: 95 # Indicates that predictions use a 95% confidence level.
scaleUpForward: 180 # Indicates that the forward prediction time range is 180 seconds.
# Within the time range from 2023-06-01 00:00:00 to 2123-06-01 00:00:00, the number of pod replicas is limited by the maximum and minimum number of replicas defined in AHPAT.
instanceBounds:
- startTime: "2023-06-01 00:00:00"
endTime: "2123-06-01 00:00:00"
bounds:
# During the 0-6 hour period, the minimum number of replicas is 0 and the maximum number of replicas is 50.
- cron: '* 0-6 ? * *'
maxReplicas: 50
minReplicas: 0
# During the 7-9 hour period, the minimum number of replicas is 5 and the maximum number of replicas is 50.
- cron: '* 7-9 ? * *'
maxReplicas: 50
minReplicas: 5
# During the 10-16 hour period, the minimum number of replicas is 10 and the maximum number of replicas is 50.
- cron: '* 10-16 ? * *'
maxReplicas: 50
minReplicas: 10
# During the 17-23 hour period, the minimum number of replicas is 2 and the maximum number of replicas is 50.
- cron: '* 17-23 ? * *'
maxReplicas: 50
minReplicas: 2Parâmetro | Obrigatório | Descrição |
| Sim | Usado para configurar métricas de dimensionamento. São suportadas métricas de RPS, concorrência, CPU e memória. |
| Sim | O número máximo de réplicas de pod para scale-out. |
| Sim | O número mínimo de réplicas de pod para scale-in. |
| Não | Os limites do número de réplicas de pod para cada período de dimensionamento.
|
| Não | Os números mínimo e máximo de réplicas de pod para diferentes intervalos de tempo.
|
Descrição detalhada de cada campo em uma expressão Cron
A tabela a seguir descreve os campos de uma expressão Cron. Para mais informações, consulte Tarefas Cron.
Campo | Caracteres especiais | Obrigatório | Descrição |
Minutos | * / , - | Sim | Valores válidos: [0,59]. |
Horas | * / , - | Sim | Valores válidos: [0,23]. |
Dia do mês | * / , – ? | Sim | Valores válidos: [1,31]. |
Mês | * / , - | Sim | Valores válidos: [1,12] ou JAN~DEC. Nota Os valores no campo JAN~DEC não diferenciam maiúsculas de minúsculas. |
Dia da semana | * / , – ? | Não | Valores válidos: [0,6] ou SUN~SAT. Nota
|
Os caracteres em uma expressão Cron têm os seguintes significados:
Asterisco (*): todos os valores possíveis. Por exemplo,
*corresponde a todos os minutos e horas.Barra (/): tamanho de incremento. Por exemplo,
/5indica a cada 5 unidades de tempo.Vírgula (,): separador. Por exemplo,
1,3,5corresponde aos valores 1, 3 e 5.Hífen (-): intervalo. Por exemplo,
1-5corresponde de 1 a 5.Ponto de interrogação (?): usado apenas nos campos Dia do mês e Dia da semana para indicar que nenhum valor foi especificado.
Etapa 2: Criar um serviço Knative e especificar a política de dimensionamento do AHPA
Após configurar a política de dimensionamento, você pode usar essa política de dimensionamento agendado em um serviço Knative.
-
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
-
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Knative, clique na guia Services. Em Namespace, selecione default. Em seguida, clique em Create from Template, cole o exemplo YAML a seguir no modelo e clique em Create para criar um serviço chamado helloworld-go-demo.
YAML
" commentTypeId="40" timestamp="2024-12-14T17:39:30+08:00" authorId="32557" uuid="5b0f4bfc-f4a7-42a4-88f4-7d506db6ec36">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go-demo spec: template: metadata: annotations: autoscaling.knative.dev/class: ahpa.autoscaling.knative.dev # Specifies the AHPA autoscaling extension. autoscaling.knative.dev.alibabacloud/ahpa-template: "ahpa-demo" # Note: When you modify the parameters of the AHPA template referenced here, the associated revision automatically updates the scaling policy. spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 env: - name: TARGET value: "Knative"Após a criação do serviço, obtenha e registre o endereço do gateway e o nome de domínio do serviço para uso na Etapa 3: Acessar o serviço.
Etapa 3: Acessar o serviço
Execute o comando a seguir para acessar o serviço.
# 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.comSaída esperada:
Hello Knative!(Opcional) Etapa 4: Verificar o resultado
Na página Monitoring Dashboard do Knative, você pode visualizar as tendências de dimensionamento das instâncias do serviço Knative. Para mais informações sobre o painel de monitoramento do Knative, consulte Visualizar o painel de monitoramento do serviço Knative.
-
Se uma aplicação Knative for dimensionada para zero e não tiver pods, o Managed Service for Prometheus não poderá coletar métricas dos pods, como concorrência de solicitações e solicitações por segundo. O console exibirá essas métricas somente após você acessar os pods da aplicação Knative.
-
Se uma aplicação Knative não for dimensionada para zero, o console exibirá métricas dos pods, como concorrência de solicitações e solicitações por segundo, sem que seja necessário acessar os pods.

Referências
Você pode configurar o dimensionamento automático com base na concorrência de pods e no RPS. Para mais informações, consulte Ativar o dimensionamento automático para lidar com flutuações de tráfego.