赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. ACK Serverless集群
  4. 操作指南
  5. 弹性伸缩
  6. 使用容器定时水平伸缩(CronHPA)

使用容器定时水平伸缩(CronHPA)

  • 弹性伸缩
  • 发布于 2025-04-18
  • 0 次阅读
文档编辑
文档编辑

如果您的应用资源使用率存在周期性变化,需要按照类似Crontab的策略定时对Pod进行扩缩容,您可以使用容器定时水平伸缩CronHPA(CronHorizontal Pod Autoscaler)实现Pod的定时扩缩容。CronHPA适用于业务流量有明显高峰时段、应用程序需要在特定时间执行任务等场景。

阅读前提示

ACK集群提供了多种工作负载伸缩(调度层弹性)和节点伸缩(资源层弹性)方案,建议您在使用本文档前阅读弹性伸缩,了解不同方案的适用场景、使用限制等。

前提条件

  • 已创建ACK托管集群、ACK Serverless集群,请参见创建ACK托管集群、创建ACK Serverless集群。

  • 已通过kubectl工具连接集群。具体操作,请参见通过kubectl连接Kubernetes集群。

CronHPA模板及参数介绍

CronHPA基于kubernetes-cronhpa-controller实现。kubernetes-cronhpa-controller是一个基于时间的Pod水平伸缩Controller,按照类似Crontab的策略定时地对集群进行扩缩容,例如在工作日的业务高峰期自动增加Pod数量,在业务低谷时自动减少Pod数量。CronHPA可以作用于任何支持伸缩子资源(Scale Subresource)的Kubernetes对象,例如Deployment、StatefulSet等。

展开查看CronHPA YAML示例及涉及的参数介绍

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
  namespace: default 
spec:
   scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: nginx-deployment-basic
   excludeDates:
   # exclude November 15th
   - "* * * 15 11 *"
   # exclude every Friday 
   - "* * * * * 5"
   jobs:
   - name: "scale-down"
     schedule: "30 */1 * * * *"
     targetSize: 1
   - name: "scale-up"
     schedule: "0 */1 * * * *"
     targetSize: 3
     runOnce: false

参数

说明

scaleTargetRef

指定扩缩容的对象。如果对象支持Scale子资源,CronHPA即可支持。

excludeDates

日期数组。当遇到符合excludeDates描述的日期时任务将会被跳过。最小单位为天。

"* * * * * *"表示"<Seconds> <Minutes> <Hours> <Day of month> <Month> <Day of week>"。

如您想在11月15日不运行任务,可像以下示例一样指定excludeDates。

excludeDates:
  - "* * * 15 11 *"

jobs

支持在一个spec中设定多个CronHPA任务。每个CronHPA任务可以配置以下字段:

  • name:它在一个CronHPA中应是唯一的,这样就可以通过name来区分不同的任务。

  • schedule:它的策略和Crontab类似。kubernetes-cronhpa-controller使用了Golang库(go-cron)功能更强大的Cron,它支持更多表示规则。创建时请严格按照以下格式说明进行设置,否则将导致创建失败。

    Cron表达式的格式如下:

    Field name   | Mandatory? | Allowed values  | Allowed special characters
      ----------   | ---------- | --------------  | --------------------------
      Seconds      | Yes        | 0-59            | * / , -
      Minutes      | Yes        | 0-59            | * / , -
      Hours        | Yes        | 0-23            | * / , -
      Day of month | Yes        | 1-31            | * / , - ?
      Month        | Yes        | 1-12 or JAN-DEC | * / , -
      Day of week  | Yes        | 0-6 or SUN-SAT  | * / , - ?
  • targetSize:设置调度时,扩缩容的Pod数目。

  • runOnce:设置为true时,任务将只执行一次,第一次执行完则退出(Exit)。

步骤一:安装CronHPA组件

