Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Workload scaling FAQ

Última atualização: Aug 28, 2026

Resolva problemas comuns de HPA e CronHPA, incluindo falhas na obtenção de métricas, dimensionamento excessivo e comportamento de limiar.

Sumário

Por que o campo current nas métricas do HPA aparece como unknown?

Quando o campo current do HPA exibe unknown, o kube-controller-manager não consegue acessar a fonte de dados de métricas, causando falha no dimensionamento do HPA.

Name:                                                  kubernetes-tutorial-deployment
Namespace:                                             default
Labels:                                                <none>
Annotations:                                           <none>
CreationTimestamp:                                     Mon, 10 Jun 2019 11:46:48  0530
Reference:                                             Deployment/kubernetes-tutorial-deployment
Metrics:                                               ( current / target )
  resource cpu on pods  (as a percentage of request):  <unknown> / 2%
Min replicas:                                          1
Max replicas:                                          4
Deployment pods:                                       1 current / 0 desired
Conditions:
  Type           Status  Reason                   Message
  ----           ------  ------                   -------
  AbleToScale    True    SucceededGetScale        the HPA controller was able to get the target's current scale
  ScalingActive  False   FailedGetResourceMetric  the HPA was unable to compute the replica count: unable to get metrics for resource cpu: unable to fetch metrics from resource metrics API: the server is currently unable to handle the request (get pods.metrics.k8s.io)
Events:
  Type     Reason                   Age                      From                       Message
  ----     ------                   ----                     ----                       -------
  Warning  FailedGetResourceMetric  3m3s (x1009 over 4h18m)  horizontal-pod-autoscaler  unable to get metrics for resource cpu: unable to fetch metrics from resource metrics API: the server is currently unable to handle the request (get pods.metrics.k8s.io)

Causa 1: A fonte de dados de métricas de recursos está indisponível

Execute kubectl top pod para verificar se há retorno de dados. Caso nenhum pod retorne dados, execute kubectl get apiservice para verificar o status da fonte de dados Resource Metrics. Exemplo de saída:

Saída de exemplo

NAME                                   SERVICE                      AVAILABLE   AGE
v1.                                    Local                        True        29h
v1.admissionregistration.k8s.io        Local                        True        29h
v1.apiextensions.k8s.io                Local                        True        29h
v1.apps                                Local                        True        29h
v1.authentication.k8s.io               Local                        True        29h
v1.authorization.k8s.io                Local                        True        29h
v1.autoscaling                         Local                        True        29h
v1.batch                               Local                        True        29h
v1.coordination.k8s.io                 Local                        True        29h
v1.monitoring.coreos.com               Local                        True        29h
v1.networking.k8s.io                   Local                        True        29h
v1.rbac.authorization.k8s.io           Local                        True        29h
v1.scheduling.k8s.io                   Local                        True        29h
v1.storage.k8s.io                      Local                        True        29h
v1alpha1.argoproj.io                   Local                        True        29h
v1alpha1.fedlearner.k8s.io             Local                        True        5h11m
v1beta1.admissionregistration.k8s.io   Local                        True        29h
v1beta1.alicloud.com                   Local                        True        29h
v1beta1.apiextensions.k8s.io           Local                        True        29h
v1beta1.apps                           Local                        True        29h
v1beta1.authentication.k8s.io          Local                        True        29h
v1beta1.authorization.k8s.io           Local                        True        29h
v1beta1.batch                          Local                        True        29h
v1beta1.certificates.k8s.io            Local                        True        29h
v1beta1.coordination.k8s.io            Local                        True        29h
v1beta1.events.k8s.io                  Local                        True        29h
v1beta1.extensions                     Local                        True        29h
...
[v1beta1.metrics.k8s.io                 kube-system/metrics-server   True        29h]
...
v1beta1.networking.k8s.io              Local                        True        29h
v1beta1.node.k8s.io                    Local                        True        29h
v1beta1.policy                         Local                        True        29h
v1beta1.rbac.authorization.k8s.io      Local                        True        29h
v1beta1.scheduling.k8s.io              Local                        True        29h
v1beta1.storage.k8s.io                 Local                        True        29h
v1beta2.apps                           Local                        True        29h
v2beta1.autoscaling                    Local                        True        29h
v2beta2.autoscaling                    Local                        True        29h

