Container Service for Kubernetes oferece suporte ao Advanced Horizontal Pod Autoscaler (AHPA). O AHPA analisa dados históricos para prever a demanda futura de recursos e ajusta dinamicamente o número de réplicas de pods. Assim, escala horizontalmente e pré-aquece os recursos antes dos picos de tráfego, melhorando a capacidade de resposta e a estabilidade do sistema. Além disso, reduz a escala dos recursos em períodos de baixa demanda para diminuir custos.
Pré-requisitos
Você possui um cluster gerenciado ACK ou um cluster ACK Serverless. Para mais informações, consulte Criar um cluster gerenciado ACK ou Criar um cluster.
O Managed Service for Prometheus deve estar ativado e ter pelo menos sete dias de dados históricos da aplicação coletados, como uso de CPU e memória. Para saber como ativá-lo, consulte Acessar e configurar o Managed Service for Prometheus.
Etapa 1: Instalar o AHPA Controller
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster. Em seguida, no painel de navegação à esquerda, clique em Components and Add-ons.
Na página Add-ons, localize o componente AHPA Controller. Clique em Install no cartão do componente e siga as instruções na tela para concluir a instalação.
Etapa 2: Configurar a fonte de dados do Prometheus
Faça login no console do ARMS.
No painel de navegação à esquerda, escolha .
Na parte superior da página Instances, selecione a região da instância do Prometheus e clique no nome da instância (igual ao nome do cluster ACK).
-
Na página Settings, na seção HTTP API Address (Grafana Read Address), anote os valores dos seguintes campos:
(Opcional) Se a autenticação baseada em token estiver ativada, anote o token de acesso.
Visualize e anote o endpoint de Internal Network (URL do Prometheus).
-
Defina a URL de consulta do Prometheus no cluster ACK.
-
Crie um arquivo chamado
application-intelligence.yamlcom o seguinte conteúdo.prometheusUrl: Endpoint do Managed Service for Prometheus.token: Token de acesso ao Prometheus.
apiVersion: v1 kind: ConfigMap metadata: name: application-intelligence namespace: kube-system data: prometheusUrl: "http://cn-hangzhou-intranet.arms.aliyuncs.com:9443/api/v1/prometheus/da9d7dece901db4c9fc7f5b9c40****/158120454317****/cc6df477a982145d986e3f79c985a****/cn-hangzhou" token: "eyJhxxxxx"NotaPara visualizar o painel do AHPA no Managed Service for Prometheus, configure também os seguintes campos neste ConfigMap:
Para mais informações, consulte Ativar o painel do Prometheus para AHPA.
-
Execute o comando a seguir para implantar o
application-intelligence.kubectl apply -f application-intelligence.yaml
-
Etapa 3: Implantar um serviço de teste
O serviço de teste inclui um Deployment chamado fib-deployment, um Service chamado fib-svc e um gerador de carga chamado fib-loader para simular flutuações de tráfego. Implante também um recurso HorizontalPodAutoscaler (HPA) para estabelecer uma linha de base de comparação com o AHPA.
Crie um arquivo chamado demo.yaml com o seguinte conteúdo.
apiVersion: apps/v1
kind: Deployment
metadata:
name: fib-deployment
namespace: default
annotations:
k8s.aliyun.com/eci-use-specs: "1-2Gi"
spec:
replicas: 1
selector:
matchLabels:
app: fib-deployment
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: fib-deployment
spec:
containers:
- image: registry.cn-huhehaote.aliyuncs.com/kubeway/knative-sample-fib-server:20200820-171837
imagePullPolicy: IfNotPresent
name: user-container
ports:
- containerPort: 8080
name: user-port
protocol: TCP
resources:
limits:
cpu: "1"
memory: 2000Mi
requests:
cpu: "1"
memory: 2000Mi
---
apiVersion: v1
kind: Service
metadata:
name: fib-svc
namespace: default
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8080
selector:
app: fib-deployment
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: fib-loader
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: fib-loader
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: fib-loader
spec:
containers:
- args:
- -c
- |
/ko-app/fib-loader --service-url="http://fib-svc.${NAMESPACE}?size=35&interval=0" --save-path=/tmp/fib-loader-chart.html
command:
- sh
env:
- name: NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
image: registry.cn-huhehaote.aliyuncs.com/kubeway/knative-sample-fib-loader:20201126-110434
imagePullPolicy: IfNotPresent
name: loader
ports:
- containerPort: 8090
name: chart
protocol: TCP
resources:
limits:
cpu: "8"
memory: 16000Mi
requests:
cpu: "2"
memory: 4000Mi
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: fib-hpa
namespace: default
spec:
maxReplicas: 50
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: fib-deployment
targetCPUUtilizationPercentage: 50
---
Etapa 4: Implantar o AHPA
Para configurar uma política de dimensionamento, crie um recurso AdvancedHorizontalPodAutoscaler.
-
Crie um arquivo chamado
ahpa-demo.yamlcom o seguinte conteúdo.apiVersion: autoscaling.alibabacloud.com/v1beta1 kind: AdvancedHorizontalPodAutoscaler metadata: name: ahpa-demo spec: scaleStrategy: observer metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 40 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: fib-deployment maxReplicas: 100 minReplicas: 2 stabilizationWindowSeconds: 300 prediction: quantile: 95 scaleUpForward: 180 instanceBounds: - startTime: "2021-12-16 00:00:00" endTime: "2031-12-16 00:00:00" bounds: - cron: "* 0-8 ? * MON-FRI" maxReplicas: 15 minReplicas: 4 - cron: "* 9-15 ? * MON-FRI" maxReplicas: 15 minReplicas: 10 - cron: "* 16-23 ? * MON-FRI" maxReplicas: 20 minReplicas: 15A tabela a seguir descreve alguns parâmetros.
Parâmetro
Obrigatório
Descrição
scaleTargetRef
Sim
Especifica o Deployment de destino.
metrics
Sim
Configura as métricas de dimensionamento. Métricas suportadas: CPU, GPU, memória, QPS e RT.
target
Sim
Limiar de destino. Por exemplo,
averageUtilization: 40define a utilização alvo da CPU em 40%.scaleStrategy
Não
Define o modo de dimensionamento. Valor padrão:
observer.auto: O AHPA executa operações de dimensionamento.observer: O AHPA apenas observa, sem executar dimensionamento. Use este modo para validar o funcionamento do AHPA.proactive: Apenas a previsão proativa entra em vigor.reactive: Apenas o dimensionamento reativo entra em vigor.
maxReplicas
Sim
Número máximo de réplicas para expansão horizontal.
minReplicas
Sim
Número mínimo de réplicas para redução de escala.
stabilizationWindowSeconds
Não
Janela de estabilização para operações de dimensionamento. Evita flutuações rápidas no número de réplicas. Valor padrão: 300 segundos.
prediction.quantile
Sim
Quantil de previsão. Valores maiores resultam em previsões mais conservadoras. Intervalo válido: 0 a 100. Recomendado: 90 a 99. Padrão: 99.
prediction.scaleUpForward
Sim
Tempo necessário para um novo pod ficar
Ready. Também conhecido como tempo de cold start.instanceBounds
Não
Limites de réplicas para períodos específicos.
startTime: Hora de início.endTime: Hora de término.
instanceBounds.bounds.cron
Não
Configura uma tarefa agendada via expressão cron, que usa campos separados por espaços para definir horários. Exemplo:
- cron: " 0-8 ? MON-FRI"executa a tarefa a cada minuto das 00:00 às 08:59, de segunda a sexta-feira.Os campos de uma expressão cron são descritos a seguir. Para mais informações, consulte Tarefas agendadas Cron.
Campo
Obrigatório
Valores permitidos
Caracteres especiais
Minutos
Sim
0–59
* / , -
Horas
Sim
0–23
* / , -
Dia do mês
Sim
1–31
* / , - ?
Mês
Sim
1–12 ou JAN–DEC
* / , -
Dia da semana
Sim
0–6 ou SUN–SAT
* / , - ?
NotaOs campos Mês e Dia da semana não diferenciam maiúsculas de minúsculas. Por exemplo,
SUN,Sunesuntêm o mesmo efeito.Se o campo Dia da Semana não for configurado, o padrão será
*.-
Caracteres especiais:
*: Corresponde a todos os valores possíveis no campo./: Especifica um incremento para um valor.,: Lista valores enumerados.-: Especifica um intervalo.?: Indica ausência de valor específico. Use no campo Dia do mês ou Dia da semana quando o outro estiver especificado.
-
Execute o comando a seguir para criar a política de dimensionamento do AHPA.
kubectl apply -f ahpa-demo.yaml
Etapa 5: Visualizar os resultados da previsão
Para visualizar os resultados do dimensionamento preditivo do AHPA, ative o painel do Prometheus para AHPA.
Como a previsão requer sete dias de dados históricos, execute a aplicação de exemplo por sete dias após a implantação para ver os resultados. Caso tenha uma aplicação de produção existente, especifique-a diretamente no recurso AHPA.
Este exemplo usa o modo de dimensionamento observer (modo observer) para comparar os resultados de previsão do AHPA com os de uma política HPA padrão. Os resultados do HPA servem como linha de base para os requisitos reais de recursos da aplicação, permitindo observar se as previsões do AHPA atendem às expectativas.

