基于ECI的ACK集群高弹性架构最佳实践

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 用户原有的业务部署在阿里云ACK集群上,随着业务波动如何达到成本

分享人:弦望   阿里云智能业务支撑平台解决方案架构师

       易欢   ECI产品经理

正文:本文从三方面来介绍基于ECI的ACK集群高弹性架构最佳实践。

Ÿ 最佳实践原理讲解

Ÿ 最佳实践核心产品ECI讲解

Ÿ 最佳实践系统搭建


一、最佳实践原理讲解


1)基于ECI的ACK机器高弹性架构-场景描述


image.png

核心场景是用户原有的业务部署在K8S集群上,在K8S集群上运行常规业务。当业务突发波动时(如秒杀活动),让突增的业务运行在ECI实例上。随着业务波动动态创建或释放ECI实例,达到成本的最优控制。业务方无需管理节点和容量规划,依托ECI和ECS资源共持,做到全自动实现容器“无限”弹性扩容,以下这几个场景非常适合使用本方案:

Ÿ Long-Run类业务,例如:业务生产系统。

Ÿ 明显的业务弹性诉求,例如:爬虫、秒杀、大促等。

Ÿ 离线job类任务,执行完即释放的应用。


2)基于ECI的ACK机器高弹性架构-系统架构图


image.png

本方案使用K8S集群部署系统应用,应用系统后端数据库使用云上RDS和Redis,存储使用NAS,常规业务跑在ACK集群上,弹性业务如大促场景使用虚拟节点扩容到ECI上,做到秒级无限扩容。

本方案的优点是:

Ÿ 成本非常低,使用ECS和ECI混合部署,平时的业务使用ECS承载,弹性业务使用ECI承载,ECI与真实节点中的Pod互联互通,做到按需使用和计费。

Ÿ 弹性部分按使用量、秒级弹性扩容,具资源池足够大。

Ÿ 支持比例或数量指定ECS和ECI部署,按实际业务需求动态调整。

这个方案有几种使用方法:

Ÿ 使用Virtual-kubelet-autoscaler,可以在资源不足时,自动弹性伸缩到ECI上,即ACK集群资源满了自动弹性到ECI上。

Ÿ 使用Namespace label,指定Namespace下的pld调度到ECI,可以做到不同Namespace应用分别部署到ACK和ECI.

Ÿ 使用OpenKruise,可以指定pod的部署拓扑,指定个数pod分别调度到ACK或ECI上。

Ÿ 使用Taints和Tolerations可以指定deployment 或者pod调度到ECI上。


3)Virtual Node弹性伸缩示意图


image.png

Virtual Node在ACK集群中是通过API server进行交互的,VK支持动态创建POD、SLB和DNS entry,这里DNS解析使用阿里云的private Zone内网解析。当HPC controller监听到POD、Service、Ingress等资源变化时,弹性伸缩POD,根据配置的策略伸缩到ECI或ECS上,HPA的策略会在物理Node不满足的前提下再弹ECI,同时也会优先回放ECI的POD,做到资源的合理利用及秒级弹性。


4)基于ECI的ACK机器高弹性架构-方案优势


Ÿ 支持混合部署,平时稳定业务使用ECS承载,节省成本,弹性业务使用ECI承载,无需执行弹性部分,弹性业务使用ECI承载,无需执行弹性部分容量规划。

Ÿ 与真实节点中的Pod互联互通,并且支持VM级别的安全加固和资源隔离。

Ÿ 弹性部分按使用量付费,按秒收费,降低成本。

Ÿ 资源池无限容量,秒级弹性扩容,快速承载流量。

Ÿ 使用预留实例能降低使用成本,最高可以降低70%以上的使用成本。

Ÿ 支持HPA和CronHPA,满足不同场景的弹性需求。

5)ECI弹性容器实例

image.png

目前K8S在阿里云的使用有三种形态,一是K8S on ECI,二是K8S on ECS,三是K8S on 神龙,那么这三种形态有什么核心差别呢?K8S on神龙我们交付给客户的资源是裸金属服务器,它的性能无虚拟化损耗,但是宕机影响的POD数量较多,POD之间的隔离较弱。

