云计算-云原生OAM概念

打印 上一主题 下一主题

主题 899|帖子 899|积分 2697

OAM

     OAM,open application model是阿里巴巴和微软共同开辟的云原生应用规范模型。它使用来办理一个完备的面向业务场景的应用的题目。是一个尺度的、底子设施 无关的跨云应用摆设模型。有以下几个特性:
     

  • 应用为先。一个应用的交付与摆设应该是自包罗的,其中的各类操作行为应该作为应用界说的一部分,这些内容与实际底子设施无关。
  • 清晰和可扩展性。界说一套开放尺度,可以模块化整个应用交付流程,根据个 人需要将这些模块自由组装,告竣自己想要的结果。
  • 云服务供应商无关。界说的开放尺度应该是一套更高级别的抽象,可以跨本地 集群、跨云服务供应商,不会被锁定到任何一个厂商的底座
     OAM规范依照以下原则
     

  • 关注点分离:根据功能和行为来界说模型,以此分别差别脚色的职责,
  • 平台中立:OAM 的实现不绑定到特定平台;
  • 优雅:只管减少设计复杂性;
  • 复用性:可移植性好,同一个应用程序可以在差别的平台上不加改动地执行;
  • 不作为编程模型:OAM 提供的是应用程序模型,描述了应用程序的组成和组件的拓扑布局,而不关注应用程序的具体实现。
     

     OAM的基本对象

     

  • Component:OAM 中最底子的对象,该配置与底子设施无关,界说负载实例的运维特性。比方一个微服务 workload 的界说。
  • TraitDefinition:一个组件所需的运维计谋与配置,比方环境变量、Ingress、AutoScaler、Volume 等。(注意:该对象在 apiVersion: core.oam.dev/v1alpha1 中的名称为 Trait)。
  • ScopeDefinition:多个 Component 的共同边界。可以根据组件的特性大概作用域来分别 Scope,一个 Component 大概同时属于多个 Scope。
  • ApplicationConfiguration:将 Component(必须)、Trait(必须)、Scope(非必须)等组合到一起形成一个完备的应用配置。
     

     OAM的工作原理

     

     OAM Spec 界说了云原生应用的规范(使用一些 CRD 界说), KubeVela 可以看做是 OAM 规范的剖析器,将应用界说翻译为 Kubernetes 中的资源对象。可以将上图分为三个条理:
     

  • 汇编层:即人工大概使用工具来根据 OAM 规范界说汇编出一个云原生应用的界说,其中包罗了该应用的工作负载和运维本领配置。
  • 转义层:汇编好的文件将打包为 YAML 文件,由 KubeVela 或其他 OAM 的实现将其转义为 Kubernetes 或其他云服务(比方 Istio)上可运行的资源对象。
  • 执行层:执行颠末转义好的云平台上的资源对象并执行资源配置。
     参考管官网
     

  •  OAM 官方网站 - oam.dev
     kubevela

     OAM应用,主要通过kubevela项目来实现
     kubevela项目地点  模块界说(Definition) | KubeVela
     核心概念

     KubeVela 是一个开箱即用的现代化应用交付与管理平台,它使得应用在面向混淆云环境中的交付更简单、快捷。使用 KubeVela 的软件开辟团队,可以按需使用云原生本领构建应用,随着团队规模的发展、业务场景的变化扩展其功能,一次构建应用,随处运行。
     

     KubeVela 的核心是将应用摆设所需的所有组件和各项运维动作,描述为一个同一的、与底子设施无关的“摆设操持”,进而实现在混淆环境中尺度化和高服从的应用交付。这使得最终用户无需关注底层细节,就可以使用丰富的扩展本领,并基于同一的概念自助式操作。
     

     每一个应用摆设操持都由四个部分组成,分别是组件,运维本领,摆设计谋和工作流
                                   登录后复制                        
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4.   name: <name>
  5. spec:
  6.   components:
  7.     - name: <component name>
  8.       type: <component type>
  9.       properties:
  10.         <parameter values>
  11.       traits:
  12.         - type: <trait type>
  13.           properties:
  14.             <traits parameter values>
  15.     - name: <component name>
  16.       type: <component type>
  17.       properties:
  18.         <parameter values>
  19.   policies:
  20.   - name: <policy name>
  21.     type: <policy type>
  22.     properties:
  23.       <policy parameter values>
  24.   workflow:
  25.     - name: <step name>
  26.       type: <step type>
  27.       properties:
  28.         <step parameter values>   
