配置 CronHPA

对于具有周期性业务波动的无状态应用程序,CronHPA(Cron 水平 Pod 自动扩展器)支持根据您设置的时间策略调整 Pods 的数量,从而使您能够根据可预测的业务模式优化资源使用。

目录

理解 Cron 水平 Pod 自动扩展器

您可以创建一个 Cron 水平 Pod 自动扩展器,以根据计划在特定时间指定要运行的 Pods 数量,从而为可预测的流量模式做好准备,或在非高峰时段减少资源使用。

在您创建 Cron 水平 Pod 自动扩展器后,平台将开始监控该计划,并在指定时间自动调整 Pods 的数量。这种基于时间的扩展独立于资源利用率指标,使其非常适合具有已知使用模式的应用程序。

CronHPA 通过定义一个或多个调度规则来工作,每个规则指定一个时间(使用 crontab 格式)和一个目标副本数。当达到预定时间时,CronHPA 将调整 Pod 数量以匹配指定的目标,而不考虑当前的资源利用率。

CronHPA 如何工作?

Cron 水平 Pod 自动扩展器(CronHPA)扩展了 Pod 自动扩展的概念,增加了基于时间的控制。CronHPA 允许您定义特定时间以更改 Pods 数量,从而为可预测的流量模式做好准备,或在非高峰时段减少资源使用。

CronHPA 通过持续检查当前时间与定义的调度进行工作。当达到预定时间时,控制器将调整 Pods 的数量以匹配该调度指定的目标副本数。如果多个调度在同一时间触发,平台将使用优先级更高的规则(即在配置中定义得更早的规则)。

先决条件

请确保当前集群已部署监控组件,且监控组件正常运行。您可以通过单击平台右上角的expand > 平台健康状态,以查看监控组件的部署和健康状态。来检查监控组件的部署和健康状态。

创建 Cron 水平 Pod 自动扩展器

使用 CLI

您可以通过定义 YAML 文件并使用 kubectl create 命令来创建 Cron 水平 Pod 自动扩展器。以下示例展示了一个 Deployment 对象的调度扩展:

  1. 创建一个名为 cronhpa.yaml 的 YAML 文件,内容如下:
apiVersion: tkestack.io/v1
kind: CronHPA
metadata:
  name: my-deployment-cronhpa
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-deployment
  crons:
  - schedule: "0 0 * * *"
    targetReplicas: 0
  - schedule: "0 8 * * 1-5"
    targetReplicas: 3
  - schedule: "0 18 * * 1-5"
    targetReplicas: 1
  1. 使用 tkestack.io/v1 API。
  2. CronHPA 资源的名称。
  3. 要扩展的部署名称。
  4. 指定要扩展的对象的 API 版本。
  5. 指定对象的类型。对象必须是 Deployment、ReplicaSet 或 StatefulSet。
  6. CronHPA 适用的目标资源。
  7. 标准 crontab 格式的 cron 调度(分钟 小时 日 月 星期)。
  8. 当调度触发时要扩展到的目标副本数。

此示例配置部署为:

  • 每天午夜缩减到 0 个副本
  • 在工作日(周一至周五)早上 8
    扩展到 3 个副本
  • 在工作日的下午 6
    缩减到 1 个副本
  1. 应用 YAML 文件以创建 CronHPA:
$ kubectl create -f cronhpa.yaml

使用 Web 控制台

  1. 进入 容器平台

  2. 在左侧导航栏中,单击 工作负载 > 部署

  3. 单击 部署名称

  4. 向下滚动到 弹性扩展 部分,然后在右侧单击 更新

  5. 选择 计划扩展,并配置扩展规则。当类型为 自定义 时,您必须提供触发条件的 Crontab 表达式,格式为 分钟 小时 日 月 星期。有关详细介绍,请参见 编写 Crontab 表达式

  6. 单击 更新

计算规则说明

  1. 表示从每周一的 01
    AM 开始,仅保留 1 个 Pod。
  2. 表示从每周二的 02
    AM 开始,仅保留 2 个 Pods。
  3. 表示从每周二的 02
    AM 开始,仅保留 3 个 Pods。

重要说明

  • 当多个规则具有相同的触发时间(示例 2 和示例 3)时,平台仅会根据优先级较高的规则(示例 2)执行自动扩展。
  • CronHPA 独立于 HPA 操作。如果两者都为同一工作负载配置,可能会相互冲突。请仔细考虑您的扩展策略。
  • 调度使用 crontab 格式(分钟 小时 日 月 星期),并遵循与 Kubernetes CronJobs 相同的规则。
  • 时间基于集群的时区设置。
  • 对于具有关键可用性要求的工作负载,请确保您的计划扩展不会在高流量期间意外减少容量。