容器应用的高弹性架构实践

简介: 本实验是基于阿里云容器服务ACK Serverless,通过配置集群的容器水平伸缩(HPA)和容器定时伸缩(CronHPA)来应对业务流量高峰以及定时、批量计算业务

实验介绍

本实验是基于阿里云容器服务ACK Serverless,通过配置集群的容器水平伸缩(HPA)和容器定时伸缩(CronHPA)来应对业务流量高峰以及定时、批量计算业务,实验主要分为以下几个步骤:

  1. 资源准备,包括专有网络VPC、镜像仓库ACR、文件存储NAS、云数据库RDS、容器服务ACK Serverless的集群资源及相关配置;

  2. 在ACK Serverless集群中部署wordpress应用;

  3. 配置容器定时伸缩(CronHPA),并观察定时扩缩效果;

  4. 配置容器水平伸缩(HPA);

  5. 使用压测工具Apache Bench对应用进行压力测试,验证容器水平伸缩(HPA)的效果;

  6. 同时配置容器水平伸缩(HPA)与容器定时伸缩(CronHPA),并验证容器水平伸缩(HPA)与容器定时伸缩(CronHPA)是如何进行兼容性扩缩。

容器应用的高弹性架构实践

配置NAS

添加NAS挂载点,在控制台顶端搜索框搜索文件存储,点击文件存储NAS登录NAS管理控制台,或将以下地址复制进远程桌面的浏览器地址栏:

https://nasnext.console.aliyun.com/cn-hangzhou/filesystem

在左侧导航栏,选择文件系统 > 文件系统列表。在文件系统列表页面,找到Clouder_Nas对应的更多按钮,点击添加挂载点。

image.png

NAS挂载点配置参数如下:

  • 挂载点类型:专有网络

  • VPC网络:clouder_attestation(10.0.0.0/8)

  • 交换机:K8S-02(10.0.1.0/24)

  • 权限组:VPC默认权限组(全部允许)

image.png

通过镜像在ACK Serverless集群中快速部署应用

在控制台搜索框中搜索ACK Serverless,并点击搜索结果中控制台下的Serverless容器服务按钮进入容器服务控制台,或将以下地址复制进远程桌面的浏览器地址栏:

https://cs.console.aliyun.com/#/k8s/cluster/list

在容器服务控制台,找到目标集群:clouder-attestation,确认集群状态为运行中,点击目标集群名称进入集群管理控制台。

image.png

进入ACK Serverless集群后,在左侧存储标签下选择存储卷,并点击创建,并按照以下配置参数进行设置:

  • 存储卷类型:NAS

  • 名称:wordpress-pv

  • 存储驱动:CSI

  • 挂载点域名:选择名称为Clouder_Nas的挂载点

image.png

image.png

选择存储声明标签,点击创建,并按照以下配置参数进行设置:

  • 存储声明类型:NAS

  • 名称:wordpress-pvc

  • 分配模式:已有存储卷

  • 已有存储卷:选择上一步骤创建的wordpress-pv

最后点击创建。

image.png

image.png

在左侧工作负载标签下选择无状态,点击右上角使用镜像创建

image.png

在应用基本信息配置页面按照以下配置参数进行设置,在点击下一步:

  • 应用名称:wordpress

  • 副本数量:2

image.png

进入容器配置,按照以下配置参数进行设置,在点击下一步:

  • 镜像名称:registry.cn-hangzhou.aliyuncs.com/wordpress_clouder/wordpress-hpa

  • 镜像TAG:点击后面的选择镜像TAG,选择标签V1,点击确定按钮

  • 镜像拉取策略:优先使用本地镜像(IfNotPresent)

  • 所需资源:1Core 2GB

image.png

在端口设置中,点击新增按钮,并按照以下参数设置:

  • 名称:tcp-80

  • 容器端口:80

  • 协议:TCP

image.png

在数据卷设置中,点击增加云存储声明,并按照以下参数设置:

  • 名称:wordpress-pvc

  • 挂载源:wordpress-pvc

  • 容器路径:/var/www/html

设置完成后,点击右侧上方下一步按钮,进入高级配置。

image.png

