searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

CNCF Application Definition之KubeVela

2023-11-03 06:56:53
28
0

1、CNCF Application Definition & Image Build 概览

CNCF Application Definition & Image Build 涵盖应用定义、开发工具、调试、环境配置、镜像构建、发布等方方面面的内容。截止2022.10.01 共 52 个项目,其中:

    • CNCF 项目:16 个
      • CNCF 毕业项目: 1个,Helm
      • CNCF 孵化项目:4个,Backstage、Buildpacks、KubeVirt、Operator Framework
      • CNCF 沙箱项目:11个,Artifact Hub、Devfile、Konveyor、Krator、KubeVela、KUDO、Nocalhost、Porter、sealer、Serverless Workflow、Telepresence
    • CNCF 成员产品/项目:37 个,包括 Open Application Model(OAM)
    • 非 CNCF 成员产品/项目:10 个
 

2、KubeVela

2.1、KubeVela 是什么

KubeVela基于OAM实现,KubeVela之于OAM类似于Istio之于服务网格,不同的是OAM已经从理念上升为规范。KubeVela的主旨是“Make shipping applications more enjoyable.(让应用部署和管理更轻松)”。

KubeVela is a modern software delivery platform that makes deploying and operating applications across today's hybrid, multi-cloud environments easier, faster and more reliable.
KubeVela 是一个现代化的软件交付平台,它可以让你的应用交付在当今流行的混合、多云环境中变得更加简单、高效、可靠。

KubeVela is infrastructure agnostic, programmable, yet most importantly, application-centric. It allows you to build powerful software, and deliver them anywhere!
KubeVela 是基础设施无关的、可编程的,但最重要的是: 它是完全以应用为中心的。它可以帮助你构建多样化的云原生应用,并交付到任意的云和基础设施!

功能层面上,KubeVela 在 CICD 层做了一层抽象,使得应用交付与底层基础设施无关。

2.2、核心概念

2.2.1、OAM 应用(Application)

2.2.1.1、KubeVela 定义的应用

apiVersion: core.oam.dev/v1beta1
kind: Application // 对完整应用部署建模的高级别抽象
metadata:
  name: <name>
spec:
  components: // OAM 的概念,支持例如二进制、Helm chart、Kustomize pkg、云产品模板、Terraform模块等等
    - name: <component name>
      type: <component type>  // OAM 的概念,component 背后包含一个 workload
      properties:
        <parameter values>
      traits:  // OAM 的概念,附加都组件的运维操作,支持例如路由规则、自动伸缩规则等等
        - type: <trait type>
          properties:
            <traits parameter values>
    - name: <component name>
      type: <component type>
      properties:
        <parameter values>
  policies: // 部署之前要强制执行的任何策略,例如安全域、健康检查策略、防火墙规则
  - name: <policy name>
    type: <policy type>
    properties:
      <policy parameter values>
  workflow: // 应用程序部署被建模为DAG(工作流)。任何流水线类型的交付步骤,例如蓝绿发布、金丝雀发布、人工审批等
    - name: <step name>
      type: <step type>
      properties:
        <step parameter values>   

每一个应用部署计划都由四个部分组成,分别是组件、运维能力、部署策略和工作流,分别对应了 component、trait、policy 以及 workflow step这四种类型,这些类型背后都是平台构建者(运维团队)维护的可编程模块。这种抽象方式是高度可扩展、可定制的。

  • 组件(Component): 组件定义一个应用包含的待交付制品(二进制、Docker 镜像、Helm Chart...)或云服务。我们认为一个应用部署计划部署的是一个微服务单元,里面主要包含一个核心的用于频繁迭代的服务,以及一组服务所依赖的中间件集合(包含数据库、缓存、云服务等),一个应用中包含的组件数量应该控制在约 15 个以内。
  • 运维特征(Trait): 运维特征是可以随时绑定给待部署组件的、模块化、可拔插的运维能力,比如:副本数调整(手动、自动)、数据持久化、 设置网关策略、自动设置 DNS 解析等。
  • 应用策略(Policy): 应用策略负责定义指定应用交付过程中的策略,比如多集群部署的差异化配置、资源放置策略、安全组策略、防火墙规则、SLO 目标等。
  • 工作流步骤(Workflow Step): 工作流由多个步骤组成,允许用户自定义应用在某个环境的交付过程。典型的工作流步骤包括人工审核、数据传递、多集群发布、通知等。