Se o API Service para v1beta1.metrics.k8s.io não for kube-system/metrics-server, o Prometheus Operator pode tê-lo sobrescrito. Restaure-o implantando este YAML:

apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
  name: v1beta1.metrics.k8s.io
spec:
  service:
    name: metrics-server
    namespace: kube-system
  group: metrics.k8s.io
  version: v1beta1
  insecureSkipTLSVerify: true
  groupPriorityMinimum: 100
  versionPriority: 100

Se esse não for o problema, acesse Operations > Add-ons do cluster e verifique se o metrics-server está instalado.

Causa 2: As métricas não podem ser obtidas durante uma atualização contínua ou expansão

Após a criação ou atualização de um pod, o metrics-server precisa de tempo para coletar as métricas. Aguarde cerca de dois minutos antes de verificar novamente.

Causa 3: O campo request não está configurado

Por padrão, o HPA usa actual utilization/request como valor de utilização. Verifique se o campo resource do pod contém o campo request.

Causa 4: O nome da métrica está incorreto

Verifique se o nome da métrica e a capitalização estão corretos. Por exemplo, escrever cpu como CPU faz com que o campo current exiba unknown.

Solução de problemas de falhas no dimensionamento do HPA

Quando a obtenção de métricas falha, o campo current do HPA exibe unknown e o dimensionamento é interrompido. Consulte o Node Autoscaling FAQ para solucionar o problema.

Por que o HPA cria pods extras durante uma atualização contínua?

Durante uma atualização contínua, o controller-manager relata valores zero para pods sem métricas, o que pode levar o HPA a criar pods em excesso (dimensionamento excessivo). Use as configurações a seguir para evitar isso.

Configuração no nível do cluster

Atualize o metrics-server do ACK para a versão mais recente e ative este parâmetro de inicialização.

Essa alteração afeta todos os workloads no cluster.

# Add the following option to the metrics-server startup parameters.
--enable-hpa-rolling-update-skipped=true  

Configuração no nível do workload

Para evitar dimensionamento excessivo em um workload específico, use um dos métodos a seguir.

  • Pause a avaliação do HPA durante atualizações contínuas adicionando esta anotação ao modelo de pod:

    # Add this annotation to spec.template.metadata.annotations of the workload to temporarily pause HPA evaluation during a rolling update.
    HPARollingUpdateSkipped: "true"

    Código de exemplo

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment-basic
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template: 
        metadata:
          labels:
            app: nginx
          annotations:
            HPARollingUpdateSkipped: "true"  # Skips the HPA evaluation during a rolling update.
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80
  • Defina um período de aquecimento após o início da aplicação adicionando esta anotação ao modelo de pod:

    # Add this annotation to spec.template.metadata.annotations of the workload to skip a set warm-up period.
    HPAScaleUpDelay: 3m # 3m is an example. Set the period based on your requirements.

    Código de exemplo

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment-basic
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template: 
        metadata:
          labels:
            app: nginx
          annotations:
            HPAScaleUpDelay: 3m  # 'm' stands for minutes. This setting makes the HPA effective 3 minutes after the pod is created. Supported units are s (seconds) and m (minutes).
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80

Por que o HPA não dimensiona quando um limiar é atingido?

O HPA não dimensiona baseando-se apenas na ultrapassagem de um limiar de CPU ou memória. Ele também verifica se uma ação de dimensionamento seria imediatamente revertida, evitando oscilações constantes.

Por exemplo, com um limiar de expansão de 80% e dois pods usando 70% de CPU cada, o HPA não reduzirá a escala porque diminuir para um pod elevaria a CPU acima de 80%, acionando imediatamente uma nova expansão.

Como configurar o intervalo de coleta de métricas do HPA

Para versões do metrics-server superiores a v0.2.1-b46d98c-aliyun, defina o parâmetro de inicialização --metric-resolution. Por exemplo: --metric-resolution=15s.

O CronHPA é compatível com o HPA? Como funciona?

