创新互联公司主要从事网站建设、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务昭苏,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
为什么使用多云:
多云带来的问题:
针对上面提到的问题,多云管理平台建设迫在眉睫,如何来帮助业务用好云,帮助云管管好云是多云管理平台建设的最终目标。通过调研一些业内的CMP平台,以及团队内部多轮的讨论、与业务用户的交流,对于多云管理平台我们定义它应该至少具备:
从2022年4月开始规划和调研,7月份第一版本发布上线,到现在经过多轮迭代,B站的多云管理平台ARES已经在帮助业务用好云、云管管好云上迈出了坚实的一步,在降本增效方面发挥着重要的作用。
图1:平台架构图
为什么以项目为中心?
在ARES立项阶段,最先考虑的一个问题是以什么维度来划分资源和权限,每个用户的资源管理边界在哪,基于现状,随着业务发展,公司组织和部门会相应的调整,导致资源的归属会经常变动,并且从成本角度,云上的资源需要比较细粒度的进行成本拆分,基于此,参考公有云的管理逻辑,我们定义了项目的概念,作为ARSE管理多云的核心。
首先,项目作为多云平台的管理中心,公司组织是预算执行以及成本归属的重要单位,所以我们需要先定义项目和公司组织的关系。通过分析公司组织的特点:
我们定义公司组织和项目的关系为1:N,一个项目只能归属为唯一一个组织,但是一个组织下可以有多个项目。
其次,云项目是云厂商控制台的概念,虽然不同公有云的名称不同但表示的含义是相同(比如A云叫资源组,B云叫企业项目),这里我们统一称为云项目。根据同一个账号下云项目是唯一的特性,我们定义项目与云账号、云项目之间的关系:
最后,在公有云中,资源是可以归属到云项目下的,可以以云项目的粒度在云上管理资源。但是,云项目有个问题就是无法关联所有的资源,我们这里采用定义一个云标签来辅助资源的管理,以bili_project为key,项目名为value,利用标签对于资源的覆盖范围更大这一优势来作为云项目的补充。针对项目与云资源的关系:
从这里可以看出,通过云项目和标签作为中介,可以关联项目和资源,因为账单里可以根据资源的云项目以及标签来定义账单项的归属,所以也就定义了项目和账单的关系,由此可以把账单归属到公司部门。
项目定义了四种角色:研发负责人、研发成员、运维负责人和运维成员,只有是这四种角色的用户才能对项目下的资源有限定的权限:
除了平台的用户权限是通过项目来定义边界外,云上账号同样是通过项目来定义权限边界的,怎么实现云账号权限的项目限定呢?
主要是利用了云上的自定义策略,对于项目级别定义了两种角色自定义策略:
通过云上的项目和标签,利用自定义策略语法里的条件语法,如下,为项目A研发角色的自定义策略,然后把用户云账号关联自定义策略即可完成用户和对应角色权限的绑定。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"*:Describe*",
"*:List*",
"*:Get*",
"*:BatchGet*",
"*:Query*",
"*:BatchQuery*",
"actiontrail:LookupEvents",
"actiontrail:Check*",
"dm:Desc*",
"dm:SenderStatistics*",
"ram:GenerateCredentialReport",
"cloudsso:Check*",
"notifications:Read*"
],
"Resource": "*",
"Condition": {
"StringEqualsIgnoreCase": {
"*:tag/bili_project": [
"项目A"
]
}
}
}
]
}
每个项目都有完整的一套或者多套环境,ARES支持用户在项目级别配置环境,这里环境包括网络环境、资源参数。
(1)网络环境,用户在提交项目创建的时候,可以按照业务需求配置:
项目创建后,根据配置自动在云上创建符合需求的网络环境,为后续资源创建提供正确的项目网络。
(2)资源参数,平台的出发点是降低用户的资源参数选择成本,提高资源申请的效率:
首先在项目创建完成后,用户可以根据业务场景和资源选型,配置云服务器、RDS以及Redis等资源的参数配置,比如云服务器的镜像、机型,RDS和Redis的版本和规格等,如图所示,预先配置这些参数可以在资源申请阶段,不必在云厂商提供的少则几十种,多则上百种选项中筛选目标配置。优化了用户体验,提高了资源申请的效率,以云服务器的镜像和机型举例可以看出前后数量对比。
图2:项目配置
图3:配置前后数量对比
除了配置这些参数作为资源申请时候的待选参数外,平台还提供了提前配置模板的能力,解决相同需求重复申请的问题,比如,对于某项目,可以把第一次资源申请的工单保存为模板,后续随着业务的发展,需要追加申请资源扩容,可以直接以模板发起,不需要重新提交资源需求工单,如图4:
图4:项目模板列表
综上,对于通过项目,可以高效的管理资源、权限以及成本归属,通过项目可以帮助用户提高资源申请效率,这也是ARSE选择项目作为整个平台的管理中心的原因。
通过上述项目的介绍,应该已经清楚整个ARES对于多云的资源是基于项目管理的,要做好统一管理,面临以下问题需要解决:
对于上述的三个问题,我们分别从产品标准化、属性标准化以及数值标准化三个维度去逐个解决。
ARSE针对不同云的产品名称不一致的问题,ARES定义了云服务器、RDS、Redis、负载均衡、对象存储等30多种标准产品(如图5),并与云上对应产品进行映射,实现多云统一管理的需求。以标准产品中云服务器为例,将阿里云的ECS、腾讯云的CVM,华为云的ECS以及亚马逊云的EC2等公有云云服务器类产品统一在ARES平台定义的云服务器中管理,统一对外命名为云服务器,消除名称上的差异。
标准产品 |
A云 |
B云 |
C云 |
D云 |
云服务器 |
云服务器 ECS |
云服务器 CVM |
弹性云服务器 ECS |
Amazon EC2 |
表1:多云下的云服务器产品
图5:ARSE定义的标准化产品视图
对于不同云的产品属性差异的问题,需要标准化,对外统一属性,如果将不同公有云的属性直接展示给用户,会出现表达相同含义的属性在不同位置展示的问题,无法实现用户统一筛选、排序和查看的需求。为此我们针对接入的产品,每个都对其属性进行了标准化,并且把每个云的属性和标准化的属性映射关系记录下来。如下表,是我们标准化云服务器部分属性的情况,对于未进行标准化的属性,我们也按照公有云提供的原始数据结构进行存储,满足少量高级用户管理需求。
标准化属性 |
A云 |
B云 |
C云 |
... |
云ID |
实例ID |
ID |
实例ID |
... |
名称 |
主机名 |
名称 |
名称 |
... |
云项目 |
资源组 |
企业项目 |
所属项目 |
... |
地域 |
地域 |
区域 |
区域 |
... |
可用区 |
所在可用区 |
可用区 |
可用区 |
... |
镜像 |
镜像ID |
镜像 |
镜像名称 |
... |
规格 |
实例规格 |
规格 |
实例规格 |
... |
... |
... |
... |
... |
... |
表2:属性标准化
图6:ARES云服务器的属性详情
经过产品标准化和属性标准化后,已经实现用户在统一视图下查看和管理所有资源的需求,此时仍然有一个问题:对于状态、类型、计费方式等枚举类型的产品属性在不同公有云的取值范围定义都不相同,直接暴露给用户不利于筛选,并且会造成误解。
以公有云服务器的『状态』属性为例,不同公有云的取值范围不同,ARES的方案是,按照表示的含义取交集,对于交集没有包括的部分设置两种状态:异常状态和其它状态,所以标准化后的云服务器的状态为:创建中、运行中、启动中、停止中、已停止、异常、其它。用户可以通过筛选查看对应状态的资源。
在经过产品标准化、属性标准化和数值标准化后,多云的资源在ARSE平台实现语义和展示上的统一,再结合项目管理章节的介绍,用户可以在ARSE上基于项目全局上查看到同一个项目下的资源分布,以及在单一资源类型下,基于统一的认知,可以多维度检索资源列表信息和详细信息,对于用户而言,ARES“消灭了”多云,把自己打造成了云平台,ARSE就像是编程语言中的“接口”,对外都是标准化的,没有歧义的,而实际执行操作是每个云对于这个接口的实现。
图7:项目ARSE平台的云服务器列表
资源编排是多云平台的核心功能之一,好的资源编排能力既可以单账号多资源联动部署,又可以跨账号部署资源。ARES是基于Terraform为主,API为辅来实现资源编排的,这里重点介绍Terraform。
IaC
IaC(Infrastructure as Code)基础设施即代码,就是用代码来定义和管理基础设施,Hashicorp 公司创建Terraform是IaC中的优秀代表,尽管它不是唯一的 —— 所有主要的云提供商都有自己的 IaC,谷歌提供 Google Cloud Deployment Manager,AWS 提供 CloudFormation,微软的 Azure 提供 Azure Resource Manager,Terraform因为是开源的并且和平台无关,所以广受欢迎。
Terraform
Terraform提供了一套基础设施管理的声明式的框架,主流云厂商都实现了各自云的Provider,Terraform 通过provider与不同的云集成。provider是 Terraform 插件,用于与外部 API 进行交互。每个云供应商都会维护自己的 Terraform provider,使 Terraform 能够管理该云中的资源。provider使用 Go 语言编写的,并作为二进制文件分发到Terraform注册表上。它们负责进行身份验证、发出API请求以及处理超时和错误。在这个注册表中,有数百个已经发布的提供程序,它们协同起来,使你能够管理数千种不同的资源。
这里以A云Provider为例介绍如何利用Terraform的resource来创建一台云服务器
利用Terraform来创建云服务器
# 创建后端服务器
resource "Acloud_instance" "server_attachment" {
count = 1
image_id = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
instance_type = "ecs.n4.large"
instance_name = "test"
security_groups = "sg-mj7itgyeohjw2ebvyrl"
internet_charge_type = "PayByTraffic"
internet_max_bandwidth_out = "10"
availability_zone = "cn-hangzhou-A"
instance_charge_type = "PostPaid"
system_disk_category = "cloud_efficiency"
vswitch_id = "vsw-uf66iu2bxce23ityocdx"
}
介绍了Terraform后,我们接下来讲解ARES如何利用Terraform的能力,经过优化来支持B站的云资源编排和管理,主要分为三个方面。
多云统一:
Terraform虽然可以使用代码管理基础设施,但是面对公有云,Terraform并没有解决多云异构的问题,还是需要每家厂商提供完善的Provider,需要用户针对不同的Provider去写tf文件,所以对于用户还是没有屏蔽多云的差异,ARSE从业务层去解决了多云统一的问题。主要思路为:
如图以云主机为例,不管选择的账号,ARES需要用户填写的label都是一致的,不因多云而改变,提供一致的用户体验。
图8:云主机的申请
参数模板:
每一次用户提交需求,前端变量值映射到后端的tf文件都需要重新生成一份tf文件,这里有两种方案:
考虑到基于语法自动生成Terraform相关文件有一定的难度,我们选择第二种方案,我们利用Terraform的variable关键字,定义多云下每个产品的模板,比如main_alicloud_template.tf文件,所有变量的value引用variable进行填充,这里有两个关键点:
做到如上两点,每当用户提交需求的时候会自动生成含有每个变量声明和定义的variable.tf文件,同时实例化一份模板文件main.tf,组成一份可执行的完整tf环境
多产品编排:
云上资源的申请场景中,会经常存在负载均衡和后端服务器一起申请的情况,对于这种多资源统一部署和编排,ARES利用了Terraform的原生编排能力,通过在负载均衡监听器的后端服务组的attachment的resource中声明云服务器的resource id来实现,如下(以A云为例):
resource "Acloud_slb_server_group_server_attachment" "server_attachment" {
...
server_group_id = Acloud_slb_server_group.server_attachment.id
server_id = Acloud_instance.server_attachment[count.index].id
...
}
利用Terraform的编排能力,我们支持了以下多种场景的编排能力:
负载均衡关联同工单创建的后端服务器;
CDN部署管联DNS自动做CNAME解析;
CDN部署关联负载均衡或者对象存储作为源站。
如下图9、图10是ARES上支持负载均衡关联后端云服务器以及CDN关联对象存储作为源站的例子
图9:负载均衡申请关联后端服务器
图10:CDN关联对象存储域名
由于ARES还在迭代中,对于云上资源的运维操作接入并不完善,用户还是会需要采用云账号登录控制台进行资源的运维,比如调整数据库的参数,配置告警策略等。所以当前现状下,云账号还是用户运维资源不可或缺的辅助手段。
由于云账号属于公有云,它的安全性相对于内部平台的账号不可控,比如用户的权限和密码的管理,账号的回收等等。为此,ARES针对云账号全生命周期管理进行了设计和支持,保证云账号的安全可靠。
对于云用户账号的申请需要满足以下条件:
除了条件之外,最主要的还是云账号的获取必须走申请流程,流程里配置了用户的直属领导审批,如下图所示。
图11:云账号申请流程
使用云用户账号登录存在以下问题:
通过调研业界的做法,ARSE基于云厂商原生支持的SSO能力和公司内部的单点登录,实现了基于内部IDP认证的云上账号单点登录,整体逻辑如图,优点是把云账号的登录跳转到内部的身份认证,只需要用户扫描登陆内部企业微信就可以实现一键登录到云上进行资源的管理。不需要键入密码,因为云上开启了SSO的功能,即使密码泄漏,外部用户也无法登录到云控制台。
图12:单点登录流程
3.4.3 云用户账号回收
对于拥有云账号的用户,一旦存在工作变动,云账号的存在就转变为一个安全漏洞了,平台是如何及时处理工作变动用户的云账号?
基于以上两点,平台可以定时获取离职人员,并且和云账号所绑定的用户进行比对,一旦发现用户处于离职状态会第一时间自动关闭云账号的控制台登录权限,为了防止误操作,关闭登录权限后一段时间内才会去清退删除账号。(如图13所示)
图13:云账号的在离职状态管理
整个成本的管理包括业务前期的需求评估阶段,厂商和产品选型阶段,资源创建阶段,资源的巡检以及账单的分析。
图14:资源不同阶段的成本优化方式
需求评估
需求评估的主要流程:
资源选型
资源选型主要包含两个方面;
以云服务器智能推荐为例,通过调研各大云厂商提供的机型选择相关的参考指标:
因素 |
作用 |
CPU |
可以作为筛选项,主要用于定位用户的对于规格的需求 |
MEM |
同上 |
规格类型 |
主要用于业务场景的分辨,不同的规格类型适用不同的业务场景,可以作为筛选项 |
内网带宽 |
主要是体现云服务器的内网网络带宽性能 |
内网收发包 |
主要是体现云服务器的内网网络吞吐能力 |
成本 |
云服务器的价格(折扣后) |
性能测试数据 |
性能测试数据,作为业务选型的参考 |
我们选取CPU,MEM以及规格类型作为推荐时用户可以筛选项,根据筛选项输出满足用户需求的按照成本排序后的机型,整体逻辑如图15所示。
图15:资源选型智能推荐流程
图16:资源选型效果图
资源巡检:
在资源运行阶段,对于成本优化我们一般从两个方面着手:
首先,低利用率资源降配的主要流程是:
其次,对于闲置资源,根据实际使用场景,我们定义了以下几种闲置资源:
结合前面介绍的资产管理,根据本地数据库中的资产信息就可以实现闲置资源的定期巡检。
从低利用率资源到闲置资源的巡检,ARSE不断探索资源优化和技术降本的可能性,助力业务更加合理的使用云上资源。
账单分析:
通过导入账单,对账单进行分析,可以能够可视化的展示成本的总体情况,项目维度以及组织维度的成本构成,并且通过定义每个资源类型的计量标准计算用量用于业务确认:
ARES多云平台从业务日常的需求出发,结合一线资源交付人员的经验,参考业界的CMP产品的能力,建设成一个符合B站业务用户使用习惯和云管用户管理方式的平台,最大程度的支持业务”用好云“,云管”管好云",利用平台化的能力和数字化运营助力降本增效。
目前,ARSE多云管理平台还处于不断迭代和完善的过程中,未来平台的主要建设方向包括:
本期作者: SYS平台 B站系统部平台团队,负责全站基础设施管理平台化和自动化、混合云IaC、资源运营CMDB等业务系统研发
文章名称:B站多云管理平台建设
分享链接:http://www.shufengxianlan.com/qtweb/news9/296159.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联