You need to enable JavaScript to run this app.
容器服务

容器服务

复制全文
指标伸缩(HPA)
使用 CPU 和内存指标实现弹性伸缩
复制全文
使用 CPU 和内存指标实现弹性伸缩

HPA(Horizontal Pod Autoscaler,水平 Pod 弹性伸缩)在 Kubernetes 集群中用于 Pod 水平自动伸缩,它基于 CPU 和内存利用率、对无状态负载和有状态负载的 Pod 数量进行自动扩缩容。

说明

HPA 不适用于无法缩放的对象,比如 DaemonSets。

使用限制

  • HPA 配置多种指标时,会分别基于每种指标计算,并取最大值作为最终结果。
  • 指标伸缩仅支持配置无状态负载(Deployment)和有状态负载(Statefulset)。

前提条件

已安装 metrics-server 组件,且组件工作正常。详情请参见 查看组件

通过控制台配置

  1. 登录 容器服务控制台
  2. 单击左侧导航栏中的 集群
  3. 在集群列表页面,单击需要配置的目标集群。
  4. 在集群管理页面的左侧导航栏中,选择 弹性伸缩 > 指标伸缩,单击 创建指标伸缩,配置指标伸缩。
    • 基本信息
      alt
      配置项说明
      名称根据系统提示,配置指标伸缩策略的名称。在同一个命名空间下,名称必须唯一。
      命名空间选择伸缩策略所属的命名空间。建议选择您自定义的命名空间或系统默认创建的 default 命名空间。命名空间相关介绍,请参见 命名空间概述
      标签对应 Kubernetes 中的 Label,用于指定该伸缩策略的标识属性。单击 添加标签,根据界面提示输入符合要求的
      注解对应 Kubernetes 中的 Annotation,用于为伸缩策略附加任意非标识的元数据,包括 标签 不允许的字符,方便客户端能够检索此元数据。单击 添加注解,根据界面提示输入符合要求的
    • 伸缩策略
      alt
      配置项说明
      伸缩对象配置需要伸缩的工作负载。在下拉菜单中选择工作负载的类型和具体的工作负载。

      监测指标

      配置伸缩的监测指标,系统基于此指标决定是否需要进行伸缩。伸缩指标支持:

      • CPU 利用率:按所有 Pod 实例 CPU 使用量 / 所有 Pod 实例 CPU 请求量的百分比,作为监测指标,当 CPU 利用率达到该值,则进行伸缩。
      • 内存利用率:按所有 Pod 实例内存使用量 / 所有 Pod 实例内存请求量的百分比,作为监测指标,当内存利用率达到该值,则进行伸缩。

      说明

      • 一个 HPA 伸缩规则里,不能同时设置两个相同种类的伸缩指标。
      • 目前最多支持添加两个监测指标。
      • 使用 GPU 和网络指标配置弹性伸缩的方法,请参见 使用 GPU 和网络指标实现弹性伸缩
      最小实例数配置伸缩时的最小实例数和最大实例数。策略触发时,工作负载实例将在此范围内伸缩。
      最大实例数
    • 伸缩规则
      alt
      配置项说明
      扩缩容策略配置工作负载的扩缩容行为,勾选 扩容策略缩容策略,分别配置扩容策略行为和缩容策略行为。

      静默时间

      扩容策略或缩容策略的静默时间,整数形式,单位为秒。
      以当前时间为基准,往前追溯静默时间,如果 HPA 预期副本数总是高于或低于当前副本数,则执行扩容或缩容。

      策略类型

      配置策略类型,包括:

      • 最大值:执行影响 Pod 数量最大的策略。
      • 最小值:执行影响 Pod 数量最小的策略。
      • 禁用:禁用该扩容策略或缩容策略。

      策略

      配置扩缩容的具体策略行为,包括:

      • 类型:配置扩缩容策略行为的类型。
        • 容器组:基于 Pod 数量执行扩缩容。
        • 百分比:基于 Pod 百分比执行扩缩容。
      • 阈值:配置扩缩容行为的阈值,与 类型 配合使用。例如:当 类型 配置为 容器组,阈值配置为 10 时,表示在 时间间隔 内扩容或缩容 10 个副本。
      • 时间间隔:配置扩缩容速率,整数形式,取值范围为 1~1800,单位为秒。
  5. 单击 确定,完成配置。

通过 kubectl 命令行配置

