混合云环境云原生应用交付和管理平台

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 云原生生态里已经出现了大量的优秀实践和技术,都可以给我们提供生产力,但各种方案如何有效的组合,更简单地呈现给广大的开发者,变成了一个课题。


议题简介:在云原生理念迅速普及的今天,混合环境部署(混合云/多云/分布式云/边缘)已经成为了大多数企业应用、SaaS 服务、应用持续交付平台的必然选择,而云原生技术的发展趋势也正在朝着“一致的、跨云、跨环境的应用交付”不断迈进。CNCF 沙箱项目 KubeVela,作为一个开箱即用、面向现代微服务架构的应用交付与管理平台,面对混合云环境的应用交付难题,提出一个开源、标准,又不失灵活度的解法。


1.png


分享人:曾庆国(悦达),KubeVela 开源产品经理,阿里云技术专家。目前负责 OAM/KubeVela 产品和开源社区布道,从事云原生、应用交付、开源领域研究和实践多年,致力于推动云原生应用标准化和云原生技术“亲民化”。

 

目录:


•      云原生应用交付流水线案例

•      CIOps:做 CI 很好,CD 问题很多

•      云原生应用持续交付,用户的核心诉求

 

正文:

 

云原生生态里已经出现了大量的优秀实践和技术,都可以给我们提供生产力,但各种方案如何有效的组合,更简单地呈现给广大的开发者,变成了一个课题。

 

一、一个典型的云原生应用交付流水线

 

2.png


目前中大型企业在做应用发布时,较多的企业都已经将其应用运行环境升级为了K8s 容器化环境,与云原生实践接轨。上图是一个典型的云原生应用交付过程,也就是我们常说的DevOps,我们大体上可以分为CICD两部分:

 

1、CI

 

如图示上方是一个典型的CI流程, 可分为三个部分:镜像构建(Build)、测试(Test)和应用打包(Artifacts)。这个流水线过程的目的是输入源码到输出云原生制品。在这个过程中针对代码处理和制品处理的工具链已经很丰富,比如Jenkins的插件体系。

 

目前也有比较多的企业在 CI 流水线的最后一步直接进行应用的部署,它的目标可能有主机、容器环境、K8s环境、甚至更大规模的多集群K8s环境等,把服务进行发布上线的过程就是接下来我们要聊的CD环节。

 

2、CD

 

图示下方是将CD环节拆开来看,将制品进行部署的过程包括环境和参数配置、资源组装、流程编排、部署到多环境等,在开发环境、预发环境、生产环境、私有环境或各个边缘环境中去部署和发布。 发布过程需要可观测,可追踪、可回退,发布的后续动作还会包括监控、运维等。我们可以发现,CD 环节需要面对的复杂性不亚于CI环节,相反,它还是影响业务稳定的最重要环节。

 

3、CIOps: 围绕 CI 工具的持续交付

 

•      kubectl apply

•      helm upgrade

•       其它模板方案然后apply...

 

以上是围绕CI做发布的常见形式,比较笼统的将服务配置下发的目标集群上。

 

二、CIOps:做 CI 很好,CD 问题很多

 

1.  问题一:“基础设施的复杂性”暴露给开发者


3.png


业务开发者需要学习的东西很多,比如:原子的、碎片化的声明式对象,海量的、琐碎的基础设施细节。在整个发布过程中用到的云原生技术有很多,包括可视化、安全、灰度、自动扩缩容、微服务治理等等。这里我们都希望有一种技术,把海量的基础设施配置,通过一种标准形式更简单化的管理起来。

 

2.  问题二:“编排的复杂性” 需要开发者人工处理

 

4.png


目前中大型公司已经开始了上云、 容器化的工作,整个云的形态已经朝着分布式的形式发展,但由于发布环境各异,需求各异,导致编排极其复杂。

 

a.  场景现状:


•        同一个应用,在不同环境下部署的组件依赖差异巨大;

•        数据库、负载均衡、K8s, 在不同云上也存在诸多差异;

 

b.  开发现状:


•        开发者心智负担重,单一系统缺乏统一交付能力;

•        需要补充大量人工操作,缺乏自动化;

 

c.  同一个应用,在不同场景下的运维能力要求差异巨大


•        开发测试环境:需要进行热加载、调试、查看开发日志以及实时运行的情况等;

