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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文主要介绍容器定时伸缩适用场景和意义,以及如何通过阿里云容器服务控制台快速配置和使用容器定时伸缩。

前言

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

相关文档

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
弹性计算 Cloud Native Linux
带你读《企业级云原生白皮书项目实战》——3.2.11 伸缩与优化
带你读《企业级云原生白皮书项目实战》——3.2.11 伸缩与优化
伸缩容器及伸缩方向
伸缩容器及伸缩方向
|
监控 Cloud Native 容器
阿里云容器服务Kubernetes 基于GPU指标自动伸缩
### 基于GPU的指标扩缩容 在深度学习训练中,训练完成的模型,通过Serving服务提供模型服务。本文介绍如何构建弹性自动伸缩的Serving服务。 Kubernetes 支持HPA模块进行容器伸缩,默认支持CPU和内存等指标。
4248 0
|
Docker 容器 负载均衡
如何实现 Service 伸缩?- 每天5分钟玩转 Docker 容器技术(97)
上一节部署了只有一个副本的 Service,不过对于 web 服务,我们通常会运行多个实例。这样可以负载均衡,同时也能提供高可用。 swarm 要实现这个目标非常简单,增加 service 的副本数就可以了。
1342 0
|
应用服务中间件 API Docker
使用SwarmKit管理容器伸缩
本文讲的是使用SwarmKit管理容器伸缩【编者的话】本文介绍了使用SwarmKit这个开源工具来扩展多节点系统,包括swarmctl和swarms这两个工具、swarm kit的特性和概念以及在Docker 1.12版本中集成的SwarmKit的使用。
1532 0
|
弹性计算 监控 容器
利用阿里云容器服务实现自定义节点伸缩
容器服务目前提供创建节点触发器的功能,调用节点触发器,并可以利用openAPI查看扩容出来的ECS节点方便管理和自动化的需求. 本文将向您介绍完成这一能力的步骤。
6432 0
|
8天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
4天前
|
关系型数据库 MySQL API
|
20天前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第12天】
56 5