如何基于K8s构建下一代DevOps平台?

简介: OAM是阿里巴巴与微软联合推出的开放应用模型,旨在解耦应用研发、应用运维与基础设施人员在应用生命周期中各自的关注点,明晰责任与界限,聚焦自身业务,同时又依然能紧密协作。当前云原生DevOps体系现状如何?面临哪些挑战?如何通过OAM解决云原生DevOps场景下的诸多问题?云原生开发应用模型OAM(Open Application Model)社区核心成员孙健波将为大家一一解答,并分享如何基于OAM和Kubernetes打造无限能力的下一代DevOps平台。

image.png

一 什么是DevOps?为什么基于Kubernetes构建?

2009年举办了第一届DevOpsDays大会,DevOps名字被首次提出。到2010年,DevOps的概念越来越火,出了What is DevOps的文章,讲解了DevOps的概念,方法论及配套的工具。简单来说,研发工程师需要和运维工程师深度的合作,同时通过一系列工具保证研发更加顺畅,从而更容易的接触生产环境。到2013年,Docker出现了,工程师可以第一次到软件生产环境中定义,通过Docker image完成单机软件的交付和分发。此时DevOps开始慢慢落地。2015年开始,DevOps相关的工具越来越多,资源利用率出现了一些问题,CNCF的成立使得DevOps的实践往Kubernetes上走。

image.png

阿里在Kubernetes上的实践也取得了非常好的成果。在规模方面,阿里内部集成了数十个节点可以达到上万的集群,同时具备高性能和安全特性,秒级扩容,神龙+安全容器。具备极致的弹性,分钟级拆解公有云计算资源,无限资源池。另一方面,Kubernetes社区已经具备非常丰富的DevOps生态基础功能,包括镜像托管、CICD流水线、任务编排、发布策略、镜像打包、分发、丰富的应用运行时的负载支撑、丰富弹性和应用扩容能力。

为什么阿里基于Kubernetes构建DevOps平台?

1)阿里基于Kubernetes的无限资源池与基础设施能力

  • 大规模 – 单集群最高可达10000节点、百万Pod
  • 高性能 – 秒级扩容,智能伸缩,神龙 + 安全容器
  • 极致弹性 – 分钟级拆解公有云计算资源,无限资源池

2)社区围绕Kubernetes已经具备丰富的DevOps生态基础功能

  • 源码到容器镜像仓库,Kubernetes是容器平台事实标准:Github/DockerHub
  • CI/CD流水线、任务编排、发布策略:Argo/Teckton/Spinnaker/Jenkins-X/Flagger
  • 镜像打包、分发:Helm/CNAB
  • 丰富的应用运行负载支撑:Deployment(无状态)/StatefulSet(有状态)/OpenKruise(原生有状态增强)
  • 丰富的弹性和应用扩缩容能力:HPA/KEDA

二 基于Kubernetes的DevOps平台新挑战

下图展示了一个云原生下的DevOps流水线的典型流程。首先是代码的开发,代码托管到Github,再接入单元测试的工具Jenkins,此时基本研发已完成。再接着到镜像的构建,涉及到配置、编排等。云原生中可以用HELM打包应用。打包好的应用部署到各个环境中。但整个过程中会面临很多挑战。首先,在不同的环境需要不同的运维能力。

image.png

其次,配置的过程中要创建云上数据库,需要另外打开一个控制台来创建数据库。还需要配置负载均衡。在应用启动以后还需要配置额外的功能,包括日志、策略、安全防护等等。可以发现,云资源和DevOps平台体验是割裂的,里面充斥着借助外部平台创建的过程。这对新手来说是非常痛苦的。

挑战一:云资源与 DevOps 平台体验割裂

DevOps流程中充斥着大量需要外部平台创建的过程:

image.png

挑战二:研发、运维、基础设施关注点耦合

下图是常用的K8s的YAML配置文件,大家经常吐槽这个配置文件很复杂。简单来说YAML配置文件可以分为三大块,一块是运维比较关心的配置,包括实例数,策略和发布。第二块是研发关心的,涉及到镜像、端口号等。第三块是基础设施工程师看得懂的,如调度策略等。K8s的配置文件中将方方面面的信息都耦合在一起,这对K8s工程师来说是非常适合的,但是对应用侧的终端工程师而言,有很多不需要关心的配置指标。