3.2.1.2. 插件(Addon) -- 底层无关

KubeVela 提供了强大的插件机制,插件被定义为可编程能力及其实现构成的包,具体由 OAM 的模块定义和背后的Kubernetes CRD 控制器组成的集合。事实上,就是Application中component、trait、policy、workflow最后输出的资源对象或cr,由插件 watch 到之后去施工。插件本身也是应用。

除了扩展性和效率以外,许多围绕 IaC 的工具都会引发生产环境和配置中心数据不一致的问题,业界称之为“配置漂移”,引起配置漂移的核心原因往往来自于生产环境的配置修改有多个来源、平台对配置的覆盖不完整等。KubeVela 通过一个 Application 对象涵盖了所有应用涉及的配置、并通过 Kubernetes 控制循环来维护状态,并基于此始终面向终态维护配置的一致性、消除配置漂移的问题,且保留基于 IaC 模式的扩展性和灵活性。

2.2.2、模块定义(Definition) - 底层无关

模块定义是组成 KubeVela 平台的基本扩展能力单元,一个模块定义就像乐高积木,它将底层的能力封装成抽象的模块,使得这些能力可以被最终用户快速理解、使用并和其他能力组装、衔接,最终构成一个具有丰富功能的业务应用。模块定义最大的优势是可以被分发共享,在不同的业务应用中重复使用,在基于 KubeVela 的不同平台上均能执行。

通过模块定义,平台构建者可以很容易的将云原生生态的基础设施组件扩展为应用层能力,基于最佳实践为上层开发者屏蔽底层细节而不失可扩展性。最重要的是,模块定义为上层应用提供了良好的抽象体系,能力的实现层即使被完全替换也不会影响上层应用,真正做到基础设施无关。

 

目前 KubeVela 一共有四种不同类型的模块定义,分别是组件定义(ComponentDefinition)、运维特征定义(TraitDefinition)、策略定义(PolicyDefinition)以及工作流步骤定义(WorkflowStepDefinition),对应了构成应用的四个基本概念。

事实上就是KubeVela Application 有component、trait、policy、workflow四种模块,这些模块都有类型,这些类型就需要被解析成对应的资源对象或者cr,能力提供商的插件watch这些cr 去施工。模块定义就是根据用户填写的component、trait、policy、workflow类型和参数,解析成资源对象和CR。

2.2.3、系统架构

 

2.2.3.1. KubeVela是一套控制平面系统

KubeVela 依赖一个独立的 Kubernetes 集群来运行。这其实是一个“有意为之”的设计:云原生社区中大量的实践已经证明“构建一个科学的、健壮的控制平面系统”,正是 Kubernetes 项目最擅长的工作。

具体来说,KubeVela 本身主要由如下几个部分组成:

  • 核心控制器 为整个系统提供核心控制逻辑,完成诸如编排应用和工作流、修订版本快照、垃圾回收等等基础逻辑
  • 模块化能力控制器 负责对 X-Definitions 对象进行注册和管理。
  • 插件控制器 负责注册和管理 KubeVela 运行所需要的第三方插件,比如 VelaUX、 Flux、Terraform 组件等等。
  • UI 控制台和 CLI UI 控制台服务于希望开箱即用的开发者用户,CLI 适用于集成 KubeVela 和终端管理的用户。

2.2.3.2. KubeVela是编程的

  • 云原生应用平台的构建者、PaaS、Serverless平台工程师、基础设施平台管理员
  • 第三方软件供应商(ISV)、垂直领域软件开发者、架构师
  • 云原生时代的应用研发、运维人员、DevOps 工程师

 

2.2.4 个人看法

