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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 用户原有的业务部署在阿里云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搭建和管理企业级网站应用
相关文章
|
25天前
|
存储 Kubernetes 调度
|
19天前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
4月前
|
存储 Kubernetes 负载均衡
Kubernetes设计架构
Kubernetes 是一个开源的容器编排平台,用于自动化应用的部署、扩展和管理。其设计架构高度可扩展且灵活,能管理大规模分布式系统。核心组件包括集群(含主节点和工作节点)、API 服务器、etcd、控制器管理器、调度器、Pod、服务、命名空间、配置管理、持久化存储、网络模型及扩展性支持。这些组件共同实现了应用的高效运行与管理。
65 7
|
4月前
|
Kubernetes API 调度
Kubernetes 架构解析:理解其核心组件
【8月更文第29天】Kubernetes(简称 K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。它提供了一个可移植、可扩展的环境来运行分布式系统。本文将深入探讨 Kubernetes 的架构设计,包括其核心组件如何协同工作以实现这些功能。
347 0
|
17天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
17天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
19天前
|
Kubernetes API 调度
【赵渝强老师】Kubernetes的体系架构
本文介绍了Kubernetes的体系架构及其核心组件。Kubernetes采用主从分布式架构,由master主节点和多个node工作节点组成。master节点负责集群管理和调度,运行API Server、scheduler、controller-manager等服务组件;node节点运行kubelet、kube-proxy和Docker容器守护进程,负责实际业务应用的运行。文章还简要介绍了Kubernetes的附加组件及其作用。
|
17天前
|
安全 持续交付 Docker
微服务架构和 Docker 容器化部署的优点是什么?
微服务架构和 Docker 容器化部署的优点是什么?
|
18天前
|
存储 监控 Docker
探索微服务架构下的容器化部署
本文旨在深入探讨微服务架构下容器化部署的关键技术与实践,通过分析Docker容器技术如何促进微服务的灵活部署和高效管理,揭示其在现代软件开发中的重要性。文章将重点讨论容器化技术的优势、面临的挑战以及最佳实践策略,为读者提供一套完整的理论与实践相结合的指导方案。
|
21天前
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####