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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 本实验是基于阿里云容器服务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搭建和管理企业级网站应用
相关文章
|
6天前
|
Cloud Native 云计算 Docker
云原生之旅:从容器化到微服务架构
【9月更文挑战第27天】本文将引领读者进入云原生的世界,探索如何通过容器化技术实现应用的快速部署与扩展,并深入理解微服务架构的设计哲学。我们将一起见证代码如何转化为可在云端无缝运行的服务,同时讨论云原生生态中的最佳实践和面临的挑战。
|
2天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
4天前
|
Kubernetes Cloud Native 持续交付
探索云原生架构:打造弹性可扩展的应用
【9月更文挑战第29天】在云计算的浪潮中,云原生架构成为企业追求高效、灵活和可靠服务的关键。本文将深入解析云原生的概念,探讨如何利用容器化、微服务和持续集成/持续部署(CI/CD)等技术构建现代化应用。我们将通过一个简易的代码示例,展示如何在Kubernetes集群上部署一个基于Node.js的应用,从而揭示云原生技术的强大能力和潜在价值。
14 6
|
5天前
|
监控 Cloud Native 持续交付
云原生架构:构建弹性与高效的现代应用##
随着云计算技术的不断成熟,云原生架构逐渐成为企业技术转型的重要方向。本文将深入探讨云原生的核心概念、主要技术和典型应用场景,以及如何通过云原生架构实现高可用性、弹性扩展和快速迭代,助力企业在数字化转型中保持竞争优势。 ##
23 6
|
3天前
|
Cloud Native 持续交付 微服务
云原生时代的微服务架构实践
【9月更文挑战第30天】随着云计算技术的不断进步,云原生已经成为现代软件开发的重要趋势。本文将通过深入浅出的方式,介绍如何在云原生环境下设计并实施微服务架构,以及如何利用容器化技术和自动化工具来提升服务的可维护性和可扩展性。我们将一起探讨微服务架构的核心原则、优势,以及在云平台中部署和管理微服务的最佳实践。无论你是初学者还是有经验的开发者,这篇文章都将成为你探索云原生和微服务世界的一盏明灯。
|
6天前
|
运维 Cloud Native 持续交付
云原生架构:构建未来应用的基石
本文将深入探讨云原生架构的核心概念、主要优势以及实际应用案例,揭示其在现代IT领域的重要性。通过详细解析云原生技术的各个方面,帮助读者更好地理解和应用这一前沿技术。
|
6天前
|
监控 Cloud Native 持续交付
云原生时代的微服务架构设计原则与实践
【9月更文挑战第27天】本文深入探讨了在云原生环境下,如何高效地实施微服务架构。通过分析微服务的基本概念、设计原则和关键技术,结合实际案例,指导读者理解并应用微服务架构于云计算项目之中。文章旨在为软件开发者和架构师提供一条清晰的路径,以实现更加灵活、可扩展且易于维护的系统。
|
3天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
阿里云ACK容器服务生产级可观测体系建设实践
|
4天前
|
Cloud Native 持续交付 Docker
深入解析Docker容器化技术及其在生产环境中的应用
深入解析Docker容器化技术及其在生产环境中的应用
10 0
|
6天前
|
人工智能 Cloud Native 调度
阿里云容器服务在AI智算场景的创新与实践
2024年云栖大会,我们总结过往支持AI智算基础底座的实践经验、发现与思考,给出《容器服务在AI智算场景的创新与实践》的演讲。不仅希望将所做所想与客户和社区分享,也期待引出更多云原生AI领域的交流和共建。
下一篇
无影云桌面