在高级配置界面,点击服务后的创建按钮,并按照以下参数设置:

  • 名称:wordpress-svc

  • 外部流量策略:Cluster

  • 端口映射名称:tcp-80

  • 服务端口:80

  • 容器端口:80

  • 协议:TCP

设置完成后点击创建,完成服务设置。

image.png

在点击高级配置的右下角创建按钮,等待创建显示成功后点击查看应用详情。待容器组状态都为 Running 时,完成应用创建

image.png

image.png

点击访问方式按钮,获取外部端点地址,将获取到的外部地址和端口输入到浏览器进行访问,可以看到wordpress初始化界面。

image.png

image.png

但是因为此时还未创建RDS,所以无需继续。

访问并配置WordPress应用

在控制台搜索框中搜索RDS,并点击搜索结果中控制台下的云数据库RDS版按钮进入云数据库RDS控制台,或将以下地址复制进远程桌面的浏览器地址栏:

https://rdsnext.console.aliyun.com/rdsList/cn-hangzhou/basic

进入RDS控制台,在实例列表找到目标实例,点击实例ID进入RDS实例管理界面。

image.png

在账号管理界面,点击创建账号,并按照以下参数设置:

  • 数据库账号:wpadmin

  • 账号类型:普通账号

  • 密码:Admin@123

image.png

在数据库管理界面,点击创建数据库,并按照以下参数设置:

  • 数据库(DB)名称:wordpress

  • 支持字符集:utf8

  • 授权账号:wpadmin

image.png

在数据库连接界面获取数据库连接地址,这里复制内网地址使用。

image.png

回到刚才的wordpress界面,选择简体中文,点击继续,跳转页面后,在点击现在就开始。

image.png

在数据库配置界面,进行配置:

  • 数据库名:wordpress

  • 用户名:wpadmin

  • 密码:Admin@123

  • 数据库主机:RDS数据库内网地址

  • 表前缀:使用默认值

image.png

点击提交后,跳转到下一个页面在点击现在安装来配置WordPress账号信息。

在账号设置页面,

  • 站点标题:wordpress

  • 用户名:admin

  • 密码:Admin@123。勾选确认使用弱密码

  • 您的电子邮件:admin@wordpress.com

再点击安装WordPress来完成安装。

image.png

在安装完成后,点击登录按钮进入WordPress登录界面。

  • 用户名:admin

  • 密码:Admin@123

点击登录按钮,进入WordPress系统。

image.png

配置容器定时伸缩

将以下地址复制进远程桌面的浏览器地址栏,进入ACK Serverless控制台:

https://cs.console.aliyun.com/#/k8s/cluster/list

image.png

点击集群名称进入集群管理页,在集群的工作负载中,点击无状态应用,选择wordpress应用更多选项中的弹性伸缩,点击进入弹性伸缩配置界面

image.png

配置定时伸缩(CronHPA)需要安装ack-kubernetes-cronhpa-controller组件,在弹性伸缩配置界面,我们可以直接点击安装。

image.png

安装完成后,点击定时伸缩(CronHPA)的创建按钮,并按照以下参数设置扩容和缩容任务:

  • 任务名称:扩容

  • 目标副本数量:5

  • 调度周期:按小时,每3分钟执行一次

image.png

点击添加任务,再添加一个缩容任务。

  • 任务名称:缩容

  • 目标副本数量:1

  • 调度周期:按小时,每5分钟执行一次

image.png

任务配置完成后点击确定,等待3分钟,然后在容器组界面观察集群的伸缩状态,首先会由原来的2个容器扩容到5个,然后再由5个容器缩容到1个容器,以此循环执行扩容和缩容任务。

Succeed代表CronHPA任务执行成功。

image.png

Pod容器组数量缩减至1个。

image.png

Pod容器组数量扩容至5个,ContainerCreating 代表容器组创建中。

image.png

按照定时任务设置,5个容器组均创建完成,Running 状态。

image.png

在容器组伸缩过程中,我们可以刷新wordpress页面,可以发现wordpress页面是一直可以访问的,不会因为容器组的伸缩导致应用中断。

image.png