-
Uso Real e Previsto de CPU: A linha verde representa o uso real de CPU gerenciado pelo HPA. A linha amarela representa o uso previsto pelo AHPA.
Curva amarela acima da verde indica capacidade de CPU prevista suficiente.
Curva amarela subindo antes da verde indica que o AHPA prepara os recursos necessários com antecedência.
-
Tendências de Pods: A linha verde representa o número real de pods dimensionados pelo HPA. A linha amarela representa a previsão do AHPA.
Uma curva amarela mais baixa pode indicar que o AHPA atinge o mesmo objetivo com menos pods.
A curva amarela é mais suave que a verde, indicando menor volatilidade nos eventos de dimensionamento gerenciados pelo AHPA, o que melhora a estabilidade do serviço.
Os resultados indicam que a tendência de dimensionamento está conforme o esperado. Se a tendência atender às expectativas após o período de observação, defina o modo de dimensionamento como auto para permitir que o AHPA gerencie o dimensionamento automaticamente.
Documentos relacionados
Para usar métricas de GPU do Managed Service for Prometheus no dimensionamento preditivo do AHPA, consulte Configurar o dimensionamento preditivo do AHPA com base em métricas de GPU.
Para visualizar os painéis de monitoramento fornecidos pelo Managed Service for Prometheus, consulte Ativar o painel do Prometheus para AHPA.