您可以安装CronHPA的组件ack-kubernetes-cronhpa-controller,实现应用负载的定时伸缩。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

  2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理。

  3. 单击应用管理页签,找到ack-kubernetes-cronhpa-controller,按照页面提示完成组件的安装。

步骤二:创建CronHPA任务

为应用创建和运行CronHPA前,请确保集群中的CronHPA组件已正常运行,且当前应用只有一个HPA任务对象。以下以无状态应用为例,介绍如何为已有应用开启CronHPA。其他工作负载类型的步骤类似。

创建应用时创建CronHPA任务

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

  2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态。

  3. 在无状态页面,单击使用镜像创建。

  4. 在创建页面,按照页面提示完成应用基本信息配置、容器配置、服务配置和定时伸缩配置,创建一个支持CronHPA的Deployment。

    具体步骤及配置项说明,请参见创建无状态工作负载Deployment。下文仅介绍主要配置项。

    • 应用基本信息:配置应用的名称、副本数量等。

    • 容器配置:配置镜像,并配置容器所需的CPU和内存资源。

    • 高级配置:

      • 在访问设置区域,单击服务(Service)对应的创建,配置Service。

      • 在伸缩配置区域,勾选定时伸缩的开启,按照页面提示安装组件(已安装时可忽略),然后配置定时伸缩的条件和参数。

        • 定时任务名称:CronHPA任务的名称。

        • 目标副本数:当到达设定计划时间时,应用副本数自动伸缩至该值。

        • 调度周期:设置调度的周期。关于为CronHPA任务设置调度周期的更多信息,请参见AliyunContainerService/kubernetes-cronhpa-controller。

为已有应用创建CronHPA任务

在工作负载页面创建

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

  2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态。

  3. 在无状态页面的操作列,单击目标Deployment对应的详情,然后单击容器伸缩页签,在定时伸缩区域,按照页面提示安装CronHPA组件(如已安装,可忽略)并单击创建,配置CronHPA。

    create

    配置项

    描述

    任务名称

    CronHPA任务的名称。

    目标副本数

    当到达设定计划时间时,应用副本数自动伸缩至该值。

    调度周期

    设置的调度周期。关于为CronJob任务设置调度周期的更多信息,请参见AliyunContainerService/kubernetes-cronhpa-controller。

在工作负载伸缩页面创建

说明

此页面目前白名单开放中。如需使用,请提交工单申请。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

  2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择自动伸缩 > 工作负载伸缩。

  3. 在页面右上角,单击创建自动伸缩,选择目标工作负载,然后在水平伸缩页签下勾选CronHPA选项,按照页面提示安装组件(如已安装,可忽略),并配置CronHPA策略。

    • 定时自动伸缩名称:自定义CronHPA的名称。

    • 任务名称:自定义CronHPA任务的名称。

    • 目标副本数:当到达设定计划时间时,应用副本数自动伸缩至该值。

    • 调度周期:设置调度的周期。关于为CronHPA任务设置调度周期的更多信息,请参见AliyunContainerService/kubernetes-cronhpa-controller。

相关操作

查看、添加或修改CronHPA任务

CronHPA任务创建后,您可以在CronHPA列表查看CronHPA任务状态和列表。如果您想添加CronHPA任务,或修改原有CronHPA配置,您可以通过以下入口实现。

  • 工作负载伸缩入口

    1. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择自动伸缩 > 工作负载伸缩。

    2. 在水平伸缩页签下的CronHPA区域,单击操作列的编辑。

  • 工作负载入口(以无状态应用为例,其他工作负载类型步骤类似)

    1. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态。

    2. 在无状态页面的操作列,单击目标Deployment对应的详情,然后单击容器伸缩页签,在定时伸缩区域的操作列,单击任务添加或编辑。

实现CronHPA与HPA的协同

由于CronHPA和HPA两者无法相互感知,如果您的应用使用YAML同时配置了CronHPA和HPA,可能会出现两种配置独立工作,后执行操作覆盖了先执行操作的现象。为了解决这个问题,ACK提供了CronHPA兼容HPA的方案——当检测到两者同时存在时,将HPA作为CronHPA的扩缩容对象,从而实现对该HPA定义对象(例如Deployment)的定时扩缩容。