痛点/不足:

  1. 编排能力不足
    1. 原因一,先天不足,没有规范标准确定应用应该包含什么、关注什么。此时,CD系统对应用的定义如果比较“狭隘”(例如应用就是业务的可执行程序本身),那自然就没有编排的土壤。业务程序与外部依赖的关系可能仅仅是躺在配置文件中(例如数据库地址、账号和密码),可能是基于sdk的注册和发现机制(例如第二代微服务框架)。
    2. 原因二,关系描述能力不足,部分CD系统意识到应用除了业务程序还有依赖组件(例如数据库、缓存、消息等),但没有向上抽象仅仅是通过应用目录框在一起。
  1. OAM 还在持续的演进,尚未到理想状态
    1. 当前版本的OAM刻画了应用、组件、运维特征的关系,但并没有刻画组件之间的关系,以及交付的过程是怎么样

KubeVela 的优势:

  1. 基于OAM规范的优越性,对应用有了更全面的定义(应该还不是终态),方便编排。
    1. 一个应用可包含至少一个组件,组件可以是业务程序,也可以是数据库等依赖类型的组件(基于 X as Code的理念与实现,在公有云上可以方便的订购其他产品做为组件)
    2. 一个组件包含一个类型可选数量的运维特征。一个类型就是一个组件实现,组件实现输出的内容有output和outpus,前者是一个工作负载(例如kubernetes workload),后者是其他资源(例如service,configmap等);运维特征是围绕某个组件本身,内置的运维特征有有亲和性(亲和反亲和、容忍等)、暴露(服务和ingress等)、伸缩器、边车等22种,还支持扩展。如此一来,组件内有丰富的内容(运维特征)可供编排。事实上跨组件也一样。
  1. KubeVela关注到了跨组件的关系,也给出了编排工具 - Policy,是KubeVela领先于OAM的实践。除了Policy 还提供了 Workflow,提供了应用交付过程的描述。
  2. KubeVela的抽象方式,使得系统高度可扩展,能力提供商通过插件机制可以轻松的围绕应用构建各种能力,包括混合环境等等

 

0条评论
作者已关闭评论
Darren
11文章数
0粉丝数
Darren
11 文章 | 0 粉丝
Darren
11文章数
0粉丝数
Darren
11 文章 | 0 粉丝
原创

CNCF Application Definition之KubeVela

2023-11-03 06:56:53
28
0

1、CNCF Application Definition & Image Build 概览

CNCF Application Definition & Image Build 涵盖应用定义、开发工具、调试、环境配置、镜像构建、发布等方方面面的内容。截止2022.10.01 共 52 个项目,其中:

    • CNCF 项目:16 个
      • CNCF 毕业项目: 1个,Helm
      • CNCF 孵化项目:4个,Backstage、Buildpacks、KubeVirt、Operator Framework
      • CNCF 沙箱项目:11个,Artifact Hub、Devfile、Konveyor、Krator、KubeVela、KUDO、Nocalhost、Porter、sealer、Serverless Workflow、Telepresence
    • CNCF 成员产品/项目:37 个,包括 Open Application Model(OAM)
    • 非 CNCF 成员产品/项目:10 个
 

2、KubeVela

2.1、KubeVela 是什么

KubeVela基于OAM实现,KubeVela之于OAM类似于Istio之于服务网格,不同的是OAM已经从理念上升为规范。KubeVela的主旨是“Make shipping applications more enjoyable.(让应用部署和管理更轻松)”。

KubeVela is a modern software delivery platform that makes deploying and operating applications across today's hybrid, multi-cloud environments easier, faster and more reliable.
KubeVela 是一个现代化的软件交付平台,它可以让你的应用交付在当今流行的混合、多云环境中变得更加简单、高效、可靠。

KubeVela is infrastructure agnostic, programmable, yet most importantly, application-centric. It allows you to build powerful software, and deliver them anywhere!
KubeVela 是基础设施无关的、可编程的,但最重要的是: 它是完全以应用为中心的。它可以帮助你构建多样化的云原生应用,并交付到任意的云和基础设施!

功能层面上,KubeVela 在 CICD 层做了一层抽象,使得应用交付与底层基础设施无关。

2.2、核心概念

2.2.1、OAM 应用(Application)

