更新时间:2025-11-21 GMT+08:00

水平扩缩容(HPA)

水平扩缩容(Horizontal Pod Autoscaler, HPA)一种资源对象,能够根据某些指标对无状态负载中的容器组数量进行动态伸缩,使运行在上面的服务对指标的变化有一定的自适应能力。HPA会根据租户配置的策略自动增加或减少容器组数量以满足租户需求。

约束与限制

在CCI 2.0,每个容器组所在环境都存在辅助运行的系统组件,由于这些系统组件会占用部分资源,因此可能导致容器组的资源使用达不到预期上限,进而影响您设置的HPA规则的触发条件。您可参考预留系统开销说明避免此类情形。

通过控制台创建和管理HPA策略

  1. 登录云容器实例 CCI2.0控制台。
  2. 在左侧导航栏中选择“负载管理 > 无状态负载”,单击工作负载名称进入负载详情。
  3. 在负载详情中,单击“弹性伸缩”。
  4. 单击“创建HPA策略”,根据界面提示补充相关信息。相关配置项如表1所示。
    表1 创建HPA策略

    配置项

    说明

    名称

    自定义HPA策略名称。

    命名空间

    选择指定命名空间。如需新建请单击“创建命名空间”

    关联工作负载

    系统会自动匹配关联工作负载。

    实例范围

    HPA可伸缩的Pod实例数量上下限。

    伸缩配置

    • 系统默认

      选择系统默认则采用K8S社区推荐的默认行为进行负载伸缩。

    • 自定义

      选择自定义则用户可以自定义稳定窗口、步长、优先级等策略实现更灵活的配置,未配置的参数将采用K8S社区推荐的默认值。

    系统策略

    选择所需的指标并设置期望值。

  5. 可选:通过界面上的“更新HPA策略”“删除HPA策略”可以对已创建的HPA策略进行更新和删除。

通过YAML文件创建HPA策略

  • 当配置spec.metrics.resource.target.type为Utilization时,您需要在创建工作负载时指定资源的requests值。
  • 当配置spec.metrics.resource.target.type为Utilization时,其数值的计算规则为:资源使用率 = 资源使用量 / 用户实际可使用的容器组规格。您可参考容器组规格的计算方法来确认您的容器组实际规格。

您可以根据业务需求自行定义伸缩策略,包括弹性指标、阈值以及步长等,以降低人为反复调整资源以应对业务变化和高峰压力的工作量,帮助您节约资源和人力成本。当前支持一种弹性伸缩策略:

告警策略:支持根据CPU/内存的使用率,进行工作负载的自动伸缩。工作负载创建完成后即可设置,在CPU/内存超过或少于一定值时,自动增减实例。
  1. 登录云容器实例 CCI2.0控制台。
  2. 在左侧导航栏中选择“负载管理 > 无状态负载”,单击工作负载名称进入负载详情。
  3. 在“负载详情”中,单击“弹性伸缩”,单击“YAML创建”配置弹性伸缩策略。

    弹性伸缩策略文件格式说明

    • hpa.yaml资源描述
      kind: HorizontalPodAutoscaler
      apiVersion: cci/v2
      metadata:
        name: nginx              # HPA的名称    
        namespace: test          # HPA所在的命名空间
      spec:
        scaleTargetRef:         # 引用进行自动伸缩的目标资源
          kind: Deployment      # 目标资源类型,例Deployment 
          name: nginx           # 目标资源名称   
          apiVersion: cci/v2    # 目标资源版本  
        minReplicas: 1          # HPA伸缩的最小副本数
        maxReplicas: 5          # HPA伸缩的最大副本数
        metrics:
          - type: Resource                 # 使用资源指标
            resource:
              name: memory                 # 资源名称,例如cpu或memory    
              target:
                type: Utilization          # 指标类型,可以是Utilization(百分比)或AverageValue(绝对值)
                averageUtilization: 50     # 资源使用率,例当CPU使用率达到50%时触发扩容
        behavior:
          scaleUp:
            stabilizationWindowSeconds: 30  # 扩容后稳定时间,单位为秒
            policies:
            - type: Pods           #指定扩缩容的Pods数量
              value: 1
              periodSeconds: 30  # 每 30 秒检查一次
          scaleDown:
            stabilizationWindowSeconds: 30  # 缩容后稳定时间,单位为秒
            policies:
            - type: Percent      #按照现有Pods的百分比来扩缩容
              value: 50
              periodSeconds: 30  # 每 30 秒检查一次
    • hpa.json资源描述
      {
      	"kind": "HorizontalPodAutoscaler",
      	"apiVersion": "cci/v2",
      	"metadata": {
      		"name": "nginx",             # HPA的名称
      		"namespace": "test"          # HPA所在的命名空间
      	},
      	"spec": {
      		"scaleTargetRef": {         # 引用进行自动伸缩的目标资源
      			"kind": "Deployment",        # 目标资源类型,例Deployment
      			"name": "nginx",             # 目标资源名称
      			"apiVersion": "cci/v2"       # 目标资源版本
      		},
      		"minReplicas": 1,             # HPA伸缩的最小副本数
      		"maxReplicas": 5,             # HPA伸缩的最大副本数
      		"metrics": [
      			{
      				"type": "Resource",             # 使用资源指标
      				"resource": {
      					"name": "memory",       # 资源名称,例如cpu或memory
      					"target": {
      						"type": "Utilization",           # 指标类型,可以是Utilization(百分比)或AverageValue(绝对值)
      						"averageUtilization": 50         # 资源使用率,例当CPU使用率达到50%时触发扩容  
      					}
      				}
      			}
      		],
      		"behavior": {
      			"scaleUp": {
      				"stabilizationWindowSeconds": 30,
      				"policies": [
      					{
      						"type": "Pods",
      						"value": 1,
      						"periodSeconds": 30
      					}
      				]
      			},
      			"scaleDown": {
      				"stabilizationWindowSeconds": 30,
      				"policies": [
      					{
      						"type": "Percent",
      						"value": 50,
      						"periodSeconds": 30
      					}
      				]
      			}
      		}
      	}
      }
  4. 单击“确定”
    可看到弹性伸缩策略。
    图1 弹性伸缩策略

    待到触发条件发生时,弹性伸缩策略会自动启动。