容器水平伸缩(HPA)

阿里云容器计算服务ACS支持通过控制台界面和kubectl的方式快速创建支持HPA(Horizontal Pod Autoscaling)的应用,实现容器资源的弹性伸缩。本文介绍如何在ACS集群中创建支持HPA的应用并验证HPA的伸缩效果。

前提条件

创建HPA应用

通过控制台创建

  1. 登录容器计算服务控制台,在左侧导航栏选择集群

  2. 集群页面,单击目标集群ID,然后在左侧导航栏,选择工作负载 > 无状态

  3. 无状态页面,单击使用镜像创建

  4. 应用基本信息页填写应用的名称等信息,然后单击下一步

    配置项

    描述

    命名空间

    在页面顶部设置应用部署所处的命名空间,默认使用default命名空间。

    应用名称

    设置应用的名称。

    副本数量

    即应用包含的Pod数量,默认数量为2。

    工作负载

    定义资源对象的类型,可选择无状态有状态任务定时任务

    标签

    为该应用添加一个标签,标识该应用。

    注解

    为该应用添加一个注解(Annotation)。

    实例类型

    Pod的实例类型,可选择通用型BestEffort性能型

  5. 容器配置页进行容器设置,选择镜像,并设置所需的资源。然后单击下一步。详情请参见容器配置

    说明

    您必须为Deployment设置所需资源,否则无法进行容器自动伸缩。

  6. 高级设置页的访问设置区域,单击服务的创建,设置服务的相关信息,详情请参见高级配置

  7. 高级设置页选中指标伸缩开启,设置伸缩的条件和配置。

    • 指标:支持CPU和内存,需要和设置的所需资源类型相同。

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

    • 最大副本数:该Deployment可扩容的容器数量上限。

    • 最小副本数:该Deployment可缩容的容器数量下限。

  8. 单击右下角的创建,一个支持HPA的Deployment就已经创建完毕。

通过kubectl命令创建

您也可通过编排模板来手动创建HPA,并将其绑定到要伸缩的Deployment对象上,通过kubectl命令实现容器自动伸缩配置。

下面针对一个Nginx应用进行举例。

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

    Deployment的编排模板如下。

    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: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/nginx:1.7.9 # replace it with your exactly <image_name:tags>
            ports:
            - containerPort: 80
            resources:
              requests:                         ##必须设置,不然HPA无法运行。
                cpu: 500m
  2. 执行以下命令,创建Nginx应用。

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

    通过scaleTargetRef设置当前HPA绑定的对象,在本例中绑定名为nginx的Deployment。

    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 # 目标资源的平均使用率,即资源使用量的平均值与其请求量之间的比例。
                   
  4. 执行以下命令,创建HPA。

    kubectl apply -f hpa.yaml
  5. 等待HPA创建后,再次执行kubectl describe hpa <HPA的名称>命令。

    可以看到以下信息,则表示HPA已经正常运行。

     Type    Reason             Age    From                       Message
      ----    ------             ----   ----                       -------
      Normal  SuccessfulRescale  4m53s  horizontal-pod-autoscaler  New size: 1; reason: All metrics below target

相关文档

容器定时伸缩请参见容器定时伸缩(CronHPA)