image.png

  • DevOps流程中缺乏对“应用”这个概念的描述
  • K8s 的 YAML文件的定位并不是终端用户

挑战三:平台的自定义封装,简单却能力不足

DevOps平台对K8s能力封装抽象,只剩下5个Deployment的字段需要研发填写。从用户角度而言,这种设置非常好用简单。但是针对稍微复杂的应用,涉及到应用状态管理,健康检查等等一系列的操作,此时这5个字段是不够的。

image.png

挑战四:CRD 扩展能力强大,DevOps 平台无法直接复用

CRD(Customize Resource Definition)扩展能力强大,几乎所有软件都可以通过CRD的方式进行扩展,包括数据库、存储、安全、编排、依赖管理、发布等。但是对DevOps平台来说,上面接口并没有向用户暴露,导致无法直接复用。

image.png

挑战五:DevOps 平台开发的新能力使用门槛高

如果平台想要扩展一些能力,而原生的自动扩缩容能力不太合适,希望开发定时的扩缩容YAML文件,随着业务情况而设置。但此时用户使用YAML的门槛非常高,不清楚如何使用YAML。随着新能力开发越来越多,能力之间会出现冲突,这也非常难以管理。

image.png

  • 运维同学怎么知道这个扩展能力怎么用?

看 CRD?看配置文件?看 …… 文档?

  • 扩展能力间出现冲突,导致线上故障

比如:CronHPA 和 默认 HPA 被同时安装给了同一个应用

K8s 扩展能力之间的冲突关系,如何有效管理?如何有效的对运维透出?

挑战六:不同 DevOps 平台需要完全重新对接

很多云原生实践中会遇到的问题,即需要定义非常复杂的YAML,这种方式可以解决企业内部所有问题,但是挑战在于很难与生态进行对接。如RDS,SLB的能力都嵌到YAML文件中,无法复用,几乎不具备原子化能力。同时无法协作,无法提供给兄弟部门或生态使用,只能给内部封闭生态使用。上层系统不同应用对接DevOps平台时,需要写不同格式的YAML,这也是非常痛苦的。

image.png

  • 难以理解,必须通过界面可视化透出
  • 无法复用,几乎不具备原子化能力
  • 无法协作,只能内部封闭生态使用

三 OAM应用模型的技术原理

Component组件

OAM中常见的概念是Component组件,完全从研发角度定义的待部署单元。下图右侧是YAML中Component的例子,其中黄色部分可以灵活自定义。OAM中会定义标准的架构ContaineriseWorkload,表示工作负载部分,里面是待部署单元的具体描述。这时就可以解决关注点分离的问题,帮助应用侧工程师去掉很多细节,只需要关心开发需要关注的端口号,镜像等等。

image.png

应对挑战一,在OAM中可以定义数据库表达资源需要使用云资源,Workload中可以根据自己的需要定义不同的组件,包括基于虚拟机的应用、或者老的Function应用。组件是应用开发者关心的。

image.png

Trait

如果只是组件,组合起来就可以构建简单的应用。如果关心应用运维的问题,OAM中有Trait的概念,指的是在原来组件的基础上附加一些特征。特征指的是运维的能力,如手动扩缩容能力、外部访问能力、发布、负载均衡。弹性扩缩容、基于流量的管理等等。通过OAM的Trait可以很灵活的得到插件化扩充能力。不同的component绑定不同的特征。

image.png

Scope

Component,Trait以及所有组装起来的Application Configuration就是OAM中的三种主要的概念。但当多个组件共同协作时应该如何处理?OAM中有个边界Scope的概念,是一种特殊的Trait,将多个Component组合在一起,共享一组资源组,CPU等特征用Scope表示,拓展多个组件的共同特征。

image.png

四 OAM加持下的下一代DevOps技术

OAM:以应用为中心的分层模型

OAM是以应用为中心的分层模型,首先需要运行在服务端的OAM解释器,对于YAML的读取需要通过OAM解释器。OAM提供Trait,Component让用户填写,编成APP Config。APP Config通过OAM解释器具备Deployment,Ingress,HPA或者云资源等能力。这种方法可以将研发、运维基于基础设施进行分层,研发关心Component,运维关心Trait,基础设施通过OAM解释器提供各种能力,与K8s紧密结合,对其应用概念做了补充。

image.png

  • 分层
  • 模块化
  • 可复用