•        预发联调环境:需要考虑服务之间的调用,测试时需要观看响应指标,绑定资源,错误定位,进行攻防演练等;

•        生产环境:包括可观测性、流量、云服务等。

 

3.  问题三:以“脚本”为中心的系统缺乏自动化

 

5.png


上图中用Jenkins做脚本执行流水线,发布服务到不同的集群。在需要把应用从低版本向高版本升级时,假设我们先在发布到预发布环境,此时服务配置可能还不稳定,开发者进行在线开发调试。甚至当我们进行生产上线时,可能也会因为不同的环境因素导致故障从而进行紧急运维变更,但此时脚本侧不会进行记录。


如果我们发布的环境包括国内国外多个集群,网络不稳定会导致可能部分集群发布失败,一次性执行的脚本服务不会再维护状态,这时又不得不人工接入排查。

 

以“脚本”为中心的弊端:

 

a.  管理成本高:难以扩展、复用、维护

b.  配置漂移:难以维护、追踪和审计;大规模应用管理的噩梦;

c.  不具备自愈能力:部署动作执行后的任何异常都意味着需要重新发布。

 

当然它的优势就是使用简单,对于简单业务,简单环境场景非常适用。

 

4.  问题四:权限和安全风险没有收敛

 

6.png


上图在做CI/CD的过程中,CI环节读取源代码到制品库,需要有源代码的读取权限,打包时需要调用一些计算资源,推送到镜像仓库时,需要镜像仓库的写入权限;CD环节读取镜像,需要镜像仓库的读取权限,需要K8s等相应集群的管理权限。

 

问题:


•   CI/CD的安全域无法隔离,各种权限混合使用;

•   CI系统的权限难以控制,多集群、多租户。

 

三、云原生应用持续交付,用户的核心诉求是什么?

 

1.  用户对云原生应用持续交付的核心诉求

 

7.png


CD持续发布过程中的诉求:


•        统一抽象:K8s持续演进帮助我们把底层各种各样的基础设施完全抽象化,抽象化过程需要不同企业的相应类似描述文件,描述文件相同的是描述、日志等,不同的是服务名称、镜像、服务端口等;

•        自动化编排:屏蔽编排的复杂性,提供自动化能力;

•        部署能力:安全、稳定、大规模地把此资源分发到不同环境和集群里。

 

目标是开发者在制品仓库输入变量,后面的过程可以完全自动化的进行,将复杂巨大的程序都屏蔽在底层,如果有问题可以由专业的工程师做相应的维护和调试。

 

2.  如何实现

 

K8s带来的启示:声明式是用户侧抽象的最佳表达方式,将复杂管理逻辑下沉到K8s中,对用户仅暴露终态/意图的输入。


8.png

 

K8s是基于终态的状态机维护,通过当前状态和预期状态持续比对,基于K8s控制平面来达到最终状态,这也是K8s的一个很好的理念。平台最终操作的资源各种各样,包含有K8s资源、云厂商资源、自建私有云资源等。各种资源都可能是我们的操作对象,来匹配用户的诉求。

 

基于Kubernetes的工作流让我们的交付具备了以下特性,也是大规模应用交付的核心要素:


•        自动化

•        收敛性

•        幂等性

•        确定性

 

四、阿里巴巴的开源解决方案– KubeVela

 

9.png

 

KubeVela为广大开发者提供了一个面向现代云原生环境的应用交付/持续交付系统:

 

•        以应用为中心的开发者体验;

•        面向终态的声明式交付工作流;

•        面向混合环境,基础设施无关;

•        laC/可编程,高度可扩展;

 

CNCF项目地址:https://github. com/oam-dev/kubevela

 

1.  基于 K8s 控制平面,面向混合环境统一交付

 

10.png

基于K8s的“应用交付控制平面”架构

 

基于K8s的“应用交付控制平面”,不侵入到用户的应用运行时集群,架构分为两层:


•        下方是核心控制器,运行交付工作流帮我们到达终态,架构在多集群(易构的边缘集群、中心集群等)多环境基础之上;

•        上方是面对用户是标准的Application描述文件;面对开发者,业务包括服务、第三方、云服务等。核心应用包含了服务组件,组件可以挂相应的标准描述运维特征(日志收集、指标监控、链路追踪、服务注册、网关策略等),可以通过UI或命令行两种终端形态进行完整的生命周期管理。

 