Sim. No ACK, o CronHPA define seu scaleTargetRef para o HPA e dimensiona por meio dele, em vez de ajustar diretamente a contagem de réplicas de um Deployment. Isso evita conflitos entre os dois autoscalers. Consulte Enable collaboration between CronHPA and HPA.

Como evitar dimensionamento excessivo do HPA devido a picos iniciais de recursos

Aplicações em linguagens como Java podem apresentar picos de CPU e memória durante o aquecimento após o início do contêiner, acionando expansões desnecessárias do HPA. Para evitar isso, atualize o metrics-server do ACK para a versão 0.3.9.6 ou posterior e adicione uma anotação à especificação do pod. Consulte Upgrade the metrics-server component before you upgrade your cluster to v1.12.

Exemplo de Deployment com a anotação:

YAML de exemplo

## Example of a Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-basic
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
      annotations:
        HPAScaleUpDelay: 3m # 'm' stands for minutes. This setting makes the HPA effective 3 minutes after the pod is created. Supported units are s (seconds) and m (minutes).
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9 # Replace it with your exact <image_name:tags>.
        ports:
        - containerPort: 80 

Por que o HPA dimensionou quando o valor da métrica estava abaixo do limiar nos logs de auditoria?

Causa

O Horizontal Pod Autoscaler calcula o número desejado de réplicas com base na razão entre as métricas atuais e desejadas, usando a seguinte fórmula: desired number of replicas = ceil(current number of replicas × (current metric / desired metric)).

A contagem desejada de réplicas depende da contagem atual de réplicas, da métrica atual e da métrica desejada. Para métricas de recursos, o HPA obtém o sub-recurso scale (subResources) do objeto scaleTargetRef e converte o Selector do status do objeto scale em um labelselector para corresponder aos pods. Se os pods correspondentes não pertencerem todos ao objeto scaleTargetRef, a contagem de réplicas calculada pode estar incorreta (por exemplo, expandindo quando a métrica está abaixo do limiar).

Motivos comuns para uma contagem imprecisa de pods incluem:

  • Uma atualização contínua está em andamento.

  • Pods fora do objeto scaleTargetRef compartilham o mesmo rótulo. Verifique sua existência:

    kubectl get pods -n {namespace_name} -l {value_of_scale_subresource_status.selector}

Solução

O HPA pode controlar a ordem de redução de escala dos pods?

Não. O HPA ajusta apenas a contagem de réplicas, não quais pods serão encerrados. O controlador responsável (como um Deployment) determina a ordem de encerramento e o desligamento graceful.

No entanto, em ambientes mistos com tipos de nó como ECS, ACS e ECI, ou múltiplos node pools, use uma ResourcePolicy para controlar a prioridade de redução de escala — por exemplo, reduzir pods ECI antes de pods ECS. Consulte Customize elastic resource priority scheduling.

O que significam as unidades das métricas de utilização do HPA?

As métricas de uso são inteiros sem unidade ou inteiros em unidades m (1000m = 1). Por exemplo, 70000m equivale a 70.

O que fazer se a coluna target mostrar unknown após executar kubectl get hpa?

Para solucionar o problema:

  1. Execute kubectl describe hpa <hpa_name> para verificar o motivo da falha do HPA.

    • Se o campo Conditions indicar que AbleToScale é False, verifique se o Deployment está executando corretamente.

    • Se o campo Conditions indicar que ScalingActive é False, prossiga para a próxima etapa.

  2. Execute kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/". Se Error from server (NotFound): the server could not find the requested resource for retornado, verifique o status do alibaba-cloud-metrics-adapter.

    Se o alibaba-cloud-metrics-adapter estiver executando corretamente, verifique se a métrica do HPA está relacionada ao Ingress. Nesse caso, implante primeiro o componente SLS. Consulte Collect and analyze Nginx Ingress access logs.

  3. Verifique se as métricas do HPA foram inseridas corretamente. O valor de sls.ingress.route segue o formato <namespace>-<svc>-<port>.

    • namespace: O namespace do Ingress.

    • svc: O nome do Service do Ingress.

    • port: O nome da porta do Service do Ingress.

Como encontrar métricas suportadas pelo HPA

Consulte Métricas do HPA da Alibaba Cloud para obter a lista completa. Métricas comuns:

Métrica

Descrição

Parâmetro adicional

sls_ingress_qps

QPS para a rota de Ingress especificada.

sls.ingress.route

sls_alb_ingress_qps

QPS para a rota de ALB Ingress especificada.

sls.ingress.route

sls_ingress_latency_avg

Latência média de todas as requisições.

sls.ingress.route

sls_ingress_latency_p50

Latência no percentil 50 das requisições.

sls.ingress.route

sls_ingress_latency_p95

Latência no percentil 95 das requisições.

sls.ingress.route

sls_ingress_latency_p99

Latência no percentil 99 das requisições.

sls.ingress.route

sls_ingress_latency_p9999

Latência no percentil 99,99 das requisições.

sls.ingress.route

sls_ingress_inflow

Largura de banda de entrada do Ingress.

sls.ingress.route

Dimensionamento automático com formatos personalizados de log do Nginx Ingress

Para usar métricas de Ingress do SLS no dimensionamento horizontal de pods, consulte Scale pods based on Nginx Ingress metrics. A coleta de logs do Nginx Ingress para o SLS deve estar ativada no cluster.

  • O SLS é ativado por padrão durante a criação do cluster. Com as configurações padrão, painéis de logs de acesso e monitoramento do Nginx Ingress ficam disponíveis no console do SLS.

  • Caso tenha desativado o SLS durante a criação do cluster, reative-o e configure-o. Consulte Collect and analyze Nginx Ingress access logs.

  • Se você personalizou o formato de log do Nginx Ingress, atualize a seção processor_regex na configuração do CRD. O CRD AliyunLogConfig padrão corresponde apenas ao formato de log padrão do Ingress Controller. Consulte Collect container logs by using a DaemonSet-CRD.

Como obter a métrica de QPS sls_ingress_qps usando a CLI?

Obtenha a métrica sls_ingress_qps:

kubectl get --raw  "/apis/external.metrics.k8s.io/v1beta1/namespaces/*/sls_ingress_qps?labelSelector=sls.project={{SLS_Project}},sls.logstore=nginx-ingress"

{{SLS_Project}} é o nome do SLS Project do cluster ACK. Padrão: k8s-log-{{ClusterId}}, onde {{ClusterId}} é o ID do cluster.

Se este erro for retornado:

Error from server: {
    "httpCode": 400,
    "errorCode": "ParameterInvalid",
    "errorMessage": "key (slb_pool_name) is not config as key value config,if symbol : is  in your log,please wrap : with quotation mark \"",
    "requestID": "xxxxxxx"
}

Isso significa que não há dados disponíveis para a métrica, o que ocorre ao consultar uma métrica de ALB Ingress (como sls_alb_ingress_qps) sem um ALB Ingress configurado.

Se um resultado como este for retornado:

{
  "kind": "ExternalMetricValueList",
  "apiVersion": "external.metrics.k8s.io/v1beta1",
  "metadata": {},
  "items": [
    {
      "metricName": "sls_ingress_qps",
      "timestamp": "2025-02-26T16:45:00Z", 
      "value": "50",   # The QPS value
      "metricLabels": {
        "sls.project": "your-sls-project-name",
        "sls.logstore": "nginx-ingress"
      }
    }
  ]
}

Isso confirma que a métrica foi obtida. value representa o valor de QPS.

Falha ao baixar a imagem do alibaba-cloud-metrics-adapter

Sintoma

Ao atualizar o componente ack-alibaba-cloud-metrics-adapter para a versão 1.3.7, o download da imagem falha com o seguinte erro:

Failed to pull image "registry-<region-id>-vpc.ack.aliyuncs.com/acs/alibaba-cloud-metrics-adapter-amd64:v0.2.9-ba634de-aliyun".

Causa

Atualmente, o ack-alibaba-cloud-metrics-adapter não suporta atualizações in-place.

Solução

Para atualizar:

  1. Faça backup da configuração atual do componente.

  2. Desinstale a versão antiga do componente.

  3. Instale a versão mais recente usando a configuração salva no backup.

Importante

Durante esse processo, o dimensionamento dos objetos HPA relacionados é pausado porque a coleta de métricas é interrompida.