赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. ACK Serverless集群
  4. 操作指南
  5. 弹性伸缩
  6. HPA常见问题与诊断

HPA常见问题与诊断

  • 弹性伸缩
  • 发布于 2025-04-18
  • 0 次阅读
文档编辑
文档编辑

本文介绍使用节点自动伸缩功能时可能遇到的常见问题及解决方案。

问题一:HPA的监控数据current字段显示警告信息

当HPA的监控数据的current字段显示以下信息时,表示Controller Manager无法访问监控数据源获取对应的监控数据。

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)

原因如下:

  • 原因一:resource metrics数据源无法使用。

    先执行命令kubectl top pod检查是否返回数据。如果所有的Pod都无数据,请执行kubectl get apiservice检查当前提供resource metrics的数据源的情况。

    返回的示例数据如下。

    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

    如果v1beta1.metrics.k8s.io所对应的SERVICE不是kube-system/metrics-server,检查是否由于安装Prometheus Operator覆盖导致。如果是覆盖导致的问题,可以通过部署以下的YAML模板进行恢复。

    apiVersion: apiregistration.k8s.io/v1beta1
    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

    如果非上述问题,请参见相关文档metric-server的问题诊断部分。

  • 原因二:滚动发布或者扩容时无法获取数据。

    默认metrics-server的采集周期是1秒。刚扩容或更新完成后,metrics-server会有一段时间无法获取监控数据。请于扩容或更新后2秒左右进行查看。

  • 原因三:缺少request字段设置。

    HPA默认是通过usage/request作为利用率的数值,因此可以检查Pod的Resource字段中是否包含Request字段。

问题二:HPA在滚动发布时出现扩容多余Pod

社区的Controller Manager会在滚动发布的时候,对于没有监控数据的Pod,进行监控数据的补零操作,从而有一定的概率出现扩容出多余的Pod现象(多弹现象)。您可以通过升级ACK提供的最新版Metrics Server,并在Metrics Server的启动参数上开启开关防止多弹。

# 在Metrics Server的启动参数中加入以下选项。
--enable-hpa-rolling-update-skipped=true

问题三:HPA到达阈值不进行扩缩容

HPA的扩缩容的触发条件不是严格超过阈值或低于阈值,还需要额外考虑的是如果扩容或者缩容后,是否会再次触发缩容或者扩容,减少震荡的场景。

问题四:HPA采集周期如何配置?

对于版本号大于v0.2.1-b46d98c-aliyun的Metrics Server启动参数设置--metric-resolution,例如--metric-resolution=15s即可。

问题五:两个HPA,一个设置CPU规则,一个设置Memory规则。当CPU扩容后,Memory会触发缩容吗?

CPU扩容后,Memory会触发缩容,建议将两者配置在同一个HPA中。

问题六:当CPU规则和Memory规则配置在同一个HPA时,这时需要同时满足CPU规则和Memory规则,还是只需要满足一个规则就会扩容?

当两个metrics触发弹性的个数不同时,优先根据稳定性原则,弹出更多的副本或者在缩容时保留更多的副本。

相关文章

HPA常见问题与诊断 2025-04-18 14:49

本文介绍使用节点自动伸缩功能时可能遇到的常见问题及解决方案。

使用容器定时水平伸缩(CronHPA) 2025-04-18 14:49

如果您的应用资源使用率存在周期性变化,需要按照类似Crontab的策略定时对Pod进行扩缩容,您可以使用容器定时水平伸缩CronHPA(CronHorizontal Pod Autoscaler)实现Pod的定时扩缩容。CronHPA适用于业务流量有明显高峰时段、应用程序需要在特定时间执行任务等场景

使用容器水平伸缩(HPA) 2025-04-18 14:49

如果您想基于CPU使用率、内存使用率或其他自定义指标实现Pod的自动扩缩,建议您为业务容器开启水平伸缩HPA(Horizontal Pod Autoscaler)功能。HPA能够在业务负载急剧飙升时快速扩容多个Pod副本来缓解压力,也可以在业务负载变小时根据实际情况适当缩容以节省资源,无需您人为干预

基于阿里云Prometheus指标的容器水平伸缩 2025-04-18 14:49

HPA默认支持基于CPU和内存指标实现自动伸缩,可能无法满足更为复杂的运维场景。如果您需要将Prometheus收集的Custom Metrics与External Metrics转换为HPA可用的弹性伸缩指标,您可以参见本文获取监控数据并实现对应的伸缩配置,为应用提供更灵活、便捷的扩缩机制。 前提

基于阿里云组件指标的容器水平伸缩 2025-04-18 14:49

应对业务突发流量时,更精准的扩缩容能够提高响应速度,并进一步提升集群资源利用效率。本文介绍如何利用Kubernetes的外部指标接口(External Metrics)集成重要业务指标(例如HTTP请求率、Ingress QPS等),实现更自动化的伸缩策略。 本文将通过以下步骤,以创建名为Nginx

容器垂直伸缩(VPA) 2025-04-18 14:49

通过在ACK Serverless集群上部署安装VPA(vertical-pod-autoscaler),ACK Serverless可以提供垂直的容器伸缩的功能。VPA会基于Pod的资源使用情况自动为集群设置资源占用的限制,从而让集群将Pod调度到有足够资源的最佳节点上。VPA也会保持最初容器定义

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号