2.  架构特点:

 

a.  与运行时解耦:


用户可以使用任何来自社区的K8s插件运维和管理应用,交付引擎在控制平面管理和操作这些插件;


b.  天然支持多环境/多集群应用交付:


围绕着应用描述,提供了完整的多集群应用交付能力、用户可通过配置应用在多个集群的调度策略、差异性配置策略即可便捷完成多集群复杂应用的安全交付。


c.  面向终态的统一云资源管理;


KubeVela集成了Terraform 的云资源描述能力,继而集成了Terraform 的云资源支持生态,通过Application 描述用户可以同时交付普通服务和云服务组成完整交付应用。

 

d.  云边一体的统一交付模式;


集成边缘应用的描述规范,边缘环境以KubeAPI 规范接入到管控平面,实现边缘应用的维护和分发。

 

e.  面向不同场景需求用户分层集成;


KubeVela 架构上分为核心模块和上层终端产品VelaUX,对于大型企业的PaaS平台开发者,可直接集成 KubeVela 核心模块,获取应用引擎能力。对于中小型终端客户,可借助终端产品生态快速落地。同时VelaUX也具备了必要的扩展能力,通过编辑配置即可适应不同企业的应用管理诉求。

 

3.  Application Demo示例:

 

11.png


1)  待交付组件


比如容器镜像、Helm chart、云资源Terraform模块等...定义任意可交付制品!


2)  运维能力


应用部署后的持续运维,比如路由规则、自动扩缩容规则等...像乐高一样可以附着作用于组件上!


3)  交付策略


比如环境部署策略、差异性配置策略、健康检查策略、防火墙规则等,任何一个部署前需要遵守的规则都可以在这个阶段声明和执行!


4)  工作流定义


比如跨环境部署、手动审批、通知等管道式持续交付能力!

 

统一的声明式应用交付抽象定义:


•        开发者唯一需要用户学习的API

•        完全声明式,面向终态的自动化管理,可以直接被GitOps驱动。

 

4.  灵活的扩展机制

 

12.png

 

KubeVela的设计就是一个微内核状态,先安装基础的微内核,然后需要什么能力就去安装对应的扩展插件,整个完整的插件体系可以帮助开发者快速的接入相应的能力。

 

5.  生态项目对比

 

a.  纯粹的GitOps系统:本质上是在运行时集群中的agent,无法跨环境交付;


b.   经典应用CI/CD交付平台:


•   本质上是面向过程的执行,不具备声明式系统的自动、幂等、收敛、确定等特性;

•   安全性问题的本质:基于过程式的Push vs基于统一模型的Pull


c.  各类Kubernetes发行版:定位上就严格遵守K8sAPI,不提供K8s.上的应用层能力;


d.  经典PaaS/各类“云原生"应用管理平台:本质上是不具备开放性的封闭抽象


•   只能处理容器交付,不能面向云进行统一交付

•   不可扩展(需要重写代码和重新部署),不能跟随用户一起成长和演进

•   被集成性差:用户需要做出唯-性选择,不能够跟其他平台共存

 

6.  OAM:现代微服务与应用交付模型

 

13.png

 

要屏蔽繁杂的底层,一个重要的问题就是标准化。将应用通过标准化的描述,让业务和基础测试有完美的衔接,KubeVela体系完全基于OAM的生态去做,欢迎各大厂商共建,普惠云的开发者。

 