2.2.1.1、KubeVela 定义的应用

apiVersion: core.oam.dev/v1beta1
kind: Application // 对完整应用部署建模的高级别抽象
metadata:
  name: <name>
spec:
  components: // OAM 的概念,支持例如二进制、Helm chart、Kustomize pkg、云产品模板、Terraform模块等等
    - name: <component name>
      type: <component type>  // OAM 的概念,component 背后包含一个 workload
      properties:
        <parameter values>
      traits:  // OAM 的概念,附加都组件的运维操作,支持例如路由规则、自动伸缩规则等等
        - type: <trait type>
          properties:
            <traits parameter values>
    - name: <component name>
      type: <component type>
      properties:
        <parameter values>
  policies: // 部署之前要强制执行的任何策略,例如安全域、健康检查策略、防火墙规则
  - name: <policy name>
    type: <policy type>
    properties:
      <policy parameter values>
  workflow: // 应用程序部署被建模为DAG(工作流)。任何流水线类型的交付步骤,例如蓝绿发布、金丝雀发布、人工审批等
    - name: <step name>
      type: <step type>
      properties:
        <step parameter values>   

每一个应用部署计划都由四个部分组成,分别是组件、运维能力、部署策略和工作流,分别对应了 component、trait、policy 以及 workflow step这四种类型,这些类型背后都是平台构建者(运维团队)维护的可编程模块。这种抽象方式是高度可扩展、可定制的。

  • 组件(Component): 组件定义一个应用包含的待交付制品(二进制、Docker 镜像、Helm Chart...)或云服务。我们认为一个应用部署计划部署的是一个微服务单元,里面主要包含一个核心的用于频繁迭代的服务,以及一组服务所依赖的中间件集合(包含数据库、缓存、云服务等),一个应用中包含的组件数量应该控制在约 15 个以内。
  • 运维特征(Trait): 运维特征是可以随时绑定给待部署组件的、模块化、可拔插的运维能力,比如:副本数调整(手动、自动)、数据持久化、 设置网关策略、自动设置 DNS 解析等。
  • 应用策略(Policy): 应用策略负责定义指定应用交付过程中的策略,比如多集群部署的差异化配置、资源放置策略、安全组策略、防火墙规则、SLO 目标等。
  • 工作流步骤(Workflow Step): 工作流由多个步骤组成,允许用户自定义应用在某个环境的交付过程。典型的工作流步骤包括人工审核、数据传递、多集群发布、通知等。

3.2.1.2. 插件(Addon) -- 底层无关

KubeVela 提供了强大的插件机制,插件被定义为可编程能力及其实现构成的包,具体由 OAM 的模块定义和背后的Kubernetes CRD 控制器组成的集合。事实上,就是Application中component、trait、policy、workflow最后输出的资源对象或cr,由插件 watch 到之后去施工。插件本身也是应用。

除了扩展性和效率以外,许多围绕 IaC 的工具都会引发生产环境和配置中心数据不一致的问题,业界称之为“配置漂移”,引起配置漂移的核心原因往往来自于生产环境的配置修改有多个来源、平台对配置的覆盖不完整等。KubeVela 通过一个 Application 对象涵盖了所有应用涉及的配置、并通过 Kubernetes 控制循环来维护状态,并基于此始终面向终态维护配置的一致性、消除配置漂移的问题,且保留基于 IaC 模式的扩展性和灵活性。

2.2.2、模块定义(Definition) - 底层无关

模块定义是组成 KubeVela 平台的基本扩展能力单元,一个模块定义就像乐高积木,它将底层的能力封装成抽象的模块,使得这些能力可以被最终用户快速理解、使用并和其他能力组装、衔接,最终构成一个具有丰富功能的业务应用。模块定义最大的优势是可以被分发共享,在不同的业务应用中重复使用,在基于 KubeVela 的不同平台上均能执行。

通过模块定义,平台构建者可以很容易的将云原生生态的基础设施组件扩展为应用层能力,基于最佳实践为上层开发者屏蔽底层细节而不失可扩展性。最重要的是,模块定义为上层应用提供了良好的抽象体系,能力的实现层即使被完全替换也不会影响上层应用,真正做到基础设施无关。

 