观察完成后,我们返回伸缩配置界面,在集群的工作负载中,点击无状态应用,选择wordpress应用更多选项中的弹性伸缩,点击进入弹性伸缩配置界面,将配置的定时伸缩(CronHPA)任务删除。

image.png

删除完成后,我们在将应用的容器数量手动调整到2个,点击右上角的伸缩按钮,将所需容器组数量设置为2,点击确定,如果数量已经是2就无须调整, 手动调整容器组数量实时生效。

image.png

使用压测工具Apache Bench对站点进行压测

在控制台搜索框中搜索ECS,并点击搜索结果中控制台下的云服器ECS按钮进入云服务器ECS控制台,或将以下地址复制进远程桌面的浏览器地址栏:

https://ecs.console.aliyun.com/server/region/cn-hangzhou

选择华东1(杭州)地域,点击创建的ECS实例右侧的远程连接按钮连接服务器ECS。

image.png

连接上服务器ECS后,使用一下命令安装ab压测工具:

yum -y install httpd-tools

image.png

执行下列命令开始压测,对http://x.x.x.x/站点模拟发起500的并发请求,总共请求50000次,其中-n参数表示请求数,-c参数表示并发数:

ab -n 50000 -c 500 http://***.***.***.***/

image.png

【操作注意】上述URL地址中的 ... 使用实验集群中wordpress实际的 外部端点 地址进行替换(外部端点获取方式如下图,ACK Serverless集群管理页面 > 无状态应用wordpress > 访问方式 > 外部端点);命令中前后的斜杠"/"都需要保留。

在压测过程中,我们返回ACK Serverless集群的wordpress应用,在集群的工作负载中,点击无状态应用,选择wordpress应用点击进入。

image.png

进入wordpress应用后,我们点击容器组的监控图标,可以观察容器组的资源使用率情况,可以发现容器组中的2个容器CPU资源都会跑满。

image.png

此时,我们可以访问或者刷新我们的wordpress应用外部端点访问地址,可以发现站点响应非常慢,并且还可能会出现连接超时无法访问的现象。

image.png

观察完成后,我们返回ECS连接界面,使用Ctrl+C组合键结束ab压测,程序终止后,可以查看到压测的一些信息显示。

image.png

配置容器水平伸缩并进行压测

由于指标伸缩(HPA)需要去获取metrics的监控数据,所以需要先安装metrics-server插件,点击左侧运维管理,选择组件管理,筛选标签选择日志与监控,找到metrics-server组件,点击进行安装。

image.png

在集群的工作负载中,点击无状态应用,选择wordpress应用更多选项中的弹性伸缩,回到弹性伸缩配置界面。

image.png

在点击指标伸缩(HPA)的创建按钮,并按照以下参数设置扩容和缩容任务:

  • 名称:hpa

  • 指标:点击添加,监控项选择CPU使用量,阈值填入60

  • 最大容器数量:10

  • 最小容器数量:2

在点击确定进行创建。

image.png

继续在连接的服务器ECS上执行以下命令进行压测,这次我们增加压测的请求数量从而增加压测时间,以便压力持续进行触发容器组伸缩。

image.png

在压测过程中,我们返回伸缩配置界面,可以查看到当前容器组的CPU使用率,当CPU使用率超过我们配置的60%阈值以后,会触发hpa伸缩任务来扩展容器组数量。

image.png

点击容器组,我们可以观察到容器组在进行扩展中。

image.png

在压测过程中,我们可以持续观察容器组的CPU资源使用率以及容器的副本数量,可以发现容器组会随着压测的持续自动进行扩容,在容器组伸缩过程中,我们可以刷新wordpress页面,可以发现wordpress页面是一直可以访问的,不会因为容器组的伸缩导致应用中断。(因压测一直在持续,仍然可能会出现访问页面缓慢,待容器组伸缩到能够覆盖压测的流量,既可恢复正常访问速度)

image.png

自动扩容完成后,我们返回ECS连接界面,使用Ctrl+C组合键结束ab压测,程序终止后,等待5-10分钟。

image.png

CPU资源使用率下去后,可以发现容器的副本数量会自动降到我们设置的最小副本数量。

image.png

同时配置容器水平伸缩与定时伸缩

