阿里云容器服务团队
云原生是云计算领域的热点之一。就像 “一千个人眼里有一千个哈姆雷特”,大家对"云原生"的定义也见仁见智。在CNCF-云原生计算基金会的定义中 :
“云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。
这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。”
在我们的理解中,云原生计算包含三个维度的内容
可编程的、动态的、弹性基础设施
- 支持公共云、专有云、边缘计算等不同环境
分布式应用架构
- 具备松耦合、可弹性扩展、高容错性等特点
创新的应用开发、交付方式
- 基于自动化、可观测、可管理的软件交付流程,加速创新效率的同时保障系统稳定性
本系列将和大家分享阿里云容器服务团队在云原生计算领域的探索和思考。我们今天将聚焦在云原生基础设施。
云原生基础设施
Gartner将云原生基础设施划分成四大类
分类 | IaaS Infrastructure as a Service |
CaaS Container as a Service |
Serverless容器 | fPaaS/FaaS Function PaaS/Function as a Service |
---|---|---|---|---|
代表产品 | 弹性计算 - ECS | K8s服务 - ACK | Serverless K8s - ASK 弹性容器实例 - ECI |
函数计算 - FunctionCompute |
虚拟化技术 | 硬件虚拟化 | 操作系统虚拟化 - 容器 | MicroVM | 容器或应用运行时虚拟化 |
应用交付 | 虚拟机镜像 配合自动化脚本 |
容器镜像 | 容器镜像 | 应用代码 |
应用兼容性 灵活性 |
高 | 中 | 中 | 低 |
扩容单位 | 虚拟机 | Pod | Pod | 函数实例 |
弹性效率 | 分钟级 | 秒级 | 秒级 | 毫秒级 |
我们可以看到这几类基础设施,计算单元的粒度越来越细,也越来越多体现的云原生的特质
- 模块化程度越高 - 自包含的应用打包方式,应用与底层物理基础设施解耦
- 自动化运维程度越来越高 - 自动化的资源调度和弹性伸缩能力,用户将关注点逐渐聚焦到应用自身。
- 弹性效率越来越高 - VM可以实现分钟级扩容;容器可以实现秒级扩容;函数可以做到毫秒级扩容。
- 故障回复能力越来越高 - 随着系统自愈性的增强,大大简化了应用架构容错的复杂性。
为了更好的理解云原生计算出现的时代背景,我们必须要理解云计算的经济学基础与核心竞争力所在。
应“云”而生
经济学家亚当·斯密提出:分工是社会发展的必然,而且分工将极大的提高生产效率。从经济学的角度来讲,云计算是IT产业发展的必然阶段。互联网和移动互联网时代的到来,加速了企业的数字化转型。云计算可以提供时刻在线的服务能力,并满足日益增长不断变化的计算需求。此外,云计算将IT服务的固定成本投入转化成为了可变成本,极大降低了创新成本。在咖啡馆中,随处可见创业的青年人围坐在一起构画未来,是互联网和云计算让梦想变得触手可及。
云计算的规模经济
云计算的经济学基础的来自规模经济。直观上,批量采购,带来更低的供应链成本;大型数据中心,降低运营成本。更重要的是,由于不同用户不同时间的工作负载不同,可以利用规模优势进行削峰填谷。结合自动化、智能化的供应链和运营体系,进一步提升了硬件资产运营效率。云计算正如电力这样的公共服务基础设施,集中发电比每家每户自建发电机,有更低的成本和更高的效率。
此外,云计算是典型的平台型业务模式。随着规模的增长,会产生网络效应。提供为企业提供产品/服务的ISV与SI,会更加青睐于那些拥有更多用户的云平台。而用户会更加倾向于能够提供丰富技术产品和服务支撑生态的云平台。随着云平台的成长,将对用户和生态产生更强的吸引力。
云计算的核心技术创新加速规模效应的形成。比如,计算资源池化与虚拟化技术,让应用和底层硬件资源解耦。一方面提升资源利用率,降低计算成本;一方面提升了资源的弹性供给,弹性成为差异化云基础设施和传统IDC的关键能力。
此外在传统IT中,软件、硬件和服务由不同厂商分离交付。而云计算将软件、硬件、服务一体化交付,极大降低了计算成本,提升了交付效率,提供了创新的技术能力。这里面有几个关键点:
- 软硬一体设计,可以针对规模和性能进行全栈优化,极大降低计算成本。而且由于云计算的规模效应,随着产量的增加,边际成本会拉低平均制造成本。全球主流云厂商都在IDC设计、网络、芯片等方向加大自研投入。
- 以API方式交付IT能力,一方面可编程的基础设施极大提升了IT的敏捷性,更好地支持业务敏捷性;一方面API可以更加方便地被集成到三方服务商的解决方案中。进一步加速规模效应产生
- 随着IT能力的规模化,一些数据化、智能化的创新的技术和业务模式的形成。比如ECS宕机预测和自动热迁移,可以将虚拟机的SLA提升到传统需要硬件冗余才能达到的稳定性标准;RDS对数据库的自动优化和问题诊断,无需DBA的人力过多介入。
云原生的崛起
2013年春,Docker技术开源宣告了云原生计算的序幕。Docker公司创新地提出了应用打包规范 Docker镜像,它将应用及其所有依赖项打包,从而使应用可以在不同的计算环境之间快速、可靠地运行。容器技术提供了一个优雅的抽象,让开发所需要的灵活性、开放性和运维所关注的标准化、自动化达成平衡。容器镜像迅速成为了应用分发的工业标准。随后Google开源的Kubernetes因为其优秀的开放性,可扩展性和活跃的社区,在容器编排之战中脱颖而出,成为分布式资源调度和自动化运维的事实标准。Kubernetes屏蔽了底层基础架构的差异,提供了良好的可移植性可以帮助应用一致地运行在不同的环境,包括数据中心、云、边缘计算等。
在技术上,容器技术彻底解耦了应用和运行时环境,可以帮助应用更加快速平滑地迁云;容器轻量化、自包含的特性极大简化了应用弹性,释放云的核心价值。此外,容器技术的标准化促进生态的分工和协同。基于Kubernetes,社区开始构建上层的业务抽象。比如,服务网格Istio,机器学习平台Kubeflow,无服务器应用框架Knative等等。通过这样的架构分层,进一步降低了技术门槛,加速了云价值释放。对于企业客户而言,他们可以通过Kubernetes这样的开放标准来设计企业的云架构,可以避免厂商锁定的顾虑,更好支持多云/混合云。容器技术和生态的发展会加速云计算规模经济形成。所有的云厂商都在加大对容器技术领域的投入。
作为云原生技术的演进,无服务器计算(Serverless)进一步释放了云计算的能力,将弹性伸缩、高可用、安全等需求由基础设施实现。无服务器计算抽象了运行时环境,让开发人员可以将更多的精力放在应用程序的设计和优化上,而不是与基础架构相关的配置和管理上;Serverless应用可以迅速弹性伸缩,用户无需进行容量规划;采用按需付费的模型,用户只按应用实际消耗的资源付费。在无服务器计算中,应用逻辑被解耦为多个函数,每个函数可以通过事件驱动的方式触发执行。执行粒度进一步细化可以进一步提升了弹性的效率,此外还把应用部署从本地代码(如x86指令集)提升到了高级语言层面,这给成本优化带来了更多的空间。(比如可以在ARM等低成本的计算资源上来运行Python/NodeJS脚本。)这推动了进一步的社会分工,云厂商可以通过规模化、集约化和技术创新实现计算成本的持续优化。
伯克利的论文《A Berkeley View on Serverless Computing》提出断言:Serverless 计算将会成为云时代默认的计算范式。但是这条路还很漫长,现有无服务器计算FaaS也存在自身的局限性:
- FaaS应用架构和研发、交付流程和传统应用相比有很大的改变
- 可移植性和厂商锁定的顾虑,FaaS依然缺乏标准,而且通常需要依赖大量的后端服务(BaaS, Backend as a Service),这导致了为AWS开发的Serverless应用较难移植到阿里云的平台,或者在自己的数据中心中运行。
- FaaS也引入了一些新的技术挑战,比如冷启动会导致应用响应延迟,按需建立数据库连接成本高等等,需要平台能力的持续增强。
云原生之路
企业上云之路,要根据自己的业务需求,技术能力和组织结构来选择合适的路径。
我们可以将迁移之路分为3类
- Rehost 新托管 - 简单地通过lift-and-shfit方式,将线下物理机替换成为云上虚拟机或者裸金属实例,不改变原有的运维方式。
- Re-platform 新平台 - 利用托管的云服务替换线下自建应用基础设施,比如通过RDS数据库服务替换自建MySQL,通过容器服务,比如阿里云ACK来取代自建K8s集群。托管的云服务通常提供更好的弹性、稳定性和自治运维能力,可以让用户关注于应用而非基础设施管理。
- Refactor/Re-architect 重构/新架构 - 包括单体应用的微服务架构改造,应用的容器化和Serverless化整体开发和交付架构改造。
从Rehost, Re-platform到Re-architect,我们可以看到迁移的成本和复杂性在增加,但是敏捷性、弹性、可用性、容错性等收益也在持续增加。云原生已经成为势不可挡的技术趋势。在CNCF 2020年发布的《云原生开发状态报告》中,我们可以看到全球有470万云原生开发者,占全部后端开发者的36%。其中包括290万使用容器技术以及330万使用Serverless架构的开发人员。
云原生基础设施的未来趋势
站在容器角度,我们看到未来云原生基础设施的一些技术趋势。
趋势一:无处不在的计算催生新一代容器实现
在1988年,当时施乐PARC的首席科学家Mark Weiser提出了“Ubiquitous Computing”的概念,“在未来,计算将无处不在”。随着互联网的发展和进化,5G, AIoT等新技术的涌现,随处可见的计算需求已经成为现实,无处不在地计算正在改变我们的世界。
针对不同计算场景,容器运行时有不同的需求。比如在传统数据中心,基于操作系统虚拟化的RunC/Docker容器可以很好地满足大部分业务需求。如何提升更好的安全隔离能力,KataContainer,Firecracker, gVisor, Unikernel等新技术层出不穷。但是没有任何一款容器技术可以在安全隔离性、执行效率和通用性上都做到完美。我们在相当长的一个历史阶段,依然可以看到多种技术路线并存和多彩纷呈的竞争。OCI(Open Container Initiative)标准的出现,可以对不同的技术采用一致的方式进行容器生命周期管理,进一步促进了容器引擎技术的持续创新。
其中几个主要的趋势
- 基于MicroVM的安全容器的占比将逐渐增加,可以提供更高的安全隔离能力。虚拟化和容器技术的融合,已经成为了一个重要趋势。在公共云上,比如AWS的Firecracker已经成为Lambda/Fargate等Serverless云服务的基础设施。阿里云的袋鼠容器引擎,已经成为ECI/ASK的基础。
- 基于软硬一体设计的机密计算容器开始展露头角。比如,阿里云安全、系统软件、容器服务团队和蚂蚁可信原生团队共同推出了面向机密计算场景的开源容器运行时技术栈inclavare-containers 支持基于Intel SGX机密计算技术的机密容器实现,如蚂蚁的Occlum,开源社区的Graphene等Libary OS。降低机密计算的技术门槛,简化可信应用的开发、交付和管理。
- OS的虚拟化创新也从未停步,从Linux 4.5内核开始cgroup v2接口在逐渐成熟,将进一步完善了资源隔离性。Docker也发布了rootless模式,可以更好利用Linux操作系统的安全能力来提升容器的安全性。
- WebAssembly是新一代可移植、轻量化、应用虚拟机,在IoT,边缘计算,区块链等场景会有广泛的应用前景。在服务器端,WebAssembly是容器的颠覆者还是同盟者?大家会有不同的观点。我个人倾向于后者,WASM/WASI可以成为一个跨平台的容器实现技术。近期Solo.io推出的WebAssembly Hub就是将WASM应用通过OCI镜像标准进行统一的管理和分发,可以很好地应用在Istio服务网格生态中。
趋势二:云原生操作系统开始浮现
Kubernetes已经成为云时代的操作系统。我们可以对比一下经典的Linux和Kubernetes的概念模型,他们都是定义了开放的、标准化的访问接口;向下封装资源,向上支撑应用。
它们都提供了对底层计算、存储、网络、异构计算设备的资源抽象和安全访问模型。可以根据应用需求进行资源调度和编排。Linux的计算调度单元是进程,调度范围限制在一台计算节点。而Kubernetes的调度单位是Pod,可以在分布式集群中进行资源调度,甚至跨越不同的云环境。
在初期,Kubernetes上主要运行着无状态的Web应用。随着技术的成熟和社区的发展,我们看到更多的有状态应用和大数据/AI应用负载逐渐迁移到K8s上。目前企业的大数据业务还是被YARN等调度技术主导,但是K8s已经在大数据社区得到更多的关注。Flink,Spark等开源社区和一系列商业公司如Cloudera、Databricks、星环都开始加大对K8s的支持力度。
- 统一技术栈提升资源利用率:多种计算负载在K8s集群统一调度,可以有效提升资源利用率。Gartner预测“未来3年,70% AI任务运行在容器和Serverless上。” AI模型训练和大数据计算类工作负载需要K8s提供更低的调度延迟、更大的并发调度吞吐和更高的异构资源利用率。针对这些挑战,华为推出了Volcano项目,提供了一个针对数据计算类任务的独立调度器。阿里云在和K8s上游社区共同合作,在Scheduler V2 framework上,通过扩展机制增强K8s调度器的规模、效率和能力,具备更好的兼容性,可以更好的支撑多种工作负载的统一调度。
- 统一技能栈降低人力成本:K8s可以在IDC、云端、边缘等不同场景进行统一部署和交付。云原生提倡的DevOps文化和工具集可以有效提升技术迭代速度。整体上降低人力成本。
- 加速数据服务的云原生化:由于计算存储分离具备巨大的灵活性和成本优势。数据服务的云原生化也逐渐成为趋势。容器和Serverless的弹性可以简化对计算任务的容量规划。结合分布式缓存加速(比如Alluxio或阿里云Jindofs)和调度优化,也可以大大提升数据计算类和AI任务的计算效率。
阿里云计算平台和容器服务团队已经在多个领域共同探索云原生大数据/AI场景的产品技术创新。
趋势三:在云端,Serverless技术逐渐融入主流
除了FaaS的快速发展,Serverless和容器技术也开始融合,尤其是得到了云厂商的高度关注。通过Serverless容器,一方面可以根本性解决K8s自身的复杂性,让用户无需受困于K8s集群容量规划、安全维护、故障诊断等运维工作;一方面进一步释放了云计算的能力,将安全、可用性、可伸缩性等需求下沉到基础设施实现,可以帮助云厂商形成差异化竞争力。
阿里云在2018年5月推出 ECI(Elastic Container Instance弹性容器实例),ASK (Alibaba Cloud Serverless Kubernetes)等产品,并在2019年2月正式商业化。目前业界所有公有云厂商都推出了Serverless容器产品,除阿里云ASK/ECI外,还包括AWS Fargate, Azure ACI,华为CCI,腾讯EKS, GCP CloudRun等。
在AWS的调研中,在2019年 40%的ECS(AWS弹性容器服务)新客户采用ECS on Fargate的Serverless Container形态。
Serverless容器可以和FaaS形成良好的互补。Serverless容器支持容器镜像作为应用载体,支持各种类型应用,比如无状态应用、有状态应用、计算任务类应用等。大量用户现有的应用无需修改即可部署在Serverless Container环境中。
在Gartner在 2020年 Public Cloud Container Service Market评估报告中把Serverless容器作为云厂商容器服务平台的主要差异化之一,其中将产品能力划分为Serverless 容器实例和Serverless Kubernetes两类。这与阿里云ECI/ASK的产品定位高度一致。Gartner在报告中也谈到 Serverless容器业界标准未定,云厂商有很多空间通过技术创新提供独特的增值能力,其对云厂商的建议是:
- 扩展Serverless容器应用场景和产品组合,迁移更多普通容器workload到serverless容器服务。
- 推进Serverless容器的标准化,减轻用户对云厂商锁定的担忧。
趋势四:动态、混合、分布式的云环境将成为新常态
上云已是大势所趋。但是对于企业客户而言,有些业务由于数据主权和安全隐私的考虑,会采用混合云架构。一些企业为了满足安全合规、成本优化、提升地域覆盖性和避免厂商锁等需求,会选择多个云供应商。混合云/多云架构已经成为企业上云的新常态。Gartner指出,"到2021,超过 75% 的大中型组织将采用多云或者混合IT战略。"
此外,随着5G时代的临近,AIoT应用快速发展,一个万物智联的时代开始到来。边缘计算可以更好地链接物理世界和数字世界,为应用提供更低的网络延迟,更高的网络带宽和更低的网络成本。边缘计算将成为企业云战略的重要组成部分,我们需要有能力将智能决策、实时处理能力从云延展到边缘和IoT设备端。
在Gartner发布的《2020年基础架构和运营的十大趋势》中提出了分布式云的趋势。随着云平台已经成为企业数字化转型的创新平台,一个变化随之产生——云正在靠近它们。在分布式云中,公有云的服务能力可以位于不同的物理位置,而公共云平台提供者会负责服务的运营、治理、更新和演变。
然而不同环境的基础设施能力、安全架构的差异会造成企业IT架构和运维体系的割裂,加大云战略实施的复杂性,增加运维成本。在云原生时代,以Kubernetes为代表的云原生技术屏蔽了基础设施的差异性,推动了以应用为中心的混合云/分布式云架构的到来。可以更好地支持不同环境下应用统一生命周期管理和统一资源调度。Kubernetes已经成为企业多云管理的事实基础,
2019年Google推出Anthos多云应用平台,其基础就是GKE K8s托管服务。 微软在的Build 2020会议上宣布了Azure Arc支持Kubernetes集群的预览版。微软CEO萨蒂亚·纳德拉将Azure Arc描述为混合云计算的控制平面,可以统一管理云上、边缘和IDC中运行的Kubernetes集群,以及Windows和Linux服务器实例。
阿里云容器服务ACK去年9月份发布了混合云 2.0架构,提供了完备的混合云K8s管理能力。
- 首先ACK提供了统一集群管理能力,除了可以管理阿里云K8s集群之外,还可以纳管用户在IDC的自有K8s集群和其他云的K8s集群。利用统一的控制平面实现多个集群的统一的安全治理、可观测性、应用管理、备份恢复等能力。比如利用日志服务、托管Prometheus服务,可以无侵入的方式帮助用户对线上、线下集群有一个统一的可观测性大盘。利用云安全中心,AHAS可以帮助客户在混合云的整体架构中发现并解决安全和稳定性风险。
- 此外托管服务网格ASM提供统一的服务治理能力,结合阿里云云企业网CEN、智能接入网关SAG提供的多地域、混合云网络能力,可以实现服务就近访问,故障转移,灰度发布等功能。
- ACK也提供了统一的应用交付能力,通过GitOps方式可以将应用安全、一致、稳定地发布在多个不同的云环境中。配合网格ASM提供的流量管理能力,可以支持云容灾、异地多活等应用场景,提升业务连续性。
2019年六月,阿里云ACK@Edge边缘容器发布。边缘K8s容器集群中可以同时管理云端ECS和边缘ENS节点、以及IoT设备。我们在K8s基础之上,针对边缘计算场景的特殊性,提供了单元化隔离和断连自治、自愈和安全等增强能力。借助ACK@Edge,我们可以将一些需要低延迟处理的应用部署在边缘节点实现就近访问,比如,我们可以把AI模型预测和实时数据处理放置到边缘,进行实时智能决策;而将模型训练,大数据处理等需要海量算力应用放到云端。可以极大简化云边端一体应用协同。
在2020年5月底,我们将ACK@Edge的核心组件开源 — OpenYurt,该项目的核心理念是『Extending your native Kubernetes to edge.』,在架构上保持了对原生K8s无侵入的设计,通过一系列组件和工具,提供了对边缘计算场景良好的支持能力。推出该开源项目,一方面可以把我们在云原生边缘计算领域的积累回馈社区,另一方面我们希望加速云计算向边缘延伸的进程,并和社区共同探讨未来云原生边缘计算架构的统一标准。
总结
云原生计算加速了应用和基础资源的解耦,充分释放云的弹性;通过关注点分离,让开发者关注业务价值,而复杂性下沉到基础设施。对企业而言,云原生计算可以帮助企业优化云架构,最大化发挥云价值。在后续的文章中,我们将继续介绍云原生应用架构和生命周期管理的进化方向。