快速的纳入K8s生态已有Operater能力

OAM可以快速的纳入K8s生态已有的Operater能力,下图左边的Component中是一个CRD的实例,右边是Trait中的CRD的实例,中间表示Component底下的Workload和Trait分别对应了K8s自定义资源的能力。如果想要使用K8s中的某些能力,只需要在Trait中写入相应的字段即可。

image.png

OAM框架解决组件依赖关系和启动顺序

OAM框架解决组件依赖关系和启动顺序。OAM Runtime,OAM解释器会将组件依赖关系和启动顺序处理好,下图中Component之间有dependency关系,Trait与Component之间有preComponent或者postComponent等关系。

image.png

OAM Trait灵活解决资源绑定难题

启动顺序厘清之后涉及到资源绑定问题,一边是使用的数据库,另一边是Web的程序,Web的程序绑定数据库连接串资源。在OAM中只需要写一个Trait就可以解决资源绑定问题,下图右边,K8s通过Secret承载连接串信息,Service Binding Trait对应一个运行的Operator,Web Hook拿到Secret后注入进数据库中。

image.png

Workload与Trait交互机制

大家会考虑接入OAM会不会比较麻烦,需不需要改代码。OAM设计了Workload与Trait交互机制,OAM内部零改造,只需要扩展Workload和Trait。首先,Component中创建Workload实例,再创建Trait实例,只需要在Trait中查看Workload的Definition,从而配置Trait中需要的能力。

image.png

如果开发了新的能力,碰到冲突问题也是非常头痛的。在OAM框架中定义Trait时,可以检查哪些字段是冲突的,拒绝掉新的应用的创建,从而保障Trait之间的兼容性,使得运维问题可发现、可管理。

image.png

OAM:无限能力的DevOps平台体系

下图是DevOps平台体系,最下层是OAM Runtime,一部分是Workload,对应运行时的承载的Runtime,如Function、Container、虚拟机、Serverless Service等。另一部分是Trait,对应运维能力,如发布、弹性扩缩容、日志、安全等等。再上一层可以根据场景化组合(Application Profile)组装成不同的业务形态平台,不同平台可以使用不同组合的Workload和Trait,具备不同的能力。通过OAM标准化的模型构建无限能力的DevOps平台,满足各种场景的需要。

image.png

在用户侧,OAM加持下的研发DevOps流程在镜像构建完成之后使用达到统一,OAM提供了APP Config,包含不同的Component,每个Component包含不同的运维能力Trait,支持不同的环境,如测试环境、生成环境。OAM配置统一,适合不同的云,可以拿到不同的集群中直接运行。在K8s侧,用户只需要装上插件,就可以很方便的嵌入很多丰富的能力。

