文|李大元(昵称:大元)Kusion项目负责人来自蚂蚁集团PaaS核心团队,PaaSIaC基础平台负责人。本文PART共11分钟阅读4331字。1后云原生时代Kubernetes的第一次Commit已经过去八年多了。以其为代表的云原生技术不再是新技术,而是现代应用的“标配”。”。现代应用所依赖的基础服务远不止Kubernetes,更复杂的应用往往会使用到Kubernetes生态云原生技术、IaaS云服务、企业内部自建系统等各种异构基础设施。可能还有多云、混合云部署需求,我们已经进入“后云原生时代”,仅针对Kubernetes的运维工具已经不能满足我们的需求。更复杂的是,在企业内部,这些服务是一般由不同的团队维护,一个大规模的运维需要多个团队成员的合作才能完成,但AppDev、PlatformDev、SRE团队之间缺乏高效的沟通协作方式,技术复杂自身和低效的团队合作,使得“后云原生时代”的大规模运维难度不断扩大一下子增加了。部分。2大规模运维问题一直是复杂异构基础设施的大规模运维。这不是后云原生时代特有的问题。自分布式系统诞生以来,就一直是个问题。在云原生时代,这个问题变得更加棘手。业界早在十多年前就提出了DevOps的概念。无数公司基于这个理念构建了自己的DevOps平台,希望能够解决这个问题,但实际实施过程往往不尽如人意。Dev团队和Ops团队之间如何合作?责任如何划分?几十人的平台团队,如何支撑上万工程师的运维需求?底层基础设施复杂多样,能力日新月异。如何快速让一线开发者享受技术红利?这些问题都没有得到很好的解决。最近,有人提出DevOps已死,平台工程才是未来。无论概念定义如何,无论是DevOps还是PlatformEngineering,在企业大规模运维的同一命题下,本质上是不同的概念。我们更需要的是一种顺应技术发展趋势,能够解决当前问题的解决方案。部分。3传统的架构不再适用于传统的运维思维。解决以上问题一般是搭建一个PaaS平台,比如我们早期的蚂蚁PaaS平台。它是一个带有UI界面的Web控制台。用户(通常是AppDev或SRE)可以通过UI交互完成发布、重启、伸缩等操作。在技??术实现上,大致可以分为三个部分,作为系统入口提供用户交互能力的前端系统;中间的后端系统连接到各种基础设施;底层是各种基础设施的API。这个架构已经运行了将近十年,一直运行的很好。它有一个用户友好的界面,可以屏蔽基础设施的复杂性,每个团队的职责都有明确的定义。然而,在后云原生时代,这种架构已经不再适用,暴露出“耗人”和“耗时”两个致命缺陷。举一个常见的例子,网络团队为其Loadbalancer(负载均衡器)开发了一种新的负载算法,需要提供给用户。在上面的架构下,整个工作流程是这样的:1.网络团队开发能力,提供API;2、PaaS后端通过编码连接底层API,打通互联,屏蔽复杂度,为用户提供更高层次的API;3.PaaS前端根据新功能修改UI,使用后端API向终端用户展示能力。这里有一个问题。再小的功能也需要PaaS后台和前台修改代码。整个过程最快需要一周才能上线,参与的基础设施团队越多,效率越低。这个问题在十年前不被认为是问题,但在今天却是一个大问题。一个后云原生时代的现代应用,使用三种云原生技术(Kubernetes+Istio+Prometheus),两种云服务(Loadbalancer+Database),一种内部自建服务,已经是很常见的形式,复杂的应用会只能依靠更多。如果每一个基础设施都被PaaS团队硬编码,那么扩充PaaS团队十倍是不够的。说完“感人”,再来看“耗时”的问题。上面例子中的一个小功能需要两次跨团队协作,一次是基础设施和PaaS后端,一次是PaaS后端和PaaS前端。团队合作是一个难题,有时甚至比技术本身还要难。应用架构已经很复杂了。如果你要做一个大规模的运维,一次运维100个应用,你需要和多少个团队沟通协作?需要多少时间?如果没有良好的协调机制,这将成为一项不可能完成的任务。部分。4探索与实践我们在蚂蚁集团内部探索了近两年。我们实践了kustomize、helm、argoCD、Terraform等常用工具,甚至还为一些工具开发了一些辅助系统,但效果并不理想。不满意。这些工具要么过于局限于Kubernetes生态,无法运维其他类型的基础设施,要么支持异构基础设施,但对Kubernetes生态不友好,无法发挥云原生技术的优势,只是运维和维护。维修工具。的升级,团队合作效率几乎没有提升,我们需要更系统的解决方案。回到问题本身,针对“耗人”和“耗时”的问题,我们提出了两个思路:1、AppDev能否以高效自助的方式使用互联互通,而不是让PaaS做中转?各种基础设施能力?2、是否可以搭建一个中心化的协作平台,用技术手段来规范大家的行为,规范沟通?从技术角度来看,PaaS平台需要提供灵活的工具链和工作流。基础架构的所有功能都以模块化方式公开。AppDev利用这些平台的基本能力,将它们组合、编排,解决各自的问题,该过程不需要平台层的参与。并且全程参与的所有团队使用统一的语言和界面进行沟通,全程无需人工参与。部分。5我们的实践经过蚂蚁内部PaaS平台近两年的探索和实践,我们沉淀了一个完整的端到端解决方案,命名为KusionStack,现已开源。试图从统一异构基础设施运维和团队协作的角度,解决传统PaaS“费”、“费时”的问题。整个系统主要分为三个部分:1.Konfig:Git库,是多团队协作的集中平台,存放了各个团队的运维意图;通讯工具;3.Kusion:KusionStack引擎,负责所有的运维操作。PlatformDev通过KCL定义基础能力模型,AppDev通过import、mixin等语言特性在应用配置模型(AppConfig)中复用这些预定义的能力,并在Konfig中快速描述运维意图。AppConfig是一个精心设计的模型,只暴露AppDev需要关心的属性,屏蔽了基础设施的复杂性。永远不要低估基础设施的专业性和复杂性。即便是已经成为云原生技术标准的Kubernetes,对于普通用户来说,仍然有着很高的使用门槛。一个Deployment有几十个字段,加上自定义标签,注解就更多了,普通用户根本看不懂。也就是说,普通的AppDev应该不懂Kubernetes,他们需要的只是release,根本不需要关心底层是不是Kubernetes。AppConfig编译后会生成多个异构的基础设施资源,通过CI、CLI、GUI等方式将数据传输给KusionStack引擎。引擎是整个系统的核心,负责所有的运维操作,是运维的地方维护意向真正对基础设施产生影响。它以统一的方式连接异构基础设施,对这些资源进行验证、整理、预览、验证、观察、健康检查等一系列操作。值得一提的是,整个过程对Kubernetes资源的运维非常友好。用过Kubernetes的同学都知道,由于其面向终态和自调的特点,apply成功并不代表资源可用。服务需要等待资源协调成功。如果对账失败,需要登录集群,通过get、describe、log等命令查看具体报错,整个过程非常繁琐。我们通过技术手段简化了这些操作,将对账过程中的重要信息以友好的方式展现出来。下面的动画是一个简单的例子。命令发出后,可以清楚的看到所有资源及其关联资源的对账过程,直到资源真正可用为止。整个系统具有以下特点:1、以应用为中心的应用综合配置管理,包括计算、网络、存储等所有与应用相关的配置;应用程序生命周期管理,从配置代码的第一行到生产可用性。2、“后云原生时代”应用异构基础设施统一运维Kubernetes友好型工作流为Kubernetes资源提供可观察性、健康检查等高阶能力,释放云原生技术红利;复用Terraform生态,统一Kubernetes和Terraform多运行时资源的工作流运维。3、借助大型协同平台灵活的工作流程,用户可以利用平台的基础能力,自行组合、编排解决自己的问题;AppDev和PlatformDev重心分离,底层能力迭代不需要平台介入,AppDev可以直接使用;纯客户端解决方案,风险“左移”,问题可以解决尽快被发现。部分。6一切才刚刚开始。经过近两年的探索,该系统已广泛应用于蚂蚁多云应用交付运维、计算与数据基础设施交付、网站建设运维、数据库运维等多个业务领域,目前400+开发者直接参与了Konfig库的代码贡献,累积了近800KCommits,其中大部分是机器自动化的代码修改,平均每天有1K的流水线任务执行和近10K的KCL编译执行。完全编译后,可以生成3M+行YAML文本。然而,这一切才刚刚开始,后云原生时代才刚刚到来。我们开源这个系统的目的,也是为了邀请行业各方的力量,共同构建一个能够真正解决当前企业规模化运营的技术发展趋势。解决这个问题。蚂蚁PaaS团队还有很多经过内部规模验证的技术积累,未来会开源。只有我们远远不够,诚邀大家一起玩。|相关链接|Kusion:https://github.com/KusionStack/kusionKCL:https://github.com/KusionStack/KCLVMKonfig:https://github.com/KusionStack/konfig官网:https://kusionstack.ioPPT:KusionStack:“后云原生时代”应用模块化运维解决方案https://kusionstack.io/blog/2022-kusionstack-application-scale-operation-solution-in-the-post-cloudnative-era/了解更多更多...KusionStack之星?:https://github.com/KusionStack/kusion本周推荐阅读从大型平台工程的实践中,我们学到了什么?KusionStack开源思考|历时两年打破“行云流水如山”的困局Go码城上云——KusionStack实践KusionStack开源|Kusion模型库与工具链探索与实践
