十秒玩转容器定时伸缩(CronHPA)-阿里云开发者社区

开发者社区> 云原生> 正文
登录阅读全文

十秒玩转容器定时伸缩(CronHPA)

简介: 本文主要介绍容器定时伸缩适用场景和意义,以及如何通过阿里云容器服务控制台快速配置和使用容器定时伸缩。

前言

容器技术的发展让软件交付和运维变得更加标准化、轻量化、自动化,这使得动态调整负载的容量变成一件非常简单的事情。同时,对于大部分互联网的在线应用而言,负载的峰谷分布是存在一定规律的,例如下图是一个典型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,然后单击安装即可。

image.png

ack-kubernetes-cronhpa-controller组件安装成功后组件状态为“已安装”
image.png
**

创建定时伸缩CronHPA任务

在创建应用的高级配置页面的伸缩配置区域,选中定时伸缩右侧开启为应用创建定时伸缩任务。(关于创建应用的详细步骤,请参见使用镜像创建无状态Deployment应用或者使用镜像创建有状态StatefulSet应用。)
容器服务管理控制台会自动检查是否已安装CronHPA组件。如果CronHPA组件未被安装,页面提示点击安装。安装CronHPA组件后,页面显示定时伸缩任务的创建配置。
每个CronHPA任务配置名称、目标副本数和调度周期三个参数即可。可通过“添加任务”添加多个CronHPA任务。
image.png
配置参数的详细描述如下表所示。

参数 描述
定时任务名称 为定时任务定义名称。每个任务的名称是唯一的,不能与其他任务名称重复。
目标副本数 当到达设定计划时间时,应用副本数自动伸缩至该值。
调度周期 设置调度周期。关于为定时伸缩任务设置调度周期的详细描述,请参见AliyunContainerService/kubernetes-cronhpa-controller

点击“创建”,应用创建时会同时创建CronHPA任务。创建成功后显示如下图结果。
image.png

修改定时伸缩任务

  1. 工作负载详情页面进入容器伸缩页面。

  2. 容器伸缩页签的定时伸缩(CronHPA)区域,单击目标任务右侧操作下的任务添加或编辑

  3. 编辑对话框中,单击添加任务进行任务创建或者点击已有CronHPA任务中进行修改,然后单击确定

  4. 编辑对话框中,单击任务名称右上角的删除图标,然后单击确定,可以对CronHPA任务进行删除。

    查看运行状态

    运行已提交(待运行时)状态显示为“Submitted”。
    image.png
    运行成功时状态显示为“Succeed”,通过右上角小圆点可查看详情。
    image.png

相关文档

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云原生
使用钉钉扫一扫加入圈子
+ 订阅

云原生时代,是开发者最好的时代

其他文章