K8S on ECS对比神龙有一定的虚拟化损耗,但是弹性能力较好,故障时影响半径较小。

K8S on ECI,我们以POD的形式交付资源,客户只需要为容器POD部分使用付费,底层资源完全免运维,不需要管理节点,具有最强的弹性能力,同时故障影响的范围最小,仅单POD,并且使用安全容器做到POD之间的强隔离。


二、核心产品ECI讲解


1)阿里云容器计算服务

image.png

提到容器计算服务,大家比较熟悉的是我们现在经常听说的ACK这款产品,也就是容器服务提供的托管版Kubernetes服务,它底层使用的是咱们弹性计算提供的ECS计算资源,那么ECI是弹性计算团队在2018年开始提供的一款新型的针对容器场景的、容器资源类服务。它最大的特征是原来用户在阿里云上跑容器,首先需要购买一台ECS,并且为这台ECS付费,ECI的用户不再需要购买和管理ECS,就可以直接在阿里云上运行他的容器和Pod,并且他只需要为他运行的容器资源付费。


2)ECI作为虚拟Node,加入已有ACK Kubernetes集群


image.png

在使用方式上面,ECI可以作为一个虚拟的节点加入到用户已有的K8S集群里面,加入进去后,我们可以看到在集群的节点列表里面出现一个虚拟的节点,这个方案的优点在三个方面:

Ÿ 低成本,平时客户常态业务使用ECS包月来承载,弹性部分使用ECI虚拟节点承载,这样客户不需要预留弹性部分资源和容量规划工作了,可以极大的节省资源的成本。

Ÿ 在整个弹性伸缩的过程中,ECI可以做到秒级的弹性扩容的能力,这样客户就可以根据客户实际业务流量,进行弹性伸缩的操作和控制。

Ÿ 高并发的能力,ECI支持给每个用户1000每分钟Pod调度能力,满足绝大部分客户的弹性诉求。

这个方案比较适用的场景,首先第一个是在线业务的弹性,比如在线教育行业,泛互联网行业APP,以及电商行业,这些行业的业务特征是具有日常的弹性流量,包括突发的弹性流量诉求,都可以使用ACK加虚拟节点的方式来承载,另外一块就是现在比较火热的大数计算及AI计算的能力,这部分业务的特征都是job计算任务,都是可以直接放在ECI上面进行承载。


3)ECI适合弹性和并发场景的业务,支持业务托管


image.png

所以ECI作为一款基础设施计算类产品,特别适用于容器场景下高弹性、高并发业务的支撑。

ECI首先是一个Serverless的产品,是一个免运维的产品,其次在弹性、成本、效率上相比ECS有一定程度提升,它也是一个完全兼容Kubernetes的基础设施产品。所以在容器化的在线业务弹性、AI推理和训练、大数据计算、自动驾驶的仿真计以及现在特别火热的在线教育和短视频的音视频编解码,包括直播流的录制事件上,以及普通Job任务、自动化测试场景上,能够很好的支撑客户业务把效率提升上去,把成本降下来。


三、基于ECI的ACK集群高弹性架构最佳实践


image.png

进入CADT以后,通过官方模版进行新建,这是方案的架构图,里面使用了ack、virtdal、rds、NAS,这是一个基础的架构。

image.png

我们看一下相关配置,集群名称、网络插件可以根据需要配置调整。

image.pngimage.png

进行rds,nas配置。

image.png

调整完之后进行应用部署,首先验证一下资源,看是否可以购买,这些参数是否正确,先做一次验证,目前我们可以看到的所有的结果都是成功的。

image.png

再去做一个价格的评估,会列出预付费的资源和后付费的资源,以及产生的价格、帐单。

image.png

把协议勾选上,可以创建资源。

image.png

等待资源创建,可以看到所有的资源都部署完成了。

image.png

在资源列表里直接点击资源名称,直接进入到相对应的资源控制台。

image.png

进入挂载使用,添加挂载点,选择创建的vpc,选择交换机,默认权限,确定。

image.png

这里已经生成了挂载地址。

image.png

接下来去配置rds的白名单、数据库帐号等,进入rds,设置白名单。

image.png

我们可以通过安全组来添加白名单,把刚创建的安全组添加到白名单里面。

image.png

