阿里云和微软共同开源的 OAM 对 Kubernetes 开发人员意味着什么?

上周,微软和阿里巴巴共同推出了开放应用模型(OAM),用于定义部署在任何地方的应用模型的一种规范。Rudr是Microsoft基于Kubernetes环境的OAM标准实现。

我用了一个周末来了解OAM试图解决的问题,为此我还以Rudr为基础重构了一些我喜欢的基础微服务的应用程序。本文和以下教程将帮助普通的Kubernetes用户了解OAM背后的动机。

众所周知,Kubernetes是一个复杂的平台,包含许多活动组件。在编排和部署简单的两层Web应用程序时,需要涉及到创建Storage Classes,PVC,PV,Secret,ConfigMap,Service,Deployment和 Ingress。在实际生产部署中还需要健全的日志收集,监控告警,安全性,高可用性和可扩容性,我们将用到StatefulSet(有状态应用),网络策略,RBAC,准入控制,Pod横向自动伸缩等知识。

对于从传统IT环境过渡的开发工程师和运维工程师,Kubernetes强劲的发展势头让人感到害怕。甚至一些熟悉容器化的DevOps专业人员都发现想要完全理解Kubernetes也是个很棘手的事情。

当转换为可部署的文件时,一个简单的两层Web应用程序可能具有十几个YAML文件,里面包含了这个应用程序针对于每个对象的定义描述。

Kubernetes的核心设计原则之一是对象的可解耦性。例如一个服务可以独立于Pod而存在,创建一个PV无需任何使用者,还可以配置一个无需任何后端来处理请求的Ingress。基于一组标签,注释和选择器,这些特点在运行时可以拼凑在一起共同使用。一个服务会将请求转发到符合条件的一个或多个Pod上。Ingress将流量路由到某个服务也是相同的用法。

Kubernetes中的每个对象都是自我治理并且完全独立的。尽管这种设计使Kubernetes具有极高的可扩展性,但其缺点是缺乏应用程序上下文关系。Kubernetes中的一个应用程序是一系列协同工作的自治对象的集合。当转换为可部署的文件时,一个简单的两层Web应用程序可能具有十几个YAML文件,里面包含了这个应用程序针对于每个对象的定义描述。在单一环境下管理和维护这些编排文件是与Kubernetes接触时面临的最大挑战。

Helm工具想要通过图表的概念来解决这个问题。但是即使这样,你往往还是在部署后丢失上下文关系。毕竟Helm只是应用程序运行所需的多个Kubernetes对象定义的集合编排文件生成工具。

Kubernetes的其他挑战之一是开发人员和运维人员之间有个很模糊的界限。为了有效利用平台,开发人员需要对运行时环境有一定的了解。他们需要了解ConfigMap如何对Pod中包装的容器可见。他们需要知道初始化代码的哪一部分应打包为Init容器。运维人员负责确保正确的命名规则来保证服务发现的正常工作。他们需要知道需要传递给Pod的所有环境变量。运维人员应根据应用程序的特性来决定将容器部署为ReplicationController,DaemonSet还是StatefulSet。他们需要在生产环境部署的时候,选择使用ClusterIP还是NodePort。

如上所述,开发人员期望熟悉运行时程序需要哪些必要的决策,并且运维人员应了解软件设计方面的知识。OAM想要通过以下方法解决这些存在的问题:

  • 将应用程序上下文带入微服务部署
  • 在开发人员和运维人员之间明确关注点
  • 与运行时无关的应用程序模型

从更高的层次上来说,OAM是用于定义微服务或一组属于应用程序的微服务组件的规范。每个组件都有一个或多个工作节点,它们可以作为一个服务,或者是个消费者,或者是个需要完成的任务。每个工作节点之间可能具有关联的配置和特征。这些配置转换为传递给工作节点的参数,这些特性会影响组件的运行环境,同一类组件的集合属于一个应用程序。

OAM的核心前提是,开发人员的工作以从源代码在构建容器镜像的时候结束,而运维人员负责的工作正好从此处开始。Ops团队将负责为单个应用程序的一组容器镜像进行配置和部署。

