本方案使用应用型负载均衡(ALB)和容器服务 Kubernetes 版(ACK)智能分配网络流量,提高应用的高可用性和吞吐量,使用Kubernetes的cluster-autoscaler社区开源组件以及Kubernetes的Horizontal Pod Autoscaler(HPA)内置组件进行弹性伸缩,提升资源利用率,缩减资源成本。
体验本方案预计费用约为10元(假设您配置ACK产品和SLS产品时均选择采用按量付费方式,且方案验证过程中产生的流量在1GB以内,且运行时间不超过2小时。实际情况可能会因您操作过程中使用使用资源规格、流量大小和资源使用时长,导致费用有所变化,请以控制台显示的实际报价以及最终账单为准)
Kubernetes被广泛认为是当前软件开发和运维的关键趋势,特别是在微服务架构和云原生应用方面。在采用Kubernetes作为容器化平台来发展现代化应用架构的场景中,确保应用的高可用性是关键,它不仅保障了业务的持续运作,而且为应用的水平动态伸缩提供了支撑。这种水平伸缩机制能够根据实际需求精确地调整资源分配,以防资源被浪费。在用户请求较少时,它能自动缩减资源的分配,帮助减轻财务开支。相反,在遭遇用户请求高峰时,系统可以迅速增加服务实例,保证了应用服务的持续性和用户体验的高标准。
智能应对流量变化,容器化集群的弹性攻略
通过ALB+ACK的方案提升应用的可用性,在接收到用户的请求时,ALB与Kubernetes的ALB Ingress组件进行关联,能够根据请求内容将流量路由到目标分组内,同时开启ACK集群的节点和HPA弹性伸缩能力,实现在业务需求量波动时,自动调整指定类型的ECS实例和Pod个数,以满足业务需求。整体方案架构图如下所示。
在 Kubernetes(K8s)环境中,Pod是最小的部署单位,它代表着集群中可以被创建和管理的最小的可部署计算实例,一个Pod由一个或多个容器(例如 Docker 容器)组成,这些容器共享存储、网络和运行配置规范。Pod里的容器作为一个整体被调度到同一个节点(例如云服务器ECS)上运行。 容器服务 Kubernetes 版(ACK)支持节点伸缩弹性和工作负载(Pod)伸缩弹性两种弹性伸缩方式,节点弹性伸缩通常是指集群能够根据工作负载的变化自动调整其节点(例如云服务器ECS)的数量,Pod弹性伸缩会根据工作负载的需求动态地增加或减少Pod的数量。
本教程通过示例应用,讲解如何使用Pod弹性伸缩中的HPA组件以及节点弹性伸缩中的cluster-autoscaler组件实现容器化应用的弹性伸缩能力。
1.高并发
单个ALB实例最大并发连接数最高可达1000万,最大新建连接数(CPS)最高可达100万,ALB单实例七层处理能力高达100万QPS。
2.高可用
ALB最大可提供99.995?A可用性保障。Kubernetes(K8s)提供了健康检查机制以及自动弹性伸缩能力,帮助Kubernetes自动发现和处理不健康的容器实例,并根据工作负载的需求动态地增加或减少Pod的数量,确保服务持续可用。
3.弹性伸缩优化成本
无需投入大量人力来调整计算资源,无需提前预备计算资源,也无需担心不能及时释放冗余资源。
通过本教程,您将学习阿里云容器服务上部署的应用,如何使用应用型负载均衡ALB(Application Load Balancer)七层负载均衡服务,将来自客户端的请求分发至后端容器Pod上,同时利用容器水平伸缩HPA(Horizontal Pod Autoscaler)功能实现弹性伸缩,能够在业务负载急剧飙升时快速扩容多个Pod副本来缓解压力,也可以在业务负载变小时根据实际情况适当缩容以节省资源,无需您人为干预。HPA适用于服务波动较大、服务数量多且需要频繁扩缩容的业务场景,例如电商服务、线上教育、金融服务等。
本架构采用单地域双可用区部署,将系统部署在2个不同可用区,实现了可用区级故障灾备能力,同时在节点和Pod两个维度开启了弹性伸缩能力,保证了业务的连续性。
本方案的技术架构包括以下基础设施和云服务:
应用型负载均衡ALB(Application Load Balancer):专门面向七层应用,提供强大的应用层处理能力和丰富的高级转发规则。单ALB实例性能最大可达100万QPS。
Pod水平自动扩缩HPA(Horizontal Pod Autoscaler):Kubernetes内置组件,提供Pod水平扩缩容能力。
此外阿里云容器服务提供了多种工作负载伸缩(调度层弹性)和节点伸缩(资源层弹性)方案。
默认HPA只支持基于CPU和内存的自动伸缩,并不能满足全部业务场景的运维需求,以IO密集型系统为例,CPU和内存并不是系统的唯一瓶颈。本教程将介绍如何实现基于QPS数据的应用弹性伸缩。
1.如果您还没有阿里云账号,请访问阿里云账号注册页面,根据页面提示完成注册。阿里云账号是您使用云资源的付费实体,因此是部署方案的必要前提。
2.为阿里云账号充值
为节省成本,本方案默认全部选择使用按量付费资源,使用按量付费资源需要确保账户余额不小于100元。
完成本方案的部署及体验,预计产生费用不超过10元(假设您选择本文示例规格资源,且资源运行时间不超过60分钟。实际情况中可能会因您操作过程中实际使用的流量差异,会导致费用有所变化,请以控制台显示的实际报价以及最终账单为准,如下表格仅供参考)。
序号 | 产品 | 规格 | 地域 |
---|---|---|---|
1 | 云服务器 ECS | ECS的实例规格及内核、vCPU数量。本教程使用ecs.c6.xlarge和ecs.c7.xlarge规格作为示例。 | 华东1(杭州) |
2 | 应用型负载均衡ALB | 功能版本:标准版。 | 华东1(杭州) |
3 | 容器服务Kubernetes版 | 集群版本:ACK托管集群Pro版。 | 华东1(杭州) |
4 | 日志服务SLS | 无规格要求。 | 华东1(杭州) |
单击一键部署前往ROS控制台,选择ECS实例规格和可用区(注意需要选择两个不同的可用区),填写ACK托管版集群名称等额外信息。具体产生的费用根据您选择的ECS规格而不同,以控制台显示为准。
开始创建后,等待约5分钟左右,显示创建成功。
应用验证
1.请访问容器服务控制台,在左侧导航栏,选择集群,进入集群列表页。
2.在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择网络 > 路由。
3.在路由列表页,找到前一步创建的Ingress,查看目标Ingress的端点信息。
4.通过端点信息,拼装访问地址,分别是http://alb-xxx.cn-hangzhou.alb.aliyuncs.com/tea和http://alb-xxx.cn-hangzhou.alb.aliyuncs.com/coffee
5.通过浏览器或curl命令请求拼装的两个地址,访问应用服务
弹性伸缩验证
1.安装测试工具Apache Benchmark,Mac OS操作系统默认安装了该测试工具。
2.使用Apache Benchmark测试工具,执行压测脚本对应用进行压测,校验QPS变化后,观察Pod的弹性伸缩的执行情况。
压测脚本:
ab -c 5 -n 5000 http://alb-***.cn-hangzhou.alb.aliyuncs.com/tea
命令说明:
命令 | 说明 |
---|---|
ab | Apache Benchmark提供的压测工具命令。 |
-c 5 | 一次创建的请求个数。 |
-n 5000 | 一次测试会话中执行的请求个数。 |
http://alb-***.cn-hangzhou.alb.aliyuncs.com/tea | tea服务应用的访问地址,在应用验证步骤中讲解了如何获取服务应用的访问地址。 |
3.等待压测命令执行一段时间后,请访问容器服务控制台,在左侧导航栏,选择集群,进入集群列表页。
4.在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态,在应用列表页单击tea应用名称。
5.在tea应用详情页面,选择容器伸缩,在前面步骤创建名称为k8s-alb-tea-hpa的HPA,单击事件查看HPA的弹性伸缩执行情况,随着QPS的增加,Pod数目从2扩容到10,之后随着QPS的降低,Pod数目从10缩容到2,基于QPS指标的HPA已经生效。
6.继续等待一段时间后,在集群详情页的左侧导航栏,选择节点管理 > 节点池,在节点池列表页单击前面步骤创建名称为k8s-hpa-cluster-nodepool的节点池。
7.在节点池详情页面,选择伸缩活动,查看节点池的弹性伸缩执行情况,随着Pod数目的增加,节点数目从2扩容到3,之后随着Pod数目的降低,节点数目从3缩容到2,节点池的弹性伸缩已经生效。
清理资源
如果您无需继续使用,请尽快删除资源,避免继续产生费用:
1.登录ROS控制台。
2.在左侧导航栏,选择资源栈。
3.在资源栈页面的顶部选择部署的资源栈所在地域,找到资源栈,然后在其右侧操作列,单击删除。
4.在删除资源栈对话框,选择删除方式为释放资源,然后单击确定,根据提示完成资源释放。
官网相关地址直达:
1.更多阿里云方案查询:https://www.aliyun.com
2.阿里云服务器ECS相关活动:https://www.aliyun.com/daily-act/ecs/activity_selection
3.云小站(代金券发布平台):https://www.aliyun.com/minisite/goods