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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云服务器 ECS,每月免费额度200元 3个月
简介: 本实验是基于阿里云容器服务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搭建和管理企业级网站应用
相关文章
|
1天前
|
Java 测试技术 持续交付
Java中的异常处理机制探索自动化测试在微服务架构中的实践与挑战
【5月更文挑战第27天】本文将深入探讨Java中的异常处理机制,包括异常的概念、分类以及如何使用try-catch-finally语句进行异常处理。文章还将介绍自定义异常的方法以及在实际开发中如何选择合适的异常处理策略。 【5月更文挑战第27天】 随着软件开发领域向微服务架构的转型,传统的软件测试方法面临诸多挑战。本文旨在探讨自动化测试在微服务环境下的应用实践及所面临的问题。我们将从微服务的特性出发,分析自动化测试的必要性,并深入讨论如何构建一个高效、鲁棒的自动化测试框架。文章还将介绍一系列创新的测试策略和工具选择,以及如何克服微服务带来的分布式复杂性。最后,通过案例研究,展示自动化测试在实
|
1天前
|
运维 Kubernetes PHP
构建高效自动化运维体系:基于容器技术的CI/CD实践深入理解PHP中的命名空间
【5月更文挑战第27天】在现代软件交付过程中,持续集成(CI)与持续部署(CD)已成为提升开发效率、保障产品质量的重要手段。本文旨在探讨如何利用容器技术实现CI/CD的自动化流程,从而构建一个高效的自动化运维体系。通过分析容器技术的核心优势和CI/CD流程的关键要素,我们提出了一种结合Docker、Kubernetes等工具的实践方案,并详细阐述了从代码提交到最终部署的全过程自动化实现方法。 【5月更文挑战第27天】在现代PHP开发中,命名空间是一个不可或缺的功能,它解决了代码库增长时可能出现的类名和函数名冲突问题。本文将深入探讨PHP命名空间的核心概念、实现原理及其在实际项目中的应用,帮助
|
1天前
|
Cloud Native Devops 持续交付
构建未来:云原生架构在现代企业中的应用与挑战
【5月更文挑战第27天】 随着数字化转型的深入,企业对信息技术基础设施的要求不断提高。云原生架构作为一种新兴的技术范式,以其灵活性、可扩展性和敏捷性成为推动企业技术革新的关键力量。本文旨在探讨云原生架构的核心组件、实施策略以及面临的主要挑战,为企业采纳云原生技术提供参考。
|
1天前
|
Cloud Native 安全 持续交付
构建未来应用的基石:云原生架构的演进与实践
【5月更文挑战第27天】 在数字化转型的浪潮中,企业急需灵活、高效且可靠的解决方案以应对市场的快速变化。云原生架构应运而生,其不仅重塑了软件开发和运维的模式,也为企业提供了持续交付和自动化管理的可能性。本文将探讨云原生技术的发展历程,解析其关键组件如容器化、微服务及持续集成/持续部署(CI/CD),并分享如何在实践中有效利用这些技术来构建和维护高度可扩展的系统。
|
1天前
|
监控 Cloud Native 持续交付
构建未来:云原生架构在现代企业中的应用与挑战构建高效微服务架构:策略与实践
【5月更文挑战第27天】 随着数字化转型的深入,企业对技术的依赖日益增强。云原生技术以其灵活性、可扩展性和敏捷性成为推动企业IT架构现代化的关键力量。本文将探讨云原生架构的核心概念、实施策略以及在采纳过程中可能遇到的挑战。通过分析案例和最佳实践,旨在为读者提供如何在保持业务连续性的同时,利用云原生技术加速创新的见解。 【5月更文挑战第27天】 在当前软件开发的快速迭代和市场需求多变的背景下,微服务架构以其灵活性、可扩展性和容错性成为企业技术选型的热门。本文将探讨如何构建一个高效的微服务系统,包括关键的设计原则、常用的技术栈选择、以及实施过程中的最佳实践。我们将重点分析如何通过合理的服务划分、
|
1天前
|
运维 Cloud Native 持续交付
构建未来:云原生架构在现代企业中的应用
【5月更文挑战第27天】随着云计算的不断成熟和企业数字化转型的深入,云原生架构已成为推动业务敏捷性、可扩展性及运维效率的关键。本文将探讨云原生的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)、以及无服务器计算,并分析如何利用这些技术构建一个高效、弹性和可维护的现代化应用平台。通过实际案例,我们将讨论企业在采纳云原生架构过程中面临的挑战与解决策略,以及这一转型对业务成长和竞争力提升所带来的潜在影响。
|
1天前
|
Cloud Native 安全 云计算
构建未来:云原生架构在现代企业中的应用与挑战
【5月更文挑战第27天】 随着数字化转型的浪潮席卷全球,云原生技术以其灵活性、可扩展性和敏捷性成为推动企业技术创新的关键力量。本文深入探讨了云原生架构的核心组件和运作机制,分析了其在提高业务效率、降低成本及支持快速迭代方面的显著优势。同时,针对企业在采纳云原生过程中可能遇到的安全、团队技能匹配等挑战进行剖析,并提出相应的解决策略。通过实际案例分析,文章旨在为读者提供一个关于如何有效利用云原生架构以赋能业务发展的清晰视角。
|
1天前
|
Cloud Native 持续交付 API
构建未来:云原生架构在现代企业中的应用
【5月更文挑战第27天】 随着数字化转型的深入,企业对于信息技术的需求日益复杂多变。本文聚焦于云原生架构,一种旨在构建和运行可在公共云、私有云及混合云环境中扩展的应用程序。通过分析云原生的核心组件如容器化、微服务、持续集成/持续部署(CI/CD)、以及声明式API,探讨了如何利用这些技术提高企业的敏捷性、可维护性和资源优化。此外,文中还将展示云原生架构如何助力企业实现更快的产品迭代,更高的运营效率,以及更强的市场竞争力。
|
1天前
|
运维 负载均衡 API
构建高效微服务架构的七大关键策略
【5月更文挑战第27天】 在当前企业级应用开发中,微服务架构已成为实现敏捷、可扩展和灵活部署的主流解决方案。本文将深入探讨构建和维护一个高效微服务系统的七个关键策略,包括服务划分原则、API网关设计、服务发现与注册、配置管理、熔断机制、分布式跟踪及持续集成和部署。这些策略不仅有助于提升系统的稳定性和弹性,还能确保在不断变化的业务需求面前,系统能够快速响应并保持高效的运行状态。
|
1天前
|
机器学习/深度学习 监控 持续交付
构建高效微服务架构:后端开发的新趋势探索深度学习在图像识别中的边界
【5月更文挑战第27天】随着业务需求的快速变化和市场竞争的激烈,企业需要更灵活、高效和可扩展的系统来支持其运营。微服务架构作为一种新兴的软件开发模式,已经成为后端开发领域的热门话题。本文将深入探讨微服务架构的概念、优势以及如何构建一个高效的微服务架构,帮助后端开发者更好地应对业务挑战。 【5月更文挑战第27天】 随着人工智能的不断进步,深度学习技术已经在图像识别领域取得了显著成就。本文将深入探讨深度学习模型在处理复杂图像数据时的挑战与机遇,分析现有技术的局限性,并提出潜在的改进方向。通过实验验证,我们将展示如何通过创新的网络架构、数据增强策略和损失函数设计来提升模型性能。本研究不仅为深度学习