大号在练葵花宝典 发表于 2024-7-24 11:09:37

云计算-云原生OAM概念

OAM

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

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

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

   

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

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

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

[*] OAM 官方网站 - oam.dev
   kubevela

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

   KubeVela 是一个开箱即用的现代化应用交付与管理平台,它使得应用在面向混淆云环境中的交付更简单、快捷。使用 KubeVela 的软件开辟团队,可以按需使用云原生本领构建应用,随着团队规模的发展、业务场景的变化扩展其功能,一次构建应用,随处运行。
   https://img-blog.csdnimg.cn/img_convert/917970ff90852ab3489837f141b8c2db.png
   KubeVela 的核心是将应用摆设所需的所有组件和各项运维动作,描述为一个同一的、与底子设施无关的“摆设操持”,进而实现在混淆环境中尺度化和高服从的应用交付。这使得最终用户无需关注底层细节,就可以使用丰富的扩展本领,并基于同一的概念自助式操作。
   https://img-blog.csdnimg.cn/img_convert/f7ea266c181bd014836ef8128be6376d.png
   每一个应用摆设操持都由四个部分组成,分别是组件,运维本领,摆设计谋和工作流
                                 登录后复制                         apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: <name>
spec:
components:
    - name: <component name>
      type: <component type>
      properties:
      <parameter values>
      traits:
      - 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:
    - name: <step name>
      type: <step type>
      properties:
      <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): 工作流由多个步骤组成,允许用户自界说应用在某个环境的交付过程。典型的工作流步骤包括人工考核、数据传递、多集群发布、通知等。
   https://img-blog.csdnimg.cn/img_convert/ab3901e4a88328a5cd0f11600d42551b.png
   基于k8s安装

   要求,
   

[*]Kubernetes cluster >= v1.19 && <= v1.26
                                 登录后复制                         curl-fsSl https://kubevela.io/script/install.sh | bash
vela install      

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

   在k8s上摆设应用举例
                                 登录后复制                         apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: app-with-k8s-objects
namespace: default
spec:
components:
    - name: k8s-demo-service
      properties:
      objects:
          - apiVersion: apps/v1
            kind: Deployment
            metadata:
            name: nginx
            spec:
            replicas: 2
            selector:
                matchLabels:
                  app: nginx
            strategy:
                type: Recreate
            template:
                metadata:
                  labels:
                  app: nginx
                spec:
                  containers:
                  - image: nginx
                      name: nginx
                      ports:
                        - containerPort: 80
          - apiVersion: v1
            kind: Service
            metadata:
            annotations:
                service.beta.kubernetes.io/aws-load-balancer-type: nlb
            labels:
                app: nginx
            name: nginx
            namespace: default
            spec:
            externalTrafficPolicy: Local
            ports:
                - name: http
                  port: 80
                  protocol: TCP
                  targetPort: 80
            selector:
                app: nginx
            type: LoadBalancer
      type: k8s-objects
policies:
    - name: topology-default
      type: topology
      properties:
      clusters: ['local']
      namespace: default
    - name: topology-production
      type: topology
      properties:
      clusters: ['local']
      namespace: production
workflow:
    steps:
      - name: deploy2default
      properties:
          policies: ['topology-default']
      type: deploy
      - name: suspend
      type: suspend
      - name: deploy2production
      properties:
          policies: ['topology-production']
      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.
                                                   登录后复制                         #部署应用
$ vela up -f https://kubevela.io/example/applications/app-with-k8s-objects.yaml

#执行审核
$ vela workflow resume app-with-k8s-objects
      

[*]1.
[*]2.
[*]3.
[*]4.
[*]5.
                     这里没有使用 velaux 插件,而是是在贸易k8s平台上可以更加简洁直观的看到OAM状态
   https://img-blog.csdnimg.cn/img_convert/684a7afe6c4d48b75616c1e3c5c66c49.png
   https://img-blog.csdnimg.cn/img_convert/75737a30a0b138d78366bdde7c7dbeb3.png
   https://img-blog.csdnimg.cn/img_convert/00b05226ef73f1e192f1184fdfb8529a.png
   总结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 云计算-云原生OAM概念