image.png

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1天前
|
Kubernetes 监控 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【5月更文挑战第4天】在现代软件开发中,微服务架构已成为实现可扩展、灵活且独立部署服务的流行解决方案。本文将探讨如何利用Docker容器化技术和Kubernetes容器编排平台来构建一个高效的微服务系统。我们将分析Docker和Kubernetes的核心优势,并指导读者如何通过这些工具优化微服务部署、管理和扩展过程。文章还将涉及监控和日志管理策略,以确保系统的健壮性和可靠性。
|
3天前
|
存储 运维 Kubernetes
构建高效自动化运维体系:Ansible与Kubernetes的协同实践
【5月更文挑战第2天】随着云计算和微服务架构的兴起,自动化运维成为保障系统稳定性与效率的关键。本文将深入探讨如何利用Ansible作为配置管理工具,结合Kubernetes容器编排能力,共同打造一个高效、可靠的自动化运维体系。通过剖析二者的整合策略及具体操作步骤,为读者提供一套提升运维效率、降低人为错误的实用解决方案。
|
4天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第1天】 随着云计算的普及和企业数字化转型的加速,传统的IT运维模式已无法满足快速迭代和高可用性的要求。本文探讨了如何通过DevOps文化和容器化技术的融合来构建一个高效、稳定且可扩展的云基础设施。文章首先回顾了DevOps的核心理念及其对运维工作的影响,随后详细介绍了容器化技术的基本概念、优势以及在现代云环境中的关键作用。接着,文中以一系列真实案例为基础,分析了将DevOps与容器化相结合时所面临的挑战和解决方案,并提出了一套实施框架。最后,文章总结了这种融合实践对提高运维效率、加快产品上市速度和保障系统稳定性的积极影响,同时对未来的技术趋势进行了展望。
|
5天前
|
Kubernetes Devops Docker
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【4月更文挑战第30天】 在当今快速迭代和持续交付的软件发展环境中,传统的IT运维模式已不足以满足企业对效率和稳定性的双重需求。本文将深入探讨如何通过整合DevOps理念和容器化技术来构建一个既高效又稳定的云基础设施。文中不仅阐述了DevOps的核心原则、流程自动化的重要性以及容器化技术的基础知识,还提供了一个详细的实施案例,帮助读者理解这两种技术如何协同工作,以支持复杂的应用程序部署和管理。
|
5天前
|
人工智能 运维 自然语言处理
构建高效自动化运维体系:DevOps与AI的融合之路
【4月更文挑战第30天】在数字化转型的大潮中,企业IT基础设施的复杂性日益增加,传统的运维模式已难以满足快速变化的业务需求。本文深入探讨了如何通过融合DevOps和人工智能(AI)技术构建一个高效、自动化的运维体系。文章首先概述了现代运维面临的挑战,接着分析了DevOps的核心理念以及AI如何在故障预测、智能决策支持等方面提升运维效率。最后,本文提出了一个具体的实施框架,并讨论了在推进过程中可能遇到的挑战及应对策略。
|
5天前
|
运维 Devops 持续交付
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【4月更文挑战第30天】 随着云计算的普及和企业数字化转型的深入,传统的IT运维模式已无法满足快速迭代和高可用性的要求。本文将探讨如何通过融合DevOps理念和容器化技术,构建一套高效、稳定且易于管理的云基础设施。文章首先概述了DevOps的基本概念及其在现代IT管理中的重要性,接着介绍了容器化技术的核心组件和优势,最后详细阐述了如何整合这两种技术以提高系统的稳定性和自动化程度,实现持续集成和持续部署(CI/CD),并通过真实案例分析展示了该融合策略的有效性。
|
5天前
|
运维 Devops 持续交付
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【4月更文挑战第30天】 在当今数字化转型的浪潮中,企业对IT基础设施的要求越来越高。本文将探讨如何通过整合DevOps理念和容器化技术,构建一个既能快速响应市场变化,又能保证系统高效稳定运行的云基础设施。我们将分析DevOps文化的重要性,容器化技术的选型,以及二者结合带来的优势,同时提供具体的实施策略和案例分析,以帮助企业实现持续集成、持续部署(CI/CD)和微服务架构的落地。
|
5天前
|
人工智能 运维 监控
构建高效自动化运维体系:DevOps与AI的融合实践
【4月更文挑战第30天】 在当今快速迭代的软件开发环境中,高效的自动化运维体系成为确保交付速度和服务质量的关键。本文探讨了如何通过整合DevOps理念和人工智能(AI)技术来构建一个更加智能、高效的运维体系。文章将详细阐述自动化运维的核心组件,以及如何利用AI技术优化这些组件的性能和决策过程。通过实际案例分析,本文展示了这种融合实践在提高运维效率、降低错误率以及提升系统稳定性方面的显著成效。
|
2月前
|
运维 安全 Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
在数字化转型的浪潮中,企业对于IT基础设施的要求越来越高,不仅需要快速响应市场变化,还要确保系统的稳定与安全。本文深入探讨了如何通过融合DevOps文化和容器化技术来构建一个高效、稳定且易于管理的云基础设施。通过实际案例分析,阐述了持续集成/持续部署(CI/CD)流程的优化、自动化测试、监控以及日志管理等关键环节的实施策略,旨在为运维专业人员提供一套切实可行的解决方案。
33 3
|
2月前
|
运维 Kubernetes Devops
构建高效可靠的云基础设施:DevOps与容器化技术融合实践
【2月更文挑战第30天】 在当今快速迭代和竞争激烈的软件开发领域,传统的IT运维模式已难以满足业务发展的需要。本文将探讨如何通过整合DevOps文化和容器化技术,构建一个既高效又可靠的云基础设施。文章首先回顾了DevOps的核心理念及其对运维工作流的影响,接着深入讨论了容器化技术的优势和挑战,并提出了一套结合两者的实施方案。最后,通过案例分析展示了该方案在实际环境中的应用效果和潜在益处。

推荐镜像

更多