复制代码
      

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
                       这个 Application 对象会引用 component、trait、policy 以及 workflow step 的范例,这些范例背后是平台构建者(运维团队)维护的可编程模块。可以看到,这种抽象的方式是高度可扩展、可定制的。
     

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

     基于k8s安装

     要求,
     

  • Kubernetes cluster >= v1.19 && <= v1.26
                                   登录后复制                        
  1. curl-fsSl https://kubevela.io/script/install.sh | bash
  2. vela install
复制代码
      

  • 1.
  • 2.
                       VelaUX 是 KubeVela 的仪表板。 它是在你的集群中运行的 Web 应用程序。 你可以使用浏览器访问它。 假如你不使用 KubeVela 的 UI 控制台,这是可选的
     摆设应用

     在k8s上摆设应用举例
                                   登录后复制                        
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4.   name: app-with-k8s-objects
  5.   namespace: default
  6. spec:
  7.   components:
  8.     - name: k8s-demo-service
  9.       properties:
  10.         objects:
  11.           - apiVersion: apps/v1
  12.             kind: Deployment
  13.             metadata:
  14.               name: nginx
  15.             spec:
  16.               replicas: 2
  17.               selector:
  18.                 matchLabels:
  19.                   app: nginx
  20.               strategy:
  21.                 type: Recreate
  22.               template:
  23.                 metadata:
  24.                   labels:
  25.                     app: nginx
  26.                 spec:
  27.                   containers:
  28.                     - image: nginx
  29.                       name: nginx
  30.                       ports:
  31.                         - containerPort: 80
  32.           - apiVersion: v1
  33.             kind: Service
  34.             metadata:
  35.               annotations:
  36.                 service.beta.kubernetes.io/aws-load-balancer-type: nlb
  37.               labels:
  38.                 app: nginx
  39.               name: nginx
  40.               namespace: default
  41.             spec:
  42.               externalTrafficPolicy: Local
  43.               ports:
  44.                 - name: http
  45.                   port: 80
  46.                   protocol: TCP
  47.                   targetPort: 80
  48.               selector:
  49.                 app: nginx
  50.               type: LoadBalancer
  51.       type: k8s-objects
  52.   policies:
  53.     - name: topology-default
  54.       type: topology
  55.       properties:
  56.         clusters: ['local']
  57.         namespace: default
  58.     - name: topology-production
  59.       type: topology
  60.       properties:
  61.         clusters: ['local']
  62.         namespace: production
  63.   workflow:
  64.     steps:
  65.       - name: deploy2default
  66.         properties:
  67.           policies: ['topology-default']
  68.         type: deploy
  69.       - name: suspend
  70.         type: suspend
  71.       - name: deploy2production
  72.         properties:
  73.           policies: ['topology-production']
  74.         type: deploy
复制代码
      

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
                                                     登录后复制                        
  1. #部署应用
  2. $ vela up -f https://kubevela.io/example/applications/app-with-k8s-objects.yaml
  3. #执行审核
  4. $ vela workflow resume app-with-k8s-objects
复制代码
      

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
                       这里没有使用 velaux 插件,而是是在贸易k8s平台上可以更加简洁直观的看到OAM状态
     

     

     

     总结

     OAM是一种全新的K8S业务交付方式,但是目前还不上主流,目前应用的不多

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表