详细信息,请参见实现CronHPA与HPA的协同。

常见问题

如何卸载ack-kubernetes-cronhpa-controller组件?

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

  2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm。

  3. 在Helm页面,查看是否存在ack-kubernetes-cronhpa-controller组件。

    • 如果存在,请单击该组件右侧操作列下的删除。

      重要

      通过Helm方式删除该组件,不会删除CRD和已创建的Task资源。如需彻底删除CronHPA相关资源,请手动删除。

    • 如不存在,请继续操作下一步。

  4. 在集群管理页左侧导航栏,选择运维管理 > 组件管理。

  5. 在组件管理页面,找到ack-kubernetes-cronhpa-controller组件,单击右下方的卸载。

相关文档

  • 如果您需要基于CPU使用率、内存使用率或其他自定义指标实现Pod的扩缩容,请参见使用容器水平伸缩(HPA)。

  • 如果您的应用资源使用率存在周期性变化,但难以通过规则定义,您可以选择AHPA,以根据业务历史指标自动识别业务水位周期,进行Pod扩缩容,请参见弹性伸缩预测(AHPA)。

  • 如需基于Pod的资源使用情况自动为Pod设置资源占用的限制,从而让Pod获得足够的计算资源,请参见使用容器垂直伸缩(VPA)。

  • 如需基于消息队列、定时策略、自定义指标等Kubernetes事件灵活自定义扩缩容策略,对Pod进行扩缩容,请参见事件驱动弹性。

相关文章

HPA常见问题与诊断 2025-04-18 14:49

本文介绍使用节点自动伸缩功能时可能遇到的常见问题及解决方案。

使用容器定时水平伸缩(CronHPA) 2025-04-18 14:49

如果您的应用资源使用率存在周期性变化,需要按照类似Crontab的策略定时对Pod进行扩缩容,您可以使用容器定时水平伸缩CronHPA(CronHorizontal Pod Autoscaler)实现Pod的定时扩缩容。CronHPA适用于业务流量有明显高峰时段、应用程序需要在特定时间执行任务等场景

使用容器水平伸缩(HPA) 2025-04-18 14:49

如果您想基于CPU使用率、内存使用率或其他自定义指标实现Pod的自动扩缩,建议您为业务容器开启水平伸缩HPA(Horizontal Pod Autoscaler)功能。HPA能够在业务负载急剧飙升时快速扩容多个Pod副本来缓解压力,也可以在业务负载变小时根据实际情况适当缩容以节省资源,无需您人为干预

基于阿里云Prometheus指标的容器水平伸缩 2025-04-18 14:49

HPA默认支持基于CPU和内存指标实现自动伸缩,可能无法满足更为复杂的运维场景。如果您需要将Prometheus收集的Custom Metrics与External Metrics转换为HPA可用的弹性伸缩指标,您可以参见本文获取监控数据并实现对应的伸缩配置,为应用提供更灵活、便捷的扩缩机制。 前提

基于阿里云组件指标的容器水平伸缩 2025-04-18 14:49

应对业务突发流量时,更精准的扩缩容能够提高响应速度,并进一步提升集群资源利用效率。本文介绍如何利用Kubernetes的外部指标接口(External Metrics)集成重要业务指标(例如HTTP请求率、Ingress QPS等),实现更自动化的伸缩策略。 本文将通过以下步骤,以创建名为Nginx

容器垂直伸缩(VPA) 2025-04-18 14:49

通过在ACK Serverless集群上部署安装VPA(vertical-pod-autoscaler),ACK Serverless可以提供垂直的容器伸缩的功能。VPA会基于Pod的资源使用情况自动为集群设置资源占用的限制,从而让集群将Pod调度到有足够资源的最佳节点上。VPA也会保持最初容器定义

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号