十秒玩转容器定时伸缩(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任务中进行修改,然后单击确定
  1. 编辑对话框中,单击任务名称右上角的删除图标,然后单击确定,可以对CronHPA任务进行删除。

查看运行状态

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

相关文档

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
弹性计算 Cloud Native Linux
带你读《企业级云原生白皮书项目实战》——3.2.11 伸缩与优化
带你读《企业级云原生白皮书项目实战》——3.2.11 伸缩与优化
138 0
伸缩容器及伸缩方向
伸缩容器及伸缩方向
|
监控 Cloud Native 容器
阿里云容器服务Kubernetes 基于GPU指标自动伸缩
### 基于GPU的指标扩缩容 在深度学习训练中,训练完成的模型,通过Serving服务提供模型服务。本文介绍如何构建弹性自动伸缩的Serving服务。 Kubernetes 支持HPA模块进行容器伸缩,默认支持CPU和内存等指标。
4459 0
|
Docker 容器 负载均衡
如何实现 Service 伸缩?- 每天5分钟玩转 Docker 容器技术(97)
上一节部署了只有一个副本的 Service,不过对于 web 服务,我们通常会运行多个实例。这样可以负载均衡,同时也能提供高可用。 swarm 要实现这个目标非常简单,增加 service 的副本数就可以了。
1461 0
|
应用服务中间件 API Docker
使用SwarmKit管理容器伸缩
本文讲的是使用SwarmKit管理容器伸缩【编者的话】本文介绍了使用SwarmKit这个开源工具来扩展多节点系统,包括swarmctl和swarms这两个工具、swarm kit的特性和概念以及在Docker 1.12版本中集成的SwarmKit的使用。
1659 0
|
6月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1026 108