点击上一步骤中创建的指标伸缩(HPA)任务右边的编辑按钮,将任务的最大容器数量设置为10,最小容器数量设置为1,点击确定。

image.png

然后在点击右上角的伸缩按钮,将所需容器组数量设置为1,点击确定。

image.png

点击定时伸缩(CronHPA)的创建按钮,新增任务:

  • 任务名称:扩缩容

  • 目标副本数量:5

  • 调度周期:按小时,每2分钟执行一次

image.png

等待2分钟后,我们查看CronHPA任务状态为Succeed后,可以观察到HPA的任务最小副本数变更为了5,同时Pod容器组数量也增加到了5个。

image.png

点击CronHPA任务的任务添加或编辑按钮,将目标副本数量设置为:1,其它设置。

image.png

等待2分钟后,我们查看CronHPA任务状态为Succeed后,可以观察到HPA的任务最小副本数变更为了1,同时Pod容器组数量也相应减少到了1个。

image.png

点击CronHPA任务的任务添加或编辑按钮,将目标副本数量设置为:15,其它设置不变。

image.png

等待2分钟后,我们查看CronHPA任务状态为Succeed后,可以观察到HPA的任务最大和最小副本数都变更为了15,同时Pod容器组数量也相应增加到了15个。

image.png

由此我们观察到CronHPA兼容HPA的方式,CronHPA不会直接调整容器组数量,而是通过HPA来进行操作。

至此我们就完成了本实验任务的全部操作。

相关实践学习
使用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
相关文章
|
11月前
|
数据采集 监控 API
移动端性能监控探索:iOS RUM SDK 技术架构与实践
阿里云 RUM SDK 作为一款性能体验监控采集工具,可以作为辅助 App 运维的强有力助手,提升您的问题排查效率。
549 76
|
11月前
|
存储 运维 分布式计算
零售数据湖的进化之路:滔搏从Lambda架构到阿里云Flink+Paimon统一架构的实战实践
在数字化浪潮席卷全球的今天,传统零售企业面临着前所未有的技术挑战和转型压力。本文整理自 Flink Forward Asia 2025 城市巡回上海站,滔搏技术负责人分享了滔搏从传统 Lambda 架构向阿里云实时计算 Flink 版+Paimon 统一架构转型的完整实战历程。这不仅是一次技术架构的重大升级,更是中国零售企业拥抱实时数据湖仓一体化的典型案例。
726 0
|
12月前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
11月前
|
存储 SQL 消息中间件
从 ClickHouse 到 StarRocks 存算分离: 携程 UBT 架构升级实践
查询性能实现从秒级到毫秒级的跨越式提升
|
11月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
888 52
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
11月前
|
人工智能 JavaScript 前端开发
GenSX (不一样的AI应用框架)架构学习指南
GenSX 是一个基于 TypeScript 的函数式 AI 工作流框架,以“函数组合替代图编排”为核心理念。它通过纯函数组件、自动追踪与断点恢复等特性,让开发者用自然代码构建可追溯、易测试的 LLM 应用。支持多模型集成与插件化扩展,兼具灵活性与工程化优势。
824 6
|
12月前
|
人工智能 Cloud Native 中间件
划重点|云栖大会「AI 原生应用架构论坛」看点梳理
本场论坛将系统性阐述 AI 原生应用架构的新范式、演进趋势与技术突破,并分享来自真实生产环境下的一线实践经验与思考。
|
11月前
|
机器学习/深度学习 自然语言处理 算法
48_动态架构模型:NAS在LLM中的应用
大型语言模型(LLM)在自然语言处理领域的突破性进展,很大程度上归功于其庞大的参数量和复杂的网络架构。然而,随着模型规模的不断增长,计算资源消耗、推理延迟和部署成本等问题日益凸显。如何在保持模型性能的同时,优化模型架构以提高效率,成为2025年大模型研究的核心方向之一。神经架构搜索(Neural Architecture Search, NAS)作为一种自动化的网络设计方法,正在为这一挑战提供创新性解决方案。本文将深入探讨NAS技术如何应用于LLM的架构优化,特别是在层数与维度调整方面的最新进展,并通过代码实现展示简单的NAS实验。
506 0
|
11月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路