添加完之后,我们可以在查看连接详情里面rds的内网地址。

image.png

创建数据库帐号。

image.png

再创建一个数据库,后面以wordpress为例,创建一个wordpress数据库。

image.png

资源都已经创建完成了,进入到ack集群。

image.png

首先创建一个命名空间,作为资源隔离的一个空间,创建一个新的命名空间,叫做wordpress,确定。

image.png

接下来在无状态应用里面进行应用部署,我们选择命名空间,在wordpress下面。

image.png

去使用镜像创建应用,对资源做了一个评估,在集群上能使用22个副本,我们这是个测试,先创建22个副本。

image.png

选择镜像,在镜像上搜一下wordpress镜像。

image.png

选一个tag,版本非常多,选择一个适合自己的,这里选latest最近的版本。

image.png

挂载到主径目录下,先把它删掉。

image.png

接下来创建一个服务,创建一个service,这里面使用负载均衡,新建一个负载均衡,策略选择local,输入名称sp-svc,端口80。

image.png

应用已经创建成功。

image.png

接下来看无状态的应用里面,选择Yaml。

image.png

image.png

已经把latest的路径挂载到容器里面了。

image.png

接下来对应用进行部署,我们找到服务,我们刚刚创立的这个服务,点进服务里面。

image.png

对应用类型的一个初始化的安装,我们选择简体中文,继续。

image.png

现在可以看到数据库就是wordpress,这里使用在数据库存里的用户名、密码,数据库的地址可以看下rds控制台,拷贝内网地址,粘贴过来,提交。

image.png

开始安装。

image.png

安装完成之后需要设置站点名称,名称为ECI高可用Demo,用户名myuser,设置密码、邮箱,勾选建议搜索引擎不索引本站点,安装。

image.png

我们再登陆一下wordpress。

image.png

成功登陆后,我们发表一篇文章,测试一下。新建文章,这个测试有点慢,输入标题,这是我测试的demo,发布。可以看到应用系统已经正常使用。

image.png

开启eci实例的服务,我这边已经开通了。如果没有开通,进入到eci的控制台会提示让开通这项服务的。

image.png

接下来在容器服务里进行配置,找到命名空间。

image.png

给命名空间设置一个注解,添加变量的名称,具体可参考文档复制过来,添加,确定。

image.png

这里就添加了一个虚拟节点的标签。这样我们应用在弹性伸缩的时候,就会伸缩到命名空间弹到ecs上。

image.png

接下来进行虚拟节点的安装,找到应用目录ack-virtual-node,进行安装。

image.png

这里参建需要配置一下,安全组、AK的信息。在vpc里找一下,我们创建vpc。

image.png

可以看下交换机这里的ID,复制。

image.png

粘贴到这里。

image.png

image.png

进入安全组列表。我们使用容器里创建的案例组。

image.png

image.png

再去配置AK的信息,把AK复制过去。

image.png

image.png

把secret复制一下,粘贴过来,创建。

image.png

这样虚拟节点就部署好了。可以看到当前的虚拟是StatefuSet,如果在虚拟节点不够用的话,也可以部署多个虚拟节点,进行伸缩就可以了。

image.png

进入集群,在virtual-node应用里进行伸缩,进行多节点的伸缩。

image.png

我们可以创建多个virtual-node节点,通常一个节点可以支持3000个word,数量特别大的情况下,virtual-node的节点进行相应的调整。

image.png

接下来看一下节点,virtual-node的节点是可调度的状态,说明我们当前的

部署是正常的。

image.png

然后回到wordpress应用,进行简单的伸缩测试,比如刚才是22个,要伸缩到30个。

image.png

伸缩完之后进入到应用,已经有word在pending状态了。可以看到pending已经被调度到virtual-node的节点了。新增的全部调度到eci上了。

image.png

可以看到当前的pond已经eci实例里面了。刚才是22个伸缩到30个,有8个pond已经跑到eci上了。

image.png

刷新后,看到是正常运行的。

image.png

如果我们要缩回去是一个什么状态,把30个缩回到22个。

image.png

可以看到应用被正常的释放。

image.png