目前 KubeVela 一共有四种不同类型的模块定义,分别是组件定义(ComponentDefinition)、运维特征定义(TraitDefinition)、策略定义(PolicyDefinition)以及工作流步骤定义(WorkflowStepDefinition),对应了构成应用的四个基本概念。

事实上就是KubeVela Application 有component、trait、policy、workflow四种模块,这些模块都有类型,这些类型就需要被解析成对应的资源对象或者cr,能力提供商的插件watch这些cr 去施工。模块定义就是根据用户填写的component、trait、policy、workflow类型和参数,解析成资源对象和CR。

2.2.3、系统架构

 

2.2.3.1. KubeVela是一套控制平面系统

KubeVela 依赖一个独立的 Kubernetes 集群来运行。这其实是一个“有意为之”的设计:云原生社区中大量的实践已经证明“构建一个科学的、健壮的控制平面系统”,正是 Kubernetes 项目最擅长的工作。

具体来说,KubeVela 本身主要由如下几个部分组成:

  • 核心控制器 为整个系统提供核心控制逻辑,完成诸如编排应用和工作流、修订版本快照、垃圾回收等等基础逻辑
  • 模块化能力控制器 负责对 X-Definitions 对象进行注册和管理。
  • 插件控制器 负责注册和管理 KubeVela 运行所需要的第三方插件,比如 VelaUX、 Flux、Terraform 组件等等。
  • UI 控制台和 CLI UI 控制台服务于希望开箱即用的开发者用户,CLI 适用于集成 KubeVela 和终端管理的用户。

2.2.3.2. KubeVela是编程的

  • 云原生应用平台的构建者、PaaS、Serverless平台工程师、基础设施平台管理员
  • 第三方软件供应商(ISV)、垂直领域软件开发者、架构师
  • 云原生时代的应用研发、运维人员、DevOps 工程师

 

2.2.4 个人看法

痛点/不足:

  1. 编排能力不足
    1. 原因一,先天不足,没有规范标准确定应用应该包含什么、关注什么。此时,CD系统对应用的定义如果比较“狭隘”(例如应用就是业务的可执行程序本身),那自然就没有编排的土壤。业务程序与外部依赖的关系可能仅仅是躺在配置文件中(例如数据库地址、账号和密码),可能是基于sdk的注册和发现机制(例如第二代微服务框架)。
    2. 原因二,关系描述能力不足,部分CD系统意识到应用除了业务程序还有依赖组件(例如数据库、缓存、消息等),但没有向上抽象仅仅是通过应用目录框在一起。
  1. OAM 还在持续的演进,尚未到理想状态
    1. 当前版本的OAM刻画了应用、组件、运维特征的关系,但并没有刻画组件之间的关系,以及交付的过程是怎么样

KubeVela 的优势:

  1. 基于OAM规范的优越性,对应用有了更全面的定义(应该还不是终态),方便编排。
    1. 一个应用可包含至少一个组件,组件可以是业务程序,也可以是数据库等依赖类型的组件(基于 X as Code的理念与实现,在公有云上可以方便的订购其他产品做为组件)
    2. 一个组件包含一个类型可选数量的运维特征。一个类型就是一个组件实现,组件实现输出的内容有output和outpus,前者是一个工作负载(例如kubernetes workload),后者是其他资源(例如service,configmap等);运维特征是围绕某个组件本身,内置的运维特征有有亲和性(亲和反亲和、容忍等)、暴露(服务和ingress等)、伸缩器、边车等22种,还支持扩展。如此一来,组件内有丰富的内容(运维特征)可供编排。事实上跨组件也一样。
  1. KubeVela关注到了跨组件的关系,也给出了编排工具 - Policy,是KubeVela领先于OAM的实践。除了Policy 还提供了 Workflow,提供了应用交付过程的描述。
  2. KubeVela的抽象方式,使得系统高度可扩展,能力提供商通过插件机制可以轻松的围绕应用构建各种能力,包括混合环境等等

 

文章来自个人专栏
Darren的容器专栏
11 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
2
1