配置 CronHPA

对于具有周期性业务波动的无状态应用,CronHPA(Cron Horizontal Pod Autoscaler)支持基于您设置的时间策略调整 Pod 数量,使您能够根据可预测的业务模式优化资源使用。

目录

了解 Cron Horizontal Pod Autoscalers

您可以创建一个 cron horizontal pod autoscaler,根据时间表指定在特定时间运行的 Pod 数量,从而为可预测的流量模式做准备,或在非高峰时段减少资源使用。

创建 cron horizontal pod autoscaler 后,平台会开始监控时间表,并在指定时间自动调整 Pod 数量。此基于时间的扩缩容独立于资源利用率指标,非常适合具有已知使用模式的应用。

CronHPA 通过定义一个或多个调度规则来工作,每个规则指定一个时间(使用 crontab 格式)和目标从节点数。当达到调度时间时,CronHPA 会将 Pod 数量调整为指定的目标,从而不受当前资源利用率影响。

CronHPA 如何工作?

cron horizontal pod autoscaler(CronHPA)扩展了基于时间控制的 Pod 自动扩缩容概念。CronHPA 允许您定义特定时间点调整 Pod 数量,从而为可预测的流量模式做准备,或在非高峰时段减少资源使用。

CronHPA 通过持续检查当前时间与定义的调度规则进行对比。当达到调度时间时,控制器会将 Pod 数量调整为该调度规则指定的目标从节点数。如果多个调度规则同时触发,平台将使用优先级更高的规则(即配置中定义较早的规则)。

前提条件

请确保监控组件已部署在当前集群中且运行正常。您可以点击平台右上角expand > Platform Health Status,检查监控组件的部署和健康状态。

创建 Cron Horizontal Pod Autoscaler

使用 CLI

您可以通过定义 YAML 文件并使用 kubectl create 命令来创建 cron horizontal pod autoscaler。以下示例展示了针对 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. 需要扩缩容的 Deployment 名称。
    4. 指定要扩缩容对象的 API 版本。
    5. 指定对象类型,对象必须是 Deployment、ReplicaSet 或 StatefulSet。
    6. CronHPA 作用的目标资源。
    7. 使用标准 crontab 格式(分钟 小时 日 月 星期)的定时调度。
    8. 调度触发时的目标从节点数。

    该示例配置了 Deployment:

    • 每天午夜(00:00 )缩容至 0 个从节点
    • 工作日(周一至周五)上午 8:00 扩容至 3 个从节点
    • 工作日(周一至周五)下午 6:00 缩容至 1 个从节点
  2. 应用 YAML 文件创建 CronHPA:

    kubectl create -f cronhpa.yaml

使用 Web 控制台

  1. 进入 Container Platform

  2. 在左侧导航栏点击 Workloads > Deployments

  3. 点击 Deployment Name

  4. 向下滚动到 Elastic Scaling 部分,点击右侧的 Update

  5. 选择 Scheduled Scaling,配置扩缩容规则。当类型为 Custom 时,必须提供格式为 minute hour day month week 的 Crontab 表达式作为触发条件。详细介绍请参考 Writing Crontab Expressions

  6. 点击 Update

调度规则说明

  1. 表示从每周一凌晨 01:00 开始,仅保留 1 个 Pod。
  2. 表示从每周二凌晨 02:00 开始,仅保留 2 个 Pod。
  3. 表示从每周二凌晨 02:00 开始,仅保留 3 个 Pod。

重要说明

  • 当多个规则触发时间相同时(示例 2 和 3),平台仅根据优先级更高的规则执行自动扩缩容(示例 2)。
  • CronHPA 独立于 HPA 运行。如果同一工作负载同时配置了两者,可能会产生冲突,请谨慎设计扩缩容策略。
  • 调度使用 crontab 格式(minute hour day month week),规则与 Kubernetes CronJobs 相同。
  • 时间基于集群的时区设置。
  • 对于对可用性要求较高的工作负载,请确保定时扩缩容不会在高峰期意外降低容量。