容器水平伸缩(HPA)

更新时间:2023-08-25 06:50:40

容器服务ACK支持在控制台界面上快速创建支持HPA的应用,实现容器资源的弹性伸缩。您也可通过定义HPA(Horizontal Pod Autoscaling)的YAML来进行配置。

前提条件

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

  1. 登录容器服务管理控制台

  2. 在控制台左侧导航栏,单击集群

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

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

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

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

    配置项

    描述

    配置项

    描述

    命名空间

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

    应用名称

    设置应用的名称。

    副本数量

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

    类型

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

    标签

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

    注解

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

    时区同步

    仅ACK集群支持配置此参数,ACK Serverless集群不支持。表示容器与节点是否使用相同的时区。

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

    说明

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

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

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

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

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

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

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

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

结果验证

  1. 单击查看应用详情或者在工作负载 > 无状态中单击应用名称操作列的详情,单击容器伸缩,您可在部署的详情中查看伸缩组信息。

  2. 在实际使用环境中,应用会根据CPU负载进行伸缩。您也可在测试环境中验证弹性伸缩,通过给Pod进行CPU压测,可以发现Pod在半分钟内即可完成水平的扩展。

通过kubectl命令创建HPA应用

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

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

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

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

    kubectl create -f nginx.yml
  3. 创建HPA。

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

    集群版本为1.24及以下的YAML详细信息

    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
    metadata:
      name: nginx-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx
      minReplicas: 1
      maxReplicas: 10
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50
                   

    集群版本为1.26的YAML详细信息

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: nginx-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx
      minReplicas: 1
      maxReplicas: 10
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50
                   
    说明

    HPA需要给Pod设置request资源,如果没有request资源,HPA不会运行。

  4. 执行kubectl describe 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后,再次执行kubectl describe hpa <HPA的名称>命令。

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

    Normal SuccessfulRescale 39s horizontal-pod-autoscaler New size: 1; reason: All metrics below target

    此时当Nginx的Pod的利用率超过本例中设置的50%利用率时,则会进行水平扩容,低于50%的时候会进行缩容。

  • 本页导读 (1)
  • 前提条件
  • 通过容器服务控制台创建HPA应用
  • 通过kubectl命令创建HPA应用