前言
容器技术的发展让软件交付和运维变得更加标准化、轻量化、自动化,这使得动态调整负载的容量变成一件非常简单的事情。同时,对于大部分互联网的在线应用而言,负载的峰谷分布是存在一定规律的,例如下图是一个典型web应用的负载曲线。如果使用纯静态的容量规划方式进行应用管理与部署,必然造成很多的资源浪费。当负载的容量调整变得如此简单后,用户期望能借此更好地实现动态容量规划,从而降低成本。是否可以通过弹性的方式来解决呢?如果仅使用标准的HPA,由于它是基于指标阈值进行伸缩的,会存在一定的时延。而对于上图中负载的峰值毛刺还是非常尖锐的情况,这有可能会由于HPA分钟级别的伸缩时延造成负载数目无法及时变化,短时间内应用的整体负载飙高,响应时间变慢。特别是对于一些游戏业务而言,由于负载过高带来的业务抖动会造成玩家非常差的体验。
为了解决这个场景,阿里云容器服务提供了kube-cronhpa-controller
,专门应对资源画像存在周期性的场景。开发者可以根据资源画像的周期性规律,定义调度周期,提前扩容好服务实例,而在波谷到来后定时回收服务实例底层再结合cluster-autoscaler
的节点伸缩能力,提供资源成本的节约。
解决方案确定后,便捷性成了用户接受和使用的门槛。在容器服务控制台对CronHPA进行支持前,CronHPA的使用全黑屏化,客户需要手动通过yaml先创建组件及其所依赖的Kubernetes对象,然后确认组件安装成功后,再通过手动操作CronHPA任务的yaml进行CronHPA任务的创建或者更新。黑屏化和全yaml方式在CronHPA组件及其任务的安装和管理上都相对麻烦、查看CronHPA任务的执行情况不够直观、缺乏对调度周期的编写的验证。在容器服务控制台支持CronHPA后,将CronHPA组件及其任务的管理操作全部白屏化,针对以上问题一一进行了解决:CronHPA组件可以在组件管理中进行一键安装、CronHPA任务通过填写选项的方式进行创建和修改、CronHPA任务的运行状态和详情都在CronHPA任务列表页进行了展示、调度周期模拟器可以为调度周期命令进行可读化地展示避免出错。除此之外,在CronHPA卸载时提供了CronHPA任务存在的提示以免勿删,HPA和CronHPA的约束关系通过控制台操作约束前置,避免设置出错和由此带来的修改成本。
容器服务控制台优化操作点详见下表:
优化点 | CronHPA黑屏化操作 | 容器服务控制台 |
---|---|---|
CronHPA组件安装/卸载 | 编辑多个yaml,手动安装或卸载 | 一键安装/卸载 |
CronHPA任务创建 | 编辑yaml,手动生效 | 每个任务填写3个选项即可 |
CronHPA任务更新 | 编辑yaml,手动生效 | 每个任务编辑对应选项即可 |
CronHPA任务删除 | 编辑yaml,手动生效 | 一键删除 |
CronHPA任务运行状态查看 | 使用命令行查看 | 页面实时展示 |
CronHPA组件误删提示 | 无 | 有 |
CronHPA组件与HPA关联 | 编辑yaml,手动关联 | 自动关联 |
使用方法
安装CronHPA组件
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择运维管理 > 组件管理。
- 在组件管理页面的其他标签下,找到ack-kubernetes-cronhpa-controller,然后单击安装即可。
ack-kubernetes-cronhpa-controller组件安装成功后组件状态为“已安装”
**
创建定时伸缩CronHPA任务
在创建应用的高级配置页面的伸缩配置区域,选中定时伸缩右侧开启为应用创建定时伸缩任务。(关于创建应用的详细步骤,请参见使用镜像创建无状态Deployment应用或者使用镜像创建有状态StatefulSet应用。)
容器服务管理控制台会自动检查是否已安装CronHPA组件。如果CronHPA组件未被安装,页面提示点击安装。安装CronHPA组件后,页面显示定时伸缩任务的创建配置。
每个CronHPA任务配置名称、目标副本数和调度周期三个参数即可。可通过“添加任务”添加多个CronHPA任务。
配置参数的详细描述如下表所示。
参数 | 描述 |
---|---|
定时任务名称 | 为定时任务定义名称。每个任务的名称是唯一的,不能与其他任务名称重复。 |
目标副本数 | 当到达设定计划时间时,应用副本数自动伸缩至该值。 |
调度周期 | 设置调度周期。关于为定时伸缩任务设置调度周期的详细描述,请参见AliyunContainerService/kubernetes-cronhpa-controller。 |
点击“创建”,应用创建时会同时创建CronHPA任务。创建成功后显示如下图结果。
修改定时伸缩任务
- 工作负载详情页面进入容器伸缩页面。
- 在容器伸缩页签的定时伸缩(CronHPA)区域,单击目标任务右侧操作下的任务添加或编辑。
- 在编辑对话框中,单击添加任务进行任务创建或者点击已有CronHPA任务中进行修改,然后单击确定。
查看运行状态
运行已提交(待运行时)状态显示为“Submitted”。
运行成功时状态显示为“Succeed”,通过右上角小圆点可查看详情。