如果您的应用资源使用率存在周期性变化,需要按照类似Crontab的策略定时对Pod进行扩缩容,您可以使用容器定时水平伸缩CronHPA(CronHorizontal Pod Autoscaler)实现Pod的定时扩缩容。CronHPA适用于业务流量有明显高峰时段、应用程序需要在特定时间执行任务等场景。
阅读前提示
前提条件
已创建ACK托管集群、ACK Serverless集群,请参见创建Kubernetes托管版集群、创建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组件
您可以安装CronHPA的组件ack-kubernetes-cronhpa-controller,实现应用负载的定时伸缩。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
单击应用管理页签,找到ack-kubernetes-cronhpa-controller,按照页面提示完成组件的安装。
步骤二:创建CronHPA任务
为应用创建和运行CronHPA前,请确保集群中的CronHPA组件已正常运行,且当前应用只有一个HPA任务对象。以下以无状态应用为例,介绍如何为已有应用开启CronHPA。其他工作负载类型的步骤类似。
创建应用时创建CronHPA任务
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面,单击使用镜像创建。
在创建页面,按照页面提示完成应用基本信息配置、容器配置、服务配置和定时伸缩配置,创建一个支持CronHPA的Deployment。
具体步骤及配置项说明,请参见创建无状态工作负载Deployment。下文仅介绍主要配置项。
应用基本信息:配置应用的名称、副本数量等。
容器配置:配置镜像,并配置容器所需的CPU和内存资源。
高级配置:
在访问设置区域,单击服务(Service)对应的创建,配置Service。
在伸缩配置区域,勾选定时伸缩的开启,按照页面提示安装组件(已安装时可忽略),然后配置定时伸缩的条件和参数。
定时任务名称:CronHPA任务的名称。
目标副本数:当到达设定计划时间时,应用副本数自动伸缩至该值。
调度周期:设置调度的周期。关于为CronHPA任务设置调度周期的更多信息,请参见AliyunContainerService/kubernetes-cronhpa-controller。
为已有应用创建CronHPA任务
在工作负载页面创建
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面的操作列,单击目标Deployment对应的详情,然后单击容器伸缩页签,在定时伸缩区域,按照页面提示安装CronHPA组件(如已安装,可忽略)并单击创建,配置CronHPA。
配置项
描述
任务名称
CronHPA任务的名称。
目标副本数
当到达设定计划时间时,应用副本数自动伸缩至该值。
调度周期
设置的调度周期。关于为CronJob任务设置调度周期的更多信息,请参见AliyunContainerService/kubernetes-cronhpa-controller。
在工作负载伸缩页面创建
此页面目前白名单开放中。如需使用,请提交工单申请。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择
。在页面右上角,单击创建自动伸缩,选择目标工作负载,然后在水平伸缩页签下勾选CronHPA选项,按照页面提示安装组件(如已安装,可忽略),并配置CronHPA策略。
定时自动伸缩名称:自定义CronHPA的名称。
任务名称:自定义CronHPA任务的名称。
目标副本数:当到达设定计划时间时,应用副本数自动伸缩至该值。
调度周期:设置调度的周期。关于为CronHPA任务设置调度周期的更多信息,请参见AliyunContainerService/kubernetes-cronhpa-controller。
相关操作
查看、添加或修改CronHPA任务
CronHPA任务创建后,您可以在CronHPA列表查看CronHPA任务状态和列表。如果您想添加CronHPA任务,或修改原有CronHPA配置,您可以通过以下入口实现。
工作负载伸缩入口
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择
。在水平伸缩页签下的CronHPA区域,单击操作列的编辑。
工作负载入口(以无状态应用为例,其他工作负载类型步骤类似)
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面的操作列,单击目标Deployment对应的详情,然后单击容器伸缩页签,在定时伸缩区域的操作列,单击任务添加或编辑。
实现CronHPA与HPA的协同
由于CronHPA和HPA两者无法相互感知,如果您的应用使用YAML同时配置了CronHPA和HPA,可能会出现两种配置独立工作,后执行操作覆盖了先执行操作的现象。为了解决这个问题,ACK提供了CronHPA兼容HPA的方案——当检测到两者同时存在时,将HPA作为CronHPA的扩缩容对象,从而实现对该HPA定义对象(例如Deployment)的定时扩缩容。
详细信息,请参见实现CronHPA与HPA的协同。
常见问题
如何卸载ack-kubernetes-cronhpa-controller组件?
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在Helm页面,查看是否存在ack-kubernetes-cronhpa-controller组件。
如果存在,请单击该组件右侧操作列下的删除。
重要通过Helm方式删除该组件,不会删除CRD和已创建的Task资源。如需彻底删除CronHPA相关资源,请手动删除。
如不存在,请继续操作下一步。
在集群管理页左侧导航栏,选择 。
在组件管理页面,找到ack-kubernetes-cronhpa-controller组件,单击右下方的卸载。