7.  实践案例 - Serverless 应用引擎(SAE

 

14.png

 

SAE的核心能力是支持微服务或者PHP应用的开发者,只需要提供warjarphp的源码包,就可以完成后面所有微服务治理和整个部署链路的管理事项,其背后就是KubeVela进行支撑。

 

8.  社区和生态

 

•        Star: 超过3300

•        镜像下载: 100万次

•        贡献者超过: 120

•        Commit: 超过2000

 

参考资料:

GitHub地址:https://github.com/oam-dev/kubevela

KubeVela文档:https //kubevela.io

给项目点Starhttps //gith:ib. com/oam-dev/kubeveta

用户注册登记:https:// github.com/oam-dev/ kubevela/issues/1662s

 

15.png

 

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3天前
|
监控 Cloud Native 安全
云原生架构:现代应用的未来之路
随着数字化转型的推进,云原生架构成为了现代应用开发的关键。本文将探讨云原生架构的基本概念、优势以及实践指南,帮助读者更好地理解并应用云原生技术,为未来的应用开发之路铺平道路。
|
14天前
|
机器学习/深度学习 算法 Cloud Native
利用机器学习进行情感分析:从理论到实践云原生技术在现代软件开发中的应用与挑战
【5月更文挑战第31天】本文旨在深入探讨机器学习在情感分析领域的应用。首先,我们将解释什么是情感分析以及为什么它在今天的世界中如此重要。然后,我们将详细介绍几种主要的机器学习算法,包括决策树、随机森林和神经网络,以及它们如何被用于情感分析。最后,我们将通过一个实际的案例研究来展示这些理论在实践中的应用。
|
15天前
|
运维 Cloud Native 安全
构建未来:云原生技术在企业数字化转型中的应用
【5月更文挑战第30天】 随着信息技术的不断进步,企业的数字化转型已经成为不可逆转的趋势。在这个过程中,云原生技术以其独特的优势,如弹性伸缩、微服务架构和持续交付等,为企业提供了强大的技术支持。本文将深入探讨云原生技术的关键组成部分,以及它们如何帮助企业实现敏捷开发和自动化运维,从而加速数字化转型的步伐。
|
1天前
|
Cloud Native 持续交付 开发者
云原生技术:构建现代应用的基石
【6月更文挑战第12天】本文深入探讨了云原生技术如何成为现代应用开发的中坚力量。我们将分析其核心概念,如容器化、微服务架构以及持续集成/持续部署(CI/CD),并讨论这些技术如何促进开发效率、提高应用的可扩展性与可靠性。通过实际案例,揭示云原生技术在数字化转型中的关键作用及其对IT行业的深远影响。
7 2
|
4天前
|
运维 Cloud Native 安全
云原生应用的挑战与机遇
【6月更文挑战第10天】云原生应用凭借高扩展性与灵活性成为现代开发的热门选择,但同时也带来技术复杂性、安全风险和成本投入等挑战。尽管如此,其机遇也不容忽视:提高业务连续性、优化资源配置及推动数字化转型。企业需应对挑战,抓住机遇,以实现技术升级和价值增长。未来,云原生应用将在更多领域发挥作用。
|
5天前
|
Cloud Native 持续交付 云计算
云原生技术:构建现代应用的基石
【6月更文挑战第8天】本文深入探讨了云原生技术,一种革新性的软件开发方法,它支持在云计算环境中构建和运行可扩展、高效的应用程序。我们将分析云原生的核心概念、优势以及如何通过容器化、微服务架构和持续集成/持续部署(CI/CD)等实践推动应用的现代化。
|
7天前
|
边缘计算 Cloud Native 持续交付
云原生技术的发展与应用前景
近年来,随着云计算技术的快速发展,云原生技术作为一种新兴的软件开发和部署范式受到了广泛关注。本文将从云原生技术的定义、特点和发展历程入手,探讨其在当今技术领域中的应用前景和发展趋势。
|
7天前
|
人工智能 运维 Cloud Native
探索未来科技趋势:云原生平台的发展与应用
随着数字化时代的到来,云原生平台作为新一代技术的代表,正日益受到关注。本文将深入探讨云原生平台的定义、特点以及发展趋势,分析其在未来科技领域的应用前景,为读者带来对未来科技发展的新理解。
17 0
|
7天前
|
运维 Cloud Native 云计算
云原生技术在企业级应用中的应用与前景分析
随着云计算技术的快速发展,云原生技术作为一种优秀的应用架构模式,正在逐渐受到企业和开发者的关注。本文通过分析云原生技术在企业级应用中的应用情况和未来发展前景,探讨了其在加速企业数字化转型、提升应用性能和灵活性等方面的优势,以及面临的挑战和解决方案。
15 0
|
8天前
|
Cloud Native 物联网 持续交付
云原生技术的兴起与应用
【6月更文挑战第5天】在这篇文章中,我们将探讨云原生技术的起源、发展及其在现代IT行业中的应用。我们将分析云原生技术的关键组成部分,以及它们如何改变软件开发和部署的方式。此外,我们还将讨论云原生技术面临的挑战和未来发展趋势。