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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 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搭建和管理企业级网站应用
相关文章
|
4月前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
|
16天前
|
容灾 网络协议 数据库
云卓越架构:云上网络稳定性建设和应用稳定性治理最佳实践
本文介绍了云上网络稳定性体系建设的关键内容,包括面向失败的架构设计、可观测性与应急恢复、客户案例及阿里巴巴的核心电商架构演进。首先强调了网络稳定性的挑战及其应对策略,如责任共担模型和冗余设计。接着详细探讨了多可用区部署、弹性架构规划及跨地域容灾设计的最佳实践,特别是阿里云的产品和技术如何助力实现高可用性和快速故障恢复。最后通过具体案例展示了秒级故障转移的效果,以及同城多活架构下的实际应用。这些措施共同确保了业务在面对网络故障时的持续稳定运行。
|
19天前
|
运维 监控 BI
卓越架构之FinOps最佳实践
本文探讨了云成本管理的趋势和FinOps的最佳实践。随着云计算的普及,传统的IT管理模式已无法适应按需使用和按量付费的新模式,导致企业面临资源浪费和成本失控的风险。FinOps作为一种管理理念,强调运维、财务和技术团队的合作,通过数据驱动和业务价值驱动的方式优化云成本。文章介绍了FinOps的核心挑战、最佳实践及技术工具的应用,帮助企业有效管理和优化云成本,实现降本增效。
|
23天前
|
Kubernetes 安全 数据安全/隐私保护
云卓越架构:容器安全最佳实践
本次分享由阿里云智能集团解决方案架构师张玉峰主讲,主题为“云卓越架构:容器安全最佳实践”。内容涵盖容器安全的挑战、云原生容器安全架构及典型场景。首先分析了容器安全面临的问题,如镜像漏洞和权限管理。接着介绍了容器安全架构的五个维度:身份权限管理、配置安全检查、运行时防护、镜像安全检测及发布的安全管控。最后通过具体场景展示了容器身份与权限管理、密钥管理、运行时防入侵等最佳实践,强调了安全左移的重要性,确保从开发到运行的全生命周期安全覆盖。
|
2月前
|
消息中间件 监控 安全
构建高效微服务架构:最佳实践与挑战
在现代软件开发中,微服务架构因其高度的可扩展性、灵活性和敏捷性而受到青睐。本文深入探讨了构建高效微服务架构的关键策略,包括服务的划分、通信机制、数据管理、部署与监控等方面的最佳实践。同时,文章也分析了在实施过程中可能遇到的挑战,如服务间的依赖管理、数据一致性问题、安全考量及性能优化等,并提出了相应的解决方案。通过实际案例分析,本文旨在为开发者提供一套实用的指南,帮助他们在构建微服务系统时能够有效规避风险,提升系统的健壮性和用户体验。
|
3月前
|
监控 Cloud Native 持续交付
云原生架构下微服务的最佳实践与挑战####
【10月更文挑战第20天】 本文深入探讨了云原生架构在现代软件开发中的应用,特别是针对微服务设计模式的最优实践与面临的主要挑战。通过分析容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,阐述了如何高效构建、部署及运维微服务系统。同时,文章也指出了在云原生转型过程中常见的难题,如服务间的复杂通信、安全性问题以及监控与可观测性的实现,为开发者和企业提供了宝贵的策略指导和解决方案建议。 ####
63 5
|
2月前
|
Kubernetes Cloud Native 持续交付
云原生架构下的微服务设计原则与最佳实践##
在数字化转型的浪潮中,云原生技术以其高效、灵活和可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务设计的关键原则与实施策略,旨在为开发者提供一套系统性的方法论,以应对复杂多变的业务需求和技术挑战。通过分析真实案例,揭示了如何有效利用容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,构建高性能、易维护的云原生应用。文章还强调了文化与组织变革在云原生转型过程中的重要性,为企业顺利过渡到云原生时代提供了宝贵的见解。 ##
|
2月前
|
监控 安全 Serverless
"揭秘D2终端大会热点技术:Serverless架构最佳实践全解析,让你的开发效率翻倍,迈向技术新高峰!"
【10月更文挑战第23天】D2终端大会汇聚了众多前沿技术,其中Serverless架构备受瞩目。它让开发者无需关注服务器管理,专注于业务逻辑,提高开发效率。本文介绍了选择合适平台、设计合理函数架构、优化性能及安全监控的最佳实践,助力开发者充分挖掘Serverless潜力,推动技术发展。
103 1
|
3月前
|
监控 安全 Java
构建高效后端服务:微服务架构深度解析与最佳实践###
【10月更文挑战第19天】 在数字化转型加速的今天,企业对后端服务的响应速度、可扩展性和灵活性提出了更高要求。本文探讨了微服务架构作为解决方案,通过分析传统单体架构面临的挑战,深入剖析微服务的核心优势、关键组件及设计原则。我们将从实际案例入手,揭示成功实施微服务的策略与常见陷阱,为开发者和企业提供可操作的指导建议。本文目的是帮助读者理解如何利用微服务架构提升后端服务的整体效能,实现业务快速迭代与创新。 ###
78 2
|
4月前
|
Kubernetes Docker 微服务
构建高效的微服务架构:基于Docker和Kubernetes的最佳实践
在现代软件开发中,微服务架构因其灵活性和可扩展性而受到广泛青睐。本文探讨了如何利用Docker和Kubernetes来构建高效的微服务架构。我们将深入分析Docker容器的优势、Kubernetes的编排能力,以及它们如何结合实现高可用性、自动扩展和持续部署。通过具体的最佳实践和实际案例,读者将能够理解如何优化微服务的管理和部署过程,从而提高开发效率和系统稳定性。

热门文章

最新文章