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

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 本实验是基于阿里云容器服务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来进行操作。

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

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3天前
|
监控 Java 测试技术
现代化软件开发中的微服务架构设计与实践
随着软件开发的发展,传统的单体应用架构已经无法满足现代化应用的需求。微服务架构作为一种新的设计理念,为软件开发提供了更灵活、可扩展的解决方案。本文将介绍微服务架构的设计原则、实践方法以及相关技术工具,并结合实例展示其在现代化软件开发中的应用。
|
2天前
|
Cloud Native 安全 持续交付
构建未来:云原生架构在现代企业中的应用与挑战
【5月更文挑战第1天】 随着数字化转型的深入,云原生技术以其灵活性、可扩展性和敏捷性成为现代企业IT架构的核心。本文将探讨云原生架构的关键组件,包括容器化、微服务、持续集成/持续部署(CI/CD)以及DevOps实践,并分析它们如何共同塑造企业的运营模式。同时,文章还将讨论在采纳云原生过程中企业可能遇到的挑战,如安全性问题、技术复杂性以及组织文化的转变,并提出应对策略。
16 8
|
2天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第1天】 随着云计算的普及和企业数字化转型的加速,传统的IT运维模式已无法满足快速迭代和高可用性的要求。本文探讨了如何通过DevOps文化和容器化技术的融合来构建一个高效、稳定且可扩展的云基础设施。文章首先回顾了DevOps的核心理念及其对运维工作的影响,随后详细介绍了容器化技术的基本概念、优势以及在现代云环境中的关键作用。接着,文中以一系列真实案例为基础,分析了将DevOps与容器化相结合时所面临的挑战和解决方案,并提出了一套实施框架。最后,文章总结了这种融合实践对提高运维效率、加快产品上市速度和保障系统稳定性的积极影响,同时对未来的技术趋势进行了展望。
|
2天前
|
敏捷开发 运维 测试技术
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【4月更文挑战第30天】在数字化转型的浪潮中,企业对软件交付速度和质量的要求日益提高。自动化运维作为提升效率、确保稳定性的关键手段,其重要性不言而喻。本文将探讨如何利用容器技术构建一个高效的自动化运维体系,实现从代码提交到产品上线的持续集成(CI)与持续部署(CD)。通过分析现代容器技术与传统虚拟化的差异,阐述容器化带来的轻量化、快速部署及易于管理的优势,并结合实例讲解如何在实际环境中搭建起一套完善的CI/CD流程。
|
2天前
|
Kubernetes Devops Docker
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【4月更文挑战第30天】 在当今快速迭代和持续交付的软件发展环境中,传统的IT运维模式已不足以满足企业对效率和稳定性的双重需求。本文将深入探讨如何通过整合DevOps理念和容器化技术来构建一个既高效又稳定的云基础设施。文中不仅阐述了DevOps的核心原则、流程自动化的重要性以及容器化技术的基础知识,还提供了一个详细的实施案例,帮助读者理解这两种技术如何协同工作,以支持复杂的应用程序部署和管理。
|
3天前
|
前端开发 JavaScript 安全
【TypeScript技术专栏】TypeScript在微前端架构中的应用
【4月更文挑战第30天】微前端架构通过拆分应用提升开发效率和降低维护成本,TypeScript作为静态类型语言,以其类型安全、代码智能提示和重构支持强化这一架构。在实践中,TypeScript定义公共接口确保跨微前端通信一致性,用于编写微前端以保证代码质量,且能无缝集成到构建流程中。在微前端架构中,TypeScript是保障正确性和可维护性的有力工具。
|
3天前
|
运维 Kubernetes 持续交付
构建高效自动化运维系统:基于容器技术的持续集成与持续部署实践
【4月更文挑战第30天】 在快速发展的云计算时代,传统的运维模式已无法满足敏捷开发和快速迭代的需求。本文将介绍如何利用容器技术搭建一套高效自动化运维系统,实现软件的持续集成(CI)与持续部署(CD)。文章首先探讨了现代运维面临的挑战,接着详细阐述了容器技术的核心组件和工作原理,最后通过实际案例展示了如何整合这些组件来构建一个可靠、可扩展的自动化运维平台。
|
3天前
|
消息中间件 监控 JavaScript
Node.js中的微服务架构:构建与实践
【4月更文挑战第30天】本文探讨了在Node.js中构建微服务的实践,包括定义服务边界、选择框架(如Express、Koa或NestJS)、设计RESTful API、实现服务间通信(HTTP、gRPC、消息队列)、错误处理、服务发现与负载均衡,以及监控和日志记录。微服务架构能提升应用的可伸缩性、灵活性和可维护性。
|
3天前
|
消息中间件 测试技术 API
构建高效微服务架构:从理论到实践
【4月更文挑战第30天】 随着现代软件开发的演进,微服务架构成为了企业追求敏捷、可扩展和容错性的关键解决方案。本文将深入探讨构建高效微服务架构的核心原则和策略,并通过一个实际案例来展示如何将这些理论应用于生产环境。我们将重点讨论服务的划分、通信机制、数据一致性以及持续集成与部署的实践,旨在为开发者提供一个清晰、可行的技术蓝图,以支持快速迭代和系统的稳健运行。
|
3天前
|
运维 监控 负载均衡
探索微服务架构下的服务网格(Service Mesh)实践之路
【4月更文挑战第30天】 在现代云计算的大背景下,微服务架构以其灵活性和可扩展性成为众多企业转型的首选。然而,随着服务的激增和网络交互的复杂化,传统的服务通信模式已无法满足需求,服务网格(Service Mesh)应运而生。本文通过分析服务网格的核心组件、运作机制以及在企业中的实际应用案例,探讨了服务网格在微服务架构中的关键作用及其带来的变革,同时提出了实施过程中面临的挑战和解决策略。