基础配置

  1. 创建工作负载。本示例以创建无状态负载(Deployment)为例。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: demo-workload  # 工作负载名称
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: demo-workload
      template:
        metadata:
          labels:
            app: demo-workload
        spec:
          containers:
          - name: workload
            image: cr-cn-beijing.volces.com/tw/nginx:1.0 # 容器镜像的地址和版本,请配置为您自己的镜像地址
            resources:
              requests:  # 指定容器的 CPU 和内存请求
                cpu: "500m" 
                memory: "1024Mi"
              limits:
                cpu: "1" 
                memory: "2Gi"
    
  2. 创建与工作负载关联的 HPA,指定按照 CPU 或内存使用率进行弹性伸缩。
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: workload-hpa  # 指标伸缩名称
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: demo-workload # 指定指标伸缩的工作负载对象
      minReplicas: 1 # 配置 HPA 的最小实例数
      maxReplicas: 10 # 配置 HPA 的最大实例数
      metrics:
      - type: Resource
        resource:
          name: cpu # 监测指标,目前仅支持 memory 和 cpu,且每一种监测指标只支持 1 个配置
          target:
            type: Utilization
            averageUtilization: 80 # 监测指标阈值,整数形式,单位为 %,例如 80 代表 80%
      - type: Resource
        resource:
          name: memory # 监测指标,目前仅支持 memory 和 cpu,且每一种监测指标只支持 1 个配置
          target:
            type: Utilization
            averageUtilization: 80 # 监测指标阈值,整数形式,单位为 %,例如 80 代表 80%
    
  3. 查看弹性伸缩结果。
    • 当 Pod CPU 使用率增加后会触发扩容,此时可通过如下命令查看 HPA 信息。
      kubectl get hpa   
      
      预期返回结果如下,Deployment 的副本数扩容到 2:
      NAME           REFERENCE                     TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
      workload-hpa   Deployment/example-workload   23/20      1         10        2          62s   
      
    • 当 Pod CPU 使用率下降到指定值以下会触发缩容,此时可通过如下命令查看 HPA 信息。
      kubectl get hpa   
      
      预期返回结果如下,Deployment 的副本数缩容到 1:
      NAME           REFERENCE                     TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
      workload-hpa   Deployment/example-workload   0/20      1         10        1          15m
      

配置扩缩容行为

在 v1.24 及以上版本的集群中,autoscaling/v2 API 允许使用behavior字段配置 HPA 的扩缩容行为,同时,可以使用scaleUpscaleDown字段分别配置扩容和缩容行为。

说明

更多详细说明,请参见 社区文档

扩缩容策略

支持在behavior字段中指定一个或多个扩缩容策略。当指定多个策略时,默认允许最大更改量的策略是默认选择的策略。以下以缩容策略为例:

behavior:
  scaleDown: # 缩容策略
    policies:    
    - type: Pods # 策略类型,Pods 代表容器组,即基于 Pod 数量执行扩缩容
      value: 4 # 阈值,此处代表缩容 4 个副本
      periodSeconds: 60 # 时间间隔,整数形式,取值范围为 1~1800,单位为秒
    - type: Percent # 策略类型,Percent 代表百分比,即基于 Pod 百分比执行扩缩容
      value: 10 # 阈值,此处代表缩容当前副本数量的 10%  
      periodSeconds: 60 # 时间间隔,整数形式,取值范围为 1~1800,单位为秒

说明

  • 默认情况下,系统会允许最大更改量的策略。因此,只有 Pod 副本数大于 40 时, 第二个策略才会被采用。如果副本数为 40 或者更少,则应用第一个策略。
  • 支持使用selectPolicy字段来更改策略选择。 当配置为Min时,系统将选择副本数变化最小的策略。如果将该值设置为Disabled,则将完全禁用该扩缩容策略。

禁止 Pod 扩容或缩容

使用 HPA 时,如果您只期望进行 Pod 扩容或缩容,可以在配置扩缩容策略时,使用selectPolicy字段来实现。

  • 默认值:均不禁止。

  • 禁用扩容:配置selectPolicy的值为Disabled时,禁用指定方向的扩容。例如:以下策略将会阻止 Pod 扩容。

    behavior:
      scaleUp:
        selectPolicy: Disabled
    
  • 禁用缩容:配置selectPolicy的值为Disabled时,禁用指定方向的缩容。例如:以下策略将会阻止 Pod 缩容。

    behavior:
      scaleDown:
        selectPolicy: Disabled
    

配置静默时间

为防止因短期的指标波动导致 Pod 过度频繁或不必要的扩缩容。您可以为扩缩容行为配置静默时间,系统完成扩缩容后,在静默时间内,不会再次执行扩缩容策略,避免工作负载副本数频繁变更造成系统震荡。

例如在以下示例中,当指标显示目标应该缩容时,自动扩缩算法会将过去 5 分钟的所有期望状态考虑在内,使用窗口期内的最大值。

behavior:
  scaleDown:
    stabilizationWindowSeconds: 300
最近更新时间:2025.02.14 11:41:09
这个页面对您有帮助吗?
有用
有用
无用
无用