OAM中的组件意在使开发人员能够以与基础结构无关的格式声明,来区分执行单元的操作特性。组件定义了在基础系统结构中的CPU,GPU,内存和磁盘需求。

组件中的每个工作节点类型如下:

配置通常在处理后以参数的形式传递给工作节点。例如在配置中定义了发送到应用程序服务工作节点的连接数据库的字符串。

这些特性定义了工作节点的运行时行为,从而定义了一个应用程序。Rudr就是OAM的参考实现的,并有以下特征:

如果我们仔细观察Workload和Trait的概念描述,它们可以轻松将这些概念对应到到Kubernetes。服务本质上是Deployment,而Singleton服务是具有一个replica的Deployment。它们都要使用ClusterIP或NodePort。Worker和单独的Worker是没有关联服务的Pods。任务是一个可并行化的Kubernetes Job,而单个任务是个单次运行的Job。

同样这些特性也能对应到到Kubernetes的自动扩容,Ingress,Deployment和PVC等概念。

因此使用OAM和Rudr,开发人员可以提交代码并构建可转换为工作节点的容器镜像。运维人通过这些组件的特性进行配置定义,将其组成工作节点。

从技术上讲,OAM这一规范可以适用于虚拟机基础设施平台(IaaS),PaaS和容器管理平台(CaaS)。OAM的每个构建模块都可以映射到相应的环境。就是说OAM定义的YAML文件可以在没有任何修改的情况下部署在任何环境中。

在本系列的下一篇文章中,我将带你逐步了解Rudr的端到端教程,其中展示了以Node.js Web应用程序部署组件,配置其特性所涉及的工作流程。敬请关注~

作者|Janakiram MSV
翻译|Big dimple
原文链接 https://thenewstack.io/what-does-the-open-application-model-oam-and-rudr-mean-for-kubernetes-developers/ 已获原作者授权翻译转载

“ 阿里巴巴云原生微信公众号(ID:Alicloudnative)关注微服务、Serverless、容器、Service Mesh等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术公众号。”

原文地址:https://www.cnblogs.com/alisystemsoftware/p/11792964.html

时间: 2024-10-09 02:39:36

阿里云和微软共同开源的 OAM 对 Kubernetes 开发人员意味着什么?的相关文章

我对微软.NET开源的理解

我对微软.NET开源的理解 上周,微软宣布.NET开源,并把它扩展到Linux和Mac OS平台上面. 届时,微软已经宣布开源的数个开发技术,有ASP.NET Roslyn.NET编译器平台..NET微框架..NET Rx以及VB和C#程序语言. 那么,.NET开源的原因和目的何在呢?究竟是被其他开源社区攻占市场的无奈之举,还是突然看好开源,顺应潮流呢? .NET开源让其只能在Windows系统上运行的不足消失了,它可以在更多更广的平台上发挥它的作用,无疑拓宽了微软的市场,让更多的Web服务器.

阿里云和腾讯云免费SSL证书

概述 什么是SSL证书 通俗的来讲SSL和TSL都是属于网络传输的安全协议,而SSL继承于TSL,且SSL是一种更为安全的加密协议. SSL和TSL的体现: TSL是通过浏览器以http://来访问,默认端口是80: SSL是通过浏览器以https://来访问,默认端口是443. 为什么要使用SSL SSL更加安全 在使用微信小程序开发时与后台数据交互必须使用https传输,即SSL协议 SSL如何获得 SSL证书在很多网站上都有出售,且价格都不便宜(对我来说蛮贵的) 在阿里云和腾讯云上面都有免

喜大本\\ u0026普,微软的开源

词汇表--喜大本\\ u0026普:爱过.有趣的游戏,庆祝.奔走相告.简而言之<reload=1">微软宣布.NET开发环境开源>是个好消息. 前言及历史回想 就我个人来说.这十来年都对微软没什么好感,折腾.net的经验也已经是至少12年前的事情了.距离上一次吐槽.net也已经过去快十年(2005年)了,之后根本都懒得谈它,可是这一次不同,开源终归是一件好事--尽管基本也是与我无关. 但既然開始了这篇扯淡.总还是要扯下去的,谈点个人看法. simp主席说得是,微软来晚了,如今就