现在模拟正式的环境,假如业务有大量流量进入的时候,我们可以看下业务的表现情况。在控制台上,找到集群里面的节点,可以看到当前节点的CPU的情况,request有的是28.13%,有的是35.63%。

image.png

比如我们要做同一伸缩的时候,要利用节占的CPU的资源,建议不要超过60%,所以我们在伸缩的时候进行根据CPU的一个配置进行伸缩,可以在无状态应用里面,对容器进行伸缩,可以去配置HPA,配置CPU的指标,让CPU使用量不要超过60%,最大是100个,最小是22个,确定。

image.png

我们就已经创建了HPA的控制器了。

image.png

接下来进入到pts的控制台,对业务进行模拟的压测。

image.png

这是我们的网站的IP地址,去创建压测场景,场景名改为wp-test。

image.png

我们进行施压的配置,最大并发上限是1000,递增10%,时长1分钟,测试10分钟。

image.png

这时候可以去保存压测。

image.png

回到容器控制台看一下弹性伸缩的情况。可以看到已经在伸缩了,被调度到eci上了。

image.png

虚拟节点容器已经在pending状态了。

image.png

随着我们流量的加大,访问的压力越来越大,伸缩的数量会越来越多,目前是44个。

image.png

下一步是已经往83伸缩了。

image.png

通过我们的压力不断加大,容器数量会达到我们的上限,目前已经100个了。

image.png

通过这种方式我们可以看到整体请求的成功率的情况。应用系统随着流量的增加,不断进行自动地扩容,承接更多的流量。

image.png

我们可以看下测试报告,在这里可以看到业务的请求率,业务的响应的情况,TPS并发的情况。

image.png

接口异常的情况,流量加大没有及时扩容,导致超时的情况,我们可以通过TPS进行观察。

image.png

如果把实践做完,或者在生产的时候要释放资源,我们刚才已经一键创建了这些资源,同样地可以进行一键销毁,在应用里点释放资源,可以看到已经在启动释放了,我们待到所有资源释放完,今天的实践就结束了。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3月前
|
存储 Kubernetes 负载均衡
Kubernetes设计架构
Kubernetes 是一个开源的容器编排平台,用于自动化应用的部署、扩展和管理。其设计架构高度可扩展且灵活,能管理大规模分布式系统。核心组件包括集群(含主节点和工作节点)、API 服务器、etcd、控制器管理器、调度器、Pod、服务、命名空间、配置管理、持久化存储、网络模型及扩展性支持。这些组件共同实现了应用的高效运行与管理。
59 7
|
3月前
|
Kubernetes API 调度
Kubernetes 架构解析:理解其核心组件
【8月更文第29天】Kubernetes(简称 K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。它提供了一个可移植、可扩展的环境来运行分布式系统。本文将深入探讨 Kubernetes 的架构设计,包括其核心组件如何协同工作以实现这些功能。
258 0
|
5天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
33 7
|
1天前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
11 3
|
4天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
25 6
|
8天前
|
Kubernetes 持续交付 Docker
探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
【10月更文挑战第18天】探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
37 2
|
22天前
|
Kubernetes API 调度
中间层 k8s(Kubernetes) 到底是什么,架构是怎么样的?
中间层 k8s(Kubernetes) 到底是什么,架构是怎么样的?
34 3
|
27天前
|
Kubernetes Cloud Native 云计算
云原生时代的技术演进:Kubernetes与微服务架构的完美融合
随着云计算技术的飞速发展,云原生概念逐渐深入人心。本文将深入探讨云原生技术的核心——Kubernetes,以及它如何与微服务架构相结合,共同推动现代软件架构的创新与发展。文章不仅剖析了Kubernetes的基本工作原理,还通过实际案例展示了其在微服务部署和管理中的应用,为读者提供了一条清晰的云原生技术应用路径。
41 2
|
8天前
|
存储 Kubernetes 监控
深度解析Kubernetes在微服务架构中的应用与优化
【10月更文挑战第18天】深度解析Kubernetes在微服务架构中的应用与优化
30 0
|
8天前
|
运维 Kubernetes 负载均衡
深入探索Kubernetes在微服务架构中的应用
【10月更文挑战第18天】深入探索Kubernetes在微服务架构中的应用
28 0

热门文章

最新文章

推荐镜像

更多