实验介绍
本实验是基于阿里云容器服务ACK Serverless,通过配置集群的容器水平伸缩(HPA)和容器定时伸缩(CronHPA)来应对业务流量高峰以及定时、批量计算业务,实验主要分为以下几个步骤:
资源准备,包括专有网络VPC、镜像仓库ACR、文件存储NAS、云数据库RDS、容器服务ACK Serverless的集群资源及相关配置;
在ACK Serverless集群中部署wordpress应用;
配置容器定时伸缩(CronHPA),并观察定时扩缩效果;
配置容器水平伸缩(HPA);
使用压测工具Apache Bench对应用进行压力测试,验证容器水平伸缩(HPA)的效果;
同时配置容器水平伸缩(HPA)与容器定时伸缩(CronHPA),并验证容器水平伸缩(HPA)与容器定时伸缩(CronHPA)是如何进行兼容性扩缩。
容器应用的高弹性架构实践
配置NAS
添加NAS挂载点,在控制台顶端搜索框搜索文件存储,点击文件存储NAS登录NAS管理控制台,或将以下地址复制进远程桌面的浏览器地址栏:
https://nasnext.console.aliyun.com/cn-hangzhou/filesystem
在左侧导航栏,选择文件系统 > 文件系统列表。在文件系统列表页面,找到Clouder_Nas对应的更多按钮,点击添加挂载点。
NAS挂载点配置参数如下:
挂载点类型:专有网络
VPC网络:clouder_attestation(10.0.0.0/8)
交换机:K8S-02(10.0.1.0/24)
权限组:VPC默认权限组(全部允许)
通过镜像在ACK Serverless集群中快速部署应用
在控制台搜索框中搜索ACK Serverless,并点击搜索结果中控制台下的Serverless容器服务按钮进入容器服务控制台,或将以下地址复制进远程桌面的浏览器地址栏:
https://cs.console.aliyun.com/#/k8s/cluster/list
在容器服务控制台,找到目标集群:clouder-attestation,确认集群状态为运行中,点击目标集群名称进入集群管理控制台。
进入ACK Serverless集群后,在左侧存储标签下选择存储卷,并点击创建,并按照以下配置参数进行设置:
存储卷类型:NAS
名称:wordpress-pv
存储驱动:CSI
挂载点域名:选择名称为Clouder_Nas的挂载点
选择存储声明标签,点击创建,并按照以下配置参数进行设置:
存储声明类型:NAS
名称:wordpress-pvc
分配模式:已有存储卷
已有存储卷:选择上一步骤创建的wordpress-pv
最后点击创建。
在左侧工作负载标签下选择无状态,点击右上角使用镜像创建。
在应用基本信息配置页面按照以下配置参数进行设置,在点击下一步:
应用名称:wordpress
副本数量:2
进入容器配置,按照以下配置参数进行设置,在点击下一步:
镜像名称:registry.cn-hangzhou.aliyuncs.com/wordpress_clouder/wordpress-hpa
镜像TAG:点击后面的选择镜像TAG,选择标签V1,点击确定按钮
镜像拉取策略:优先使用本地镜像(IfNotPresent)
所需资源:1Core 2GB
在端口设置中,点击新增按钮,并按照以下参数设置:
名称:tcp-80
容器端口:80
协议:TCP
在数据卷设置中,点击增加云存储声明,并按照以下参数设置:
名称:wordpress-pvc
挂载源:wordpress-pvc
容器路径:/var/www/html
设置完成后,点击右侧上方下一步按钮,进入高级配置。
在高级配置界面,点击服务后的创建按钮,并按照以下参数设置:
名称:wordpress-svc
外部流量策略:Cluster
端口映射名称:tcp-80
服务端口:80
容器端口:80
协议:TCP
设置完成后点击创建,完成服务设置。
在点击高级配置的右下角创建按钮,等待创建显示成功后点击查看应用详情。待容器组状态都为 Running 时,完成应用创建
点击访问方式按钮,获取外部端点地址,将获取到的外部地址和端口输入到浏览器进行访问,可以看到wordpress初始化界面。
但是因为此时还未创建RDS,所以无需继续。
访问并配置WordPress应用
在控制台搜索框中搜索RDS,并点击搜索结果中控制台下的云数据库RDS版按钮进入云数据库RDS控制台,或将以下地址复制进远程桌面的浏览器地址栏:
https://rdsnext.console.aliyun.com/rdsList/cn-hangzhou/basic
进入RDS控制台,在实例列表找到目标实例,点击实例ID进入RDS实例管理界面。
在账号管理界面,点击创建账号,并按照以下参数设置:
数据库账号:wpadmin
账号类型:普通账号
密码:Admin@123
在数据库管理界面,点击创建数据库,并按照以下参数设置:
数据库(DB)名称:wordpress
支持字符集:utf8
授权账号:wpadmin
在数据库连接界面获取数据库连接地址,这里复制内网地址使用。
回到刚才的wordpress界面,选择简体中文,点击继续,跳转页面后,在点击现在就开始。
在数据库配置界面,进行配置:
数据库名:wordpress
用户名:wpadmin
密码:Admin@123
数据库主机:RDS数据库内网地址
表前缀:使用默认值
点击提交后,跳转到下一个页面在点击现在安装来配置WordPress账号信息。
在账号设置页面,
站点标题:wordpress
用户名:admin
密码:Admin@123。勾选确认使用弱密码
您的电子邮件:admin@wordpress.com
再点击安装WordPress来完成安装。
在安装完成后,点击登录按钮进入WordPress登录界面。
用户名:admin
密码:Admin@123
点击登录按钮,进入WordPress系统。
配置容器定时伸缩
将以下地址复制进远程桌面的浏览器地址栏,进入ACK Serverless控制台:
https://cs.console.aliyun.com/#/k8s/cluster/list
点击集群名称进入集群管理页,在集群的工作负载中,点击无状态应用,选择wordpress应用更多选项中的弹性伸缩,点击进入弹性伸缩配置界面。
配置定时伸缩(CronHPA)需要安装ack-kubernetes-cronhpa-controller组件,在弹性伸缩配置界面,我们可以直接点击安装。
安装完成后,点击定时伸缩(CronHPA)的创建按钮,并按照以下参数设置扩容和缩容任务:
任务名称:扩容
目标副本数量:5
调度周期:按小时,每3分钟执行一次
点击添加任务,再添加一个缩容任务。
任务名称:缩容
目标副本数量:1
调度周期:按小时,每5分钟执行一次
任务配置完成后点击确定,等待3分钟,然后在容器组界面观察集群的伸缩状态,首先会由原来的2个容器扩容到5个,然后再由5个容器缩容到1个容器,以此循环执行扩容和缩容任务。
Succeed代表CronHPA任务执行成功。
Pod容器组数量缩减至1个。
Pod容器组数量扩容至5个,ContainerCreating 代表容器组创建中。
按照定时任务设置,5个容器组均创建完成,Running 状态。
在容器组伸缩过程中,我们可以刷新wordpress页面,可以发现wordpress页面是一直可以访问的,不会因为容器组的伸缩导致应用中断。
观察完成后,我们返回伸缩配置界面,在集群的工作负载中,点击无状态应用,选择wordpress应用更多选项中的弹性伸缩,点击进入弹性伸缩配置界面,将配置的定时伸缩(CronHPA)任务删除。
删除完成后,我们在将应用的容器数量手动调整到2个,点击右上角的伸缩按钮,将所需容器组数量设置为2,点击确定,如果数量已经是2就无须调整, 手动调整容器组数量实时生效。
使用压测工具Apache Bench对站点进行压测
在控制台搜索框中搜索ECS,并点击搜索结果中控制台下的云服器ECS按钮进入云服务器ECS控制台,或将以下地址复制进远程桌面的浏览器地址栏:
https://ecs.console.aliyun.com/server/region/cn-hangzhou
选择华东1(杭州)地域,点击创建的ECS实例右侧的远程连接按钮连接服务器ECS。
连接上服务器ECS后,使用一下命令安装ab压测工具:
yum -y install httpd-tools
执行下列命令开始压测,对http://x.x.x.x/站点模拟发起500的并发请求,总共请求50000次,其中-n参数表示请求数,-c参数表示并发数:
ab -n 50000 -c 500 http://***.***.***.***/
【操作注意】上述URL地址中的 ... 使用实验集群中wordpress实际的 外部端点 地址进行替换(外部端点获取方式如下图,ACK Serverless集群管理页面 > 无状态应用wordpress > 访问方式 > 外部端点);命令中前后的斜杠"/"都需要保留。
在压测过程中,我们返回ACK Serverless集群的wordpress应用,在集群的工作负载中,点击无状态应用,选择wordpress应用点击进入。
进入wordpress应用后,我们点击容器组的监控图标,可以观察容器组的资源使用率情况,可以发现容器组中的2个容器CPU资源都会跑满。
此时,我们可以访问或者刷新我们的wordpress应用外部端点访问地址,可以发现站点响应非常慢,并且还可能会出现连接超时无法访问的现象。
观察完成后,我们返回ECS连接界面,使用Ctrl+C组合键结束ab压测,程序终止后,可以查看到压测的一些信息显示。
配置容器水平伸缩并进行压测
由于指标伸缩(HPA)需要去获取metrics的监控数据,所以需要先安装metrics-server插件,点击左侧运维管理,选择组件管理,筛选标签选择日志与监控,找到metrics-server组件,点击进行安装。
在集群的工作负载中,点击无状态应用,选择wordpress应用更多选项中的弹性伸缩,回到弹性伸缩配置界面。
在点击指标伸缩(HPA)的创建按钮,并按照以下参数设置扩容和缩容任务:
名称:hpa
指标:点击添加,监控项选择CPU使用量,阈值填入60
最大容器数量:10
最小容器数量:2
在点击确定进行创建。
继续在连接的服务器ECS上执行以下命令进行压测,这次我们增加压测的请求数量从而增加压测时间,以便压力持续进行触发容器组伸缩。
在压测过程中,我们返回伸缩配置界面,可以查看到当前容器组的CPU使用率,当CPU使用率超过我们配置的60%阈值以后,会触发hpa伸缩任务来扩展容器组数量。
点击容器组,我们可以观察到容器组在进行扩展中。
在压测过程中,我们可以持续观察容器组的CPU资源使用率以及容器的副本数量,可以发现容器组会随着压测的持续自动进行扩容,在容器组伸缩过程中,我们可以刷新wordpress页面,可以发现wordpress页面是一直可以访问的,不会因为容器组的伸缩导致应用中断。(因压测一直在持续,仍然可能会出现访问页面缓慢,待容器组伸缩到能够覆盖压测的流量,既可恢复正常访问速度)
自动扩容完成后,我们返回ECS连接界面,使用Ctrl+C组合键结束ab压测,程序终止后,等待5-10分钟。
CPU资源使用率下去后,可以发现容器的副本数量会自动降到我们设置的最小副本数量。
同时配置容器水平伸缩与定时伸缩
点击上一步骤中创建的指标伸缩(HPA)任务右边的编辑按钮,将任务的最大容器数量设置为10,最小容器数量设置为1,点击确定。
然后在点击右上角的伸缩按钮,将所需容器组数量设置为1,点击确定。
点击定时伸缩(CronHPA)的创建按钮,新增任务:
任务名称:扩缩容
目标副本数量:5
调度周期:按小时,每2分钟执行一次
等待2分钟后,我们查看CronHPA任务状态为Succeed后,可以观察到HPA的任务最小副本数变更为了5,同时Pod容器组数量也增加到了5个。
点击CronHPA任务的任务添加或编辑按钮,将目标副本数量设置为:1,其它设置。
等待2分钟后,我们查看CronHPA任务状态为Succeed后,可以观察到HPA的任务最小副本数变更为了1,同时Pod容器组数量也相应减少到了1个。
点击CronHPA任务的任务添加或编辑按钮,将目标副本数量设置为:15,其它设置不变。
等待2分钟后,我们查看CronHPA任务状态为Succeed后,可以观察到HPA的任务最大和最小副本数都变更为了15,同时Pod容器组数量也相应增加到了15个。
由此我们观察到CronHPA兼容HPA的方式,CronHPA不会直接调整容器组数量,而是通过HPA来进行操作。
至此我们就完成了本实验任务的全部操作。