java不可能转化成exe的理由——微软如果开源

我只是作一个猜想,理由如下: 我们知道,我们所使用的高级语言,所写成的程序,需要经过一步步的编译,最终得到二进制码文件,放到操作系统上执行.然而不同的操作系统,会有不同的原语.jvm可以跨平台,是因为不同的操作系统上有不同的jvm,并且所需要的源代码,却是相同的. 我们都知道,运行在jvm上的是.java编译过来的.class文件.要想转化成.exe的可执行文件,按照我们的常理来推测,或许从.class文件开始往.exe转化.或许直接从.java开始转化不是更好吗?那么得有一个专门解释.java

微软成立开源子公司 红帽谨慎乐观

关于Linux的学习,请参考书籍<Linux就该这么学> 微软是在上周作出将成立一个开源技术子公司声明,据悉新的公司将由微软高管 Jean Paoli 担任公司总裁,公司会在发展中逐步推进和成立互通性战略团队.新成立的公司希望推动开源社区的建设和标准的制订,同时也借此桥接微软和非微软的技术.对此,红帽公司今天发布一篇谨慎而乐观的声明作出回应:首先,我们对微软在上周宣布成立微软开放技术全资子公司,以推动开源互通性.开放标准以及开源社区的举动表示欢迎. 1. 消费者和开发者将是开源最大赢家开源以及

阿里宣布Atlas正式开源:带你重返App开发的田园时代

继Weex之后,阿里在移动技术领域又有开源大动作. 3月13日,手机淘宝安卓客户端容器化框架Atlas正式宣布开源(https://github.com/alibaba/atlas ).Atlas由阿里巴巴移动团队自研,以容器化思路解决大规模团队协作问题,实现并行开发.快速迭代和动态部署,适用于Android 4.x以上系统版本的大小型App开发. Atlas特别适用于大规模团队的协同开发.通过提供组件化.动态性.解耦化的支持,Atlas能够实现每个业务在开发阶段独立编译.独立调试.独立运行,最

微软与开源干货对比篇_PHP和 ASP.NET在 Session实现和管理机制上差异

微软与开源干货对比篇_PHP和 ASP.NET在 Session实现和管理机制上差异 前言:由于开发人员要靠工具吃饭,可能和开发工具.语言.环境呆的时间比和老婆孩子亲人在一起的时间还多,所以每个人或多或少对自己吃饭的工具在感性上带有宗教情结,在理性上又受屁股决定大脑利益左右,这种比较一般都容易遭人争议, 这些比较不带任何偏见和感情色彩,主要是自己工作中记录在有道云笔记的经验日记主要是给I自己学习备查用,写得多了就有参考价值分享出来给需要的人参考,如果有任何争议本人不作辩解.这只代表本人自己的理解

.NET开发人员值得关注的七个开源项目 .

1 NET开发人员值得关注的七个开源项目 2 软近几年在.NET社区开源项目方面投入了相当多的时间和资源,不禁让原本对峙的开源社区阵营大吃一惊,从微软.NET社区中的反应来看,微软.NET开发阵营对开源工具的依赖正日益增强,本文就为所有.NET开发人员介绍7个应该关注的开源项目,也许其中正有你需要的. 3 4 5 Ajax控件工具包 6 7 8 在Ajax术语诞生的短短五年内,这个混合了java script.XML和异步通信的技术增强了用户的在线体验,带动了Web技术的积极发展,现在随便浏览一

开源分享:用Python开发的开源博客系统Blog_mini

本博文在51CTO技术博客首发. 开源不易,Python良心之作,真心送给广大朋友,恳请给予支持,不胜感激! 0.Blog_mini送给你们:让每个人都轻松拥有可管理的个人博客 你从未架设过服务器或网站,希望可以接触一下这方面的知识-- 你从未使用过Linux操作系统,希望可以接触一下这方面的知识-- 你是初中生/高中生/大学生,希望能在学业之余锻炼一下自己的IT技能-- 你是Python新手,希望能有一个用Python开发的个人博客-- 你学习Python许久,希望有一个开源的项目可以用来学习