You need to enable JavaScript to run this app.
导航

指标伸缩

最近更新时间2024.04.26 15:29:00

首次发布时间2024.01.19 14:39:14

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

指标伸缩概述

随着多集群的使用场景越来越广,联邦能够帮助用户快速实现多集群资源的部署以及跨集群容灾,提升服务可靠性以及资源利用率。单集群场景下使用 HPA 自动更新工作负载资源的实践随之被拓展至多集群,但由于多集群资源被联邦统一管理,应用将被分发到多集群,业务高峰期应用如何跨多集群扩容,低峰期如何快速缩容,是需要解决的资源节省难题。

因此,针对多集群场景下的 HPA 做一定的设计与适配,帮助用户有效管理多集群场景下的应用自动扩缩容,能有效提升产品的使用体验。分布式云原生平台针对联邦资源提供多集群 HPA,可在联邦集群中创建 HPA 并实现多集群分发和跨集群弹性扩缩容能力。支持中心式 HPA 和 分布式 HPA 两种模式:

  • 中心式 HPA:联邦统一管理 workload 的副本总数,并根据集群的运行状态、集群资源容量、集群优先级等配置,由联邦的调度器择优分配这些副本到相关的集群中,使得 workload 在联邦范围内实现最优分配。同时分配到的成员集群如果出现 workload 无法调度,也能在启用 auto-migration 的情况下自动迁移副本,使得服务尽可能达到预期副本数,避免服务熔断。
  • 分布式 HPA:成员集群各自维护 HPA controller,并且自治 workload 的扩缩容。联邦需要尊重成员集群的扩缩容结果,不能从联邦层面去覆盖/修改成员集群的副本数情况。但是除了副本数之外的修改,联邦应当正确下发到成员集群。并且在 PropagationPolicy 里的集群信息发生变化时,同步 HPA 和 workload 到正确的集群中。

说明

可通过添加 Lable kubeadmiral.io/hpa-mode 的方式配置 HPA 模式,例如:kubeadmiral.io/hpa-mode: centralized。centralized 表示中心式,distributed 表示分布式,若不添加此 Lable,默认为 distributed。

创建指标伸缩

前提条件

使用限制

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

操作步骤

  1. 登录 分布式云原生控制台
  2. 在左侧导航栏选择 联邦主控实例,进入主控实例管理页面。
  3. 在主控实例列表,单击目标主控实例名称,进入主控实例配置页面。
  4. 在左侧导航栏选择 运维管理,进入分发资源页面选择 原生资源 页签。
  5. 查找并单击 HorizontalPodAutoscaler 名称,进入 HPA 分发资源列表。
  6. 单击 使用 Yaml 新建,根据提示依次配置 Yaml 编排和部署配置相关参数。完成后单击 确定,即可开始创建 HPA 并实现多集群分发。

alt

配置项说明
命名空间选择 HPA 资源部署的命名空间,支持选择自定义创建的命名空间或 Kubernetes 自建的命名空间。

Yaml

输入提前准备的 HorizontalPodAutoscaler Yaml 配置。

说明

可通过添加 Lable kubeadmiral.io/hpa-mode 的方式配置 HPA 模式,例如:kubeadmiral.io/hpa-mode: centralized。centralized 表示中心式,distributed 表示分布式,若不添加此 Lable,默认行为为 distributed。

  • 中心式 HPA 的 Yaml 示例如下:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: my-hpa
  namespace: default
  labels:
    kubeadmiral.io/hpa-mode: centralized   # HPA 模式,centralized 表示中心式;distributed 表示分布式。若不配置此参数,默认为 distributed。
spec:
  maxReplicas: 10
  minReplicas: 1
  metrics:
    - resource:
        name: cpu
        target:
          averageUtilization: 80
          type: Utilization
      type: Resource
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: deploy-demml
  • 分布式 HPA 的 Yaml 示例如下:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: my-hpa
  namespace: default
  labels:
    kubeadmiral.io/hpa-mode: distributed   # HPA 模式,centralized 表示中心式;distributed 表示分布式。若不配置此参数,默认行为为 distributed。
spec:
  maxReplicas: 10
  minReplicas: 1
  metrics:
    - resource:
        name: cpu
        target:
          averageUtilization: 80
          type: Utilization
      type: Resource
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: deploy-demml

alt

配置项说明

分发策略

部署配置的开关,可根据实际情况(是否已创建策略、是否需要立即分发资源)确定是否需要立即配置策略并分发资源。

  • 关联已有策略:已经创建部署策略、差异化策略,即刻关联策略并分发资源。

  • 暂不关联:仅创建资源,暂不关联策略,也不进行资源分发,直到更新部署策略。

部署策略关联方式

部署策略与部署资源的关联方式,可根据实际场景选择合适的关联方式。

  • 所有资源关联一个策略:所有部署资源使用相同的部署策略进行资源分发,适用于部署策略均相同的场景。

  • 分别关联:针对多个部署资源配置不同部署策略,适用于多个分发资源部署策略不同的场景。

说明

此配置仅用于控制部署策略的关联方式,差异化策略均需在部署资源配置的右侧列表中单独配置。

部署策略名称部署策略关联方式选择所有资源关联一个策略时需要配置。选择所有部署资源关联的部署策略即可,若缺少可用部署策略,可单击 创建部署策略 跳转到部署策略创建页面。

冲突资源接管

默认不勾选,表示待分发资源与成员集群中已有资源名称冲突时的处理策略,勾选后将通过联邦资源统一管理已存在的资源。资源冲突场景具体说明及注意事项参见:资源冲突策略

  • 若不勾选此项,当成员集群中已经存在待分发的同名资源时,将会出现资源冲突错误,已存在的资源不受影响,待分发资源分发失败。

  • 若勾选此项,需要进一步指定 接管目标集群。当成员集群中已经存在待分发的同名资源时,将通过联邦资源统一接管已存在的资源。

部署资源展示当前 Yaml 中配置的所有部署资源,可按需更换 部署策略差异化策略

管理指标伸缩

联邦资源的管理操作基本相同,但操作路径存在差异。HPA 资源的操作路径如下:

  1. 登录 分布式云原生控制台
  2. 在左侧导航栏选择 联邦主控实例,进入主控实例管理页面。
  3. 单击目标主控实例名称,在左侧导航栏选择 运维管理 > 分发资源管理
  4. 在分发资源管理页面的 原生资源 页签,单击 HorizontalPodAutoscaler 名称,进入 HPA 资源管理页面。
  5. 单击 HPA 资源列表右侧操作列中对应的按钮,即可进行相应操作,详细说明参见:管理联邦资源