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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 本实验是基于阿里云容器服务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来进行操作。

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

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
23 1
|
5天前
|
消息中间件 运维 开发者
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在后端开发中的应用,从其核心概念、设计原则到实际部署过程中面临的挑战进行了全面剖析。不同于传统的单体应用,微服务通过将复杂系统拆解为一系列小型、独立的服务,提高了系统的灵活性和可维护性。然而,这种架构的转变也伴随着服务间通信、数据一致性、部署复杂性等新问题。本文旨在为开发者提供一套应对这些挑战的策略,同时分享一些成功案例,以期促进微服务架构的有效实施。 ####
|
7天前
|
缓存 负载均衡 API
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的可扩展性、灵活性及易于维护的特点,成为众多企业后端开发的首选架构模式。本文将深入探讨微服务架构的核心理念,通过具体案例分析其在实际应用中的实践策略与面临的挑战,为读者提供一份详尽的微服务架构实施指南。 ####
|
9天前
|
消息中间件 负载均衡 测试技术
后端开发中的微服务架构实践与挑战####
本文旨在探讨微服务架构在后端开发中的应用实践,深入分析其带来的优势与面临的挑战。通过剖析真实案例,揭示微服务转型过程中的关键技术决策、服务拆分策略、以及如何有效应对分布式系统的复杂性问题。文章还将提供一套评估企业是否适合采用微服务架构的框架,帮助读者更好地理解这一架构模式,并为企业的技术选型提供参考。 ####
|
8天前
|
运维 监控 安全
深入理解微服务架构:设计原则、挑战与实践
深入理解微服务架构:设计原则、挑战与实践
|
4天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
29 0
|
5天前
|
安全 测试技术 持续交付
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在现代后端开发中的应用,通过一个虚构项目案例,详细阐述了从单体架构向微服务架构转型的过程、面临的挑战及解决方案。不同于常规摘要的概述性质,本文摘要旨在直接引入核心议题——如何有效实施微服务以提升系统的可扩展性、灵活性和容错能力,同时揭示转型过程中常见的技术陷阱与最佳实践策略,为读者提供实战指南。 ####
13 0
|
6天前
|
监控 持续交付 API
深入理解微服务架构及其在现代软件开发中的应用
深入理解微服务架构及其在现代软件开发中的应用
13 0
|
6天前
|
JavaScript Linux 持续交付
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
30 0
|
17天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。