赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 弹性容器实例 ECI
  4. 操作指南
  5. 弹性伸缩
  6. 使用容器水平伸缩(HPA)

使用容器水平伸缩(HPA)

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

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

前提条件

  • 容器服务 Serverless 版使用快速入门

  • 通过kubectl连接Kubernetes集群

通过容器服务控制台创建HPA应用

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

  2. 在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。

  3. 在集群管理页左侧导航栏,选择工作负载 > 无状态。

  4. 在无状态页面,单击使用镜像创建。

  5. 在创建页面,按照页面提示完成应用基本信息配置、容器配置、服务配置和伸缩配置,创建一个支持HPA的Deployment。

    具体步骤及配置项说明,请参见使用镜像创建无状态应用。下文仅介绍主要配置项。

    • 应用基本信息:配置应用的名称、副本数量等。

    • 容器配置:配置镜像,并配置所需的CPU和内存资源。

      重要

      请为应用设置所需的请求(Request)资源,否则无法进行容器自动伸缩。

    • 高级配置:

      • 在访问设置区域,单击服务(Service)对应的创建,配置Service。

      • 在伸缩配置区域,勾选指标伸缩的开启,配置伸缩的条件和参数。

        • 指标:支持CPU和内存,需要和设置的所需资源类型相同。当同时指定CPU和内存资源类型时,HPA会在检测到任何一个指标达到扩缩阈值后执行扩缩容操作。

        • 触发条件:资源使用率的百分比,超过该使用量,容器开始扩容。有关Pod水平自动扩缩的算法,请参见算法细节。

        • 最大副本数:该Deployment可扩容的容器数量上限。该值需要大于最小副本数。

        • 最小副本数:该Deployment可缩容的容器数量下限。该值需要设置为大于等于1的整数。

通过kubectl命令创建HPA应用

您也可以通过编排模板来手动创建HPA,并将其绑定到要伸缩的Deployment对象上,通过kubectl命令实现容器自动伸缩配置。推荐您为一个工作负载仅创建一个HPA。下文以部署支持HPA的Nginx应用为例。

  1. 创建并复制以下内容到nginx.yml中。

    重要

    实现HPA时,需为Pod设置request资源,否则HPA无法运行。

    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx  
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9 # 替换为实际的<image_name:tags>。
            ports:
            - containerPort: 80
            resources:
              requests:                         # 必须设置,否则HPA无法运行。
                cpu: 500m
  2. 执行以下命令,创建Nginx应用。

    kubectl apply -f nginx.yml
  3. 创建并复制以下内容到hpa.yml中,用于创建HPA。

    通过scaleTargetRef设置当前HPA绑定的对象。本例中绑定名为nginx的Deployment,在确保所有Pod中容器的平均CPU使用率达到50%时触发扩缩操作。

    1.24及以上

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: nginx-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx
      minReplicas: 1  # Deployment可缩容的容器数量下限,需设置为大于等于1的整数。
      maxReplicas: 10  # 该Deployment可扩容的容器数量上限,需大于minReplicas。
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50 # 目标资源的平均使用率,即资源使用量的平均值与其请求量之间的比例。
                   

    1.24以下

    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
    metadata:
      name: nginx-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx
      minReplicas: 1  # 需要为大于等于1的整数。
      maxReplicas: 10  # 需要大于最小副本数。
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50
                   

    如果需要同时指定CPU和内存指标,您可以在metrics字段下同时指定cpu和memory类型的资源,而不是创建2个HPA。当HPA检测到任何一个指标达到扩缩阈值后,便会执行扩缩容操作。

    metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50
      - type: Resource
        resource:
          name: memory
          target:
            type: Utilization
            averageUtilization: 50
  4. 执行以下命令,创建HPA。

    kubectl apply -f hpa.yml

    此时,执行kubectl describe hpa <HPA名称>(本示例的HPA名称为nginx-hpa.yml),预期输出的警告信息如下,表明HPA仍在部署中。您可以执行kubectl get hpa命令查看HPA的状态。

    Warning  FailedGetResourceMetric       2m (x6 over 4m)  horizontal-pod-autoscaler  missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5897-mqzs7
    
    Warning  FailedComputeMetricsReplicas  2m (x6 over 4m)  horizontal-pod-autoscaler  failed to get cpu utilization: missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5
  5. 等待HPA创建成功且Pod达到伸缩条件后(本示例为Nginx的Pod CPU使用率超过50%),再次执行kubectl describe hpa <HPA的名称>命令,查看水平伸缩情况。

    预期输出如下,表明HPA正常运行。

    Type    Reason             Age   From                       Message
      ----    ------             ----  ----                       -------
      Normal  SuccessfulRescale  5m6s  horizontal-pod-autoscaler  New size: 1; reason: All metrics below target
相关文章

弹性伸缩概述 2025-04-15 17:15

弹性伸缩是根据业务需求和策略,自动调整计算资源的管理服务,典型的场景包含在线业务弹性、大规模计算训练、深度学习GPU或共享GPU的训练与推理等。本文介绍ACK Serverless集群支持的弹性伸缩方案。

使用容器水平伸缩(HPA) 2025-04-15 17:15

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

使用容器定时水平伸缩(CronHPA) 2025-04-15 17:15

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

容器垂直伸缩(VPA) 2025-04-15 17:15

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

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

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

基于阿里云Prometheus指标的容器水平伸缩 2025-04-15 17:15

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

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