Knative 核心概念介绍:Build、Serving 和 Eventing 三大核心组件

为什么80%的码农都做不了架构师?>>>   hot3.png

作者| 阿里云智能事业群高级开发工程师 元毅

Knative 主要由 Build、Serving 和 Eventing 三大核心组件构成。Knative 正是依靠这三个核心组件,驱动着 Knative 这艘 Serverless 巨轮前行。下面让我们来分别介绍一下这三个核心组件。

Build

Knative Build 是基于现有的 Kubernetes 能力之上,提供的一套标准化、可移植、可复用的容器镜像构建方式。通过在 Kubernetes 上运行复杂的构建任务,Knative Build 使你不必再单独开发和重复这些镜像构建过程, 从而通过系统化、工程化的方式,减少了镜像构建时间及成本。

Build 通过 Kubernetes 自定义资源定义(CRD)实现。 通过 Build 你可以自定义一个从运行到结束的构建流程。例如,可以使用 Knative Build 来获取、构建和打包代码。Build 具备以下功能:

  • 支持 Source 源挂载,目前支持的 Source 源包括:

    • git 代码仓库
    • 任意容器镜像
  • 支持通过 BuildTemplate 创建可重复执行构建的模板
  • 支持 K8s ServiceAccount 身份验证

典型的 Build 示意图:

虽然目前 Knative Build 并不提供完整的独立 CI/CD 解决方案,但它却提供了一个底层的构建模块,用户可单独使用该构建模块在大型系统中实现集成和利用。

Serving

Knative 作为 Severless 框架最终是用来提供服务的, 那么 Knative Serving 应运而生。

Knative Serving 构建于 Kubernetes 和 Istio 之上,为  Serverless 应用提供部署和服务支持。其特性如下:

  • 快速部署 Serverless 容器
  • 支持自动扩缩容和缩到 0 实例
  • 基于 Istio 组件,提供路由和网络编程
  • 支持部署快照

Knative Serving 中定义了以下 CRD 资源:

  • Service: 自动管理工作负载整个生命周期。负责创建 Route、Configuration 以及 Revision 资源。通过 Service 可以指定路由流量使用最新的 Revision 还是固定的 Revision
  • Route:负责映射网络端点到一个或多个 Revision。可以通过多种方式管理流量。包括灰度流量和重命名路由
  • Configuration: 负责保持 Deployment 的期望状态,提供了代码和配置之间清晰的分离,并遵循应用开发的 12 要素。修改一次 Configuration 产生一个 Revision
  • Revision:Revision 资源是对工作负载进行的每个修改的代码和配置的时间点快照。Revision 是不可变对象,可以长期保留

资源关系图:

Eventing

Knative Eventing 旨在满足云原生开发中通用需求, 以提供可组合的方式绑定事件源和事件消费者。其设计目标:

  • Knative Eventing 提供的服务是松散耦合,可独立开发和部署。服务可跨平台使用(如 Kubernetes, VMs, SaaS 或者 FaaS)
  • 事件的生产者和事件的消费者是相互独立的。任何事件的生产者(事件源)可以先于事件的消费者监听之前产生事件,同样事件的消费者可以先于事件产生之前监听事件
  • 支持第三方的服务对接该 Eventing 系统
  • 确保跨服务的互操作性

事件处理示意图:

如上图所示,Eventing 主要由事件源(Event Source)、事件处理(Flow)以及事件消费者(Event Consumer)三部分构成。

[]()

事件源(Event Source)

当前支持以下几种类型的事件源:

  • ApiserverSource:每次创建或更新 Kubernetes 资源时,ApiserverSource 都会触发一个新事件
  • GitHubSource:GitHub 操作时,GitHubSource 会触发一个新事件
  • GcpPubSubSource: GCP 云平台 Pub/Sub 服务会触发一个新事件
  • AwsSqsSource:Aws 云平台 SQS 服务会触发一个新事件
  • ContainerSource: ContainerSource 将实例化一个容器,通过该容器产生事件
  • CronJobSource: 通过 CronJob 产生事件
  • KafkaSource: 接收 Kafka 事件并触发一个新事件
  • CamelSource: 接收 Camel 相关组件事件并触发一个新事件

[]()

事件接收/转发(Flow)

当前 Knative 支持如下事件接收处理:

  • 直接事件接收

    通过事件源直接转发到单一事件消费者。支持直接调用 Knative Service 或者 Kubernetes Service 进行消费处理。这样的场景下,如果调用的服务不可用,事件源负责重试机制处理。
  • 通过事件通道(Channel)以及事件订阅(Subscriptions)转发事件处理

    这样的情况下,可以通过 Channel 保证事件不丢失并进行缓冲处理,通过 Subscriptions 订阅事件以满足多个消费端处理。
  • 通过 brokers 和 triggers 支持事件消费及过滤机制

从 v0.5 开始,Knative Eventing 定义 Broker 和 Trigger 对象,实现了对事件进行过滤(亦如通过 ingress 和 ingress controller 对网络流量的过滤一样)。

通过定义 Broker 创建 Channel,通过 Trigger 创建 Channel 的订阅(subscription),并产生事件过滤规则。

[]()

事件消费者(Event Consumer)

为了满足将事件发送到不同类型的服务进行消费, Knative Eventing 通过多个 k8s 资源定义了两个通用的接口:

  • Addressable 接口提供可用于事件接收和发送的 HTTP 请求地址,并通过status.address.hostname字段定义。作为一种特殊情况,Kubernetes Service 对象也可以实现 Addressable 接口
  • Callable 接口接收通过 HTTP 传递的事件并转换事件。可以按照处理来自外部事件源事件的相同方式,对这些返回的事件做进一步处理

当前 Knative 支持通过 Knative Service 或者 Kubernetes Service 进行消费事件。

另外针对事件消费者,如何事先知道哪些事件可以被消费? Knative Eventing 在最新的 0.6 版本中提供 Registry 事件注册机制, 这样事件消费者就可以事先通过 Registry 获得哪些 Broker 中的事件类型可以被消费。

[]()

总结

Knative 使用 Build 提供云原生“从源代码到容器”的镜像构建能力,通过 Serving 部署容器并提供通用的服务模型,同时以 Eventing 提供事件全局订阅、传递和管理能力,实现事件驱动。这就是 Knative 呈现给我们的标准 Serverless 编排框架。

原文链接​

本文为云栖社区原创内容,未经允许不得转载。

转载于:https://my.oschina.net/yunqi/blog/3056417

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派基金会来号召用键盘生物学家研究企鹅

伦敦动物学会(Zoological Society of London)于2014年,与伍兹霍尔海洋研究所和牛津大学等组织合作监控企鹅的计划Penguin Lifelines有了新进展,伦敦动物学会现与其他动物保护组织合作Penguin Watch项目,邀请民众在网上…

BlockingCollectionT 类实现 列队操作

官方文档 为实现 IProducerConsumerCollection<T> 的线程安全集合提供阻塞和限制功能。 通过 BlockingCollection<T> 实现列队调用函数 建立全局变量 BlockingCollection<string> blockingCollection new BlockingCollection<string>(); 建立调用函数…

Git 版本回退

现在&#xff0c;你已经学会了修改文件&#xff0c;然后把修改提交到Git版本库&#xff0c;现在&#xff0c;再练习一次&#xff0c;修改readme.txt文件如下&#xff1a; Git is a distributed version control system. Git is free software distributed under the GPL.然后尝…

AMD院士站台 异构计算与OpenCL编程师资培训首站清华开讲

摘要&#xff1a;2013年10月14日&#xff0c;“2013年异构计算与OpenCL编程师资培训”在清华大学召开。本活动邀请到AMD、Khronos Group及清华大学的多位并行计算领域专家&#xff0c;与参会者共同探讨OpenCL异构开发和优化技术。 2013年10月14日&#xff0c;由教育部科技发展…

【问题记录】RIDE-1.7.3.1控制台及日志中文乱码处理

RIDE-1.7.3.1运行结果界面展示: 解决方法参考链接&#xff1a; https://blog.csdn.net/panda62/article/details/88535376 转载于:https://www.cnblogs.com/quietCorner/p/11046656.html

GPU Saturday技术沙龙:OpenCL程序员眼中的下一代APU架构

摘要&#xff1a;GPU Saturday技术沙龙在北京3WCoffee成功举办。本次活动邀请AMD资深技术人员及清华大学项目研究员就AMD最新的GCN架构、GPU加速计算在挖掘比特币、典型图像算法、深度神经网络算法等领域的分析与应用展开深入讨论。 [CSDN报道] 9月5日&#xff0c;GPU Saturda…

直接取出 post 请求中的 json、得请求体参数、查看 post 请求参数

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 方法如下&#xff1a; try{ServletRequestAttributes requestAttributes (ServletRequestAttributes) RequestContextHolder.getReques…

SparkSQL调优

1、执行计划&#xff08;过往记忆https://www.iteblog.com/archives/2562.html&#xff09; df.explain(true)//显示逻辑计划和物理计划&#xff0c;不加true只显示物理计划 2、逻辑计划优化方法&#xff1a; 谓词下推&#xff0c;列裁剪&#xff0c;常量替换&#xff0c;常量累…

AMD发布APPML源码,构建clMath库

摘要&#xff1a;日前&#xff0c;AMD将加速并行处理数学库&#xff08;Accelerated Parallel Processing Math Library简称APPML&#xff09;开源&#xff0c;内容包含了BLAS和FFT的OpenCL实现&#xff0c;项目托管在GitHub上&#xff0c;命名为clMath&#xff0c;该项目基于A…

最简单的 post 请求发起方式、调用其它系统接口

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 调用其它系统接口&#xff0c;发起一个 post 请求&#xff0c;写法如下&#xff1a; import cn.com.infinitus.yunxiao.jira.vo.EpicV…

CSS基础学习 18.CSS多列

四种常见的浏览器内核&#xff1a; 转载于:https://www.cnblogs.com/songsongblue/p/11050210.html

BGP

BGP&#xff1a;border gateway protocol 边界网关路由协议 路由协议分类&#xff1a;内部网关路由协议IGP&#xff1a;rip ospf isis &#xff08;eigrp&#xff09;外部 网关路由协议EGP&#xff1a;EGP&#xff08;早期淘汰&#xff09; BGP BGP特点&#xff1a;1、针对大型…

OpenCL 2.0发布,带来更强悍的异构计算能力

摘要&#xff1a;Khronos Group本周一发布了OpenCL 2.0&#xff0c;可为显示芯片提供更好的独立性&#xff0c;以便能为通用软件计算出更大的力。该组织已经发布了2.0的临时标准&#xff0c;预计正式版本的发布要等到6个月以后。 Khronos小组于本周一&#xff08;7月22日&…

从一个OutOfMemoryError 学会了分析Java内存泄漏问题

从一个OutOfMemoryError 学会了分析Java内存泄漏问题 以前都是好好的&#xff0c;最近出现了 oom。 问题 开始是&#xff1a; java.lang.OutOfMemoryError: Java heap space 2019-06-14 11:02:41.678 ERROR 13789 --- [nio-8082-exec-3] c.e.p.s.c.c.core.ELDictionaryControll…

Ubuntu安装php7.2

1、使用ppa增加源apt-get install python-software-propertiesapt-get install software-properties-commonadd-apt-repository ppa:ondrej/php2、更新apt-get update3、查看源中PHP7.2版本apt list | grep php 列表中已经包含你想要的PHP版本了4、安装PHP7.2apt-get -y …

会出现 unreachable statement 的可能

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 java编译器把unreachable statement标记为运行时错误&#xff0c;一个unreachable statement就是编译器决定永远不会执行它。 下面的几…

Hadoop+GPU强强联手的性能探索

摘要&#xff1a;Hadoop并行处理可以成倍地提高性能&#xff0c;GPU也日益成为计算任务的重要分担者&#xff0c;Altoros Systems研发团队一直致力于探索HadoopGPU的可能性&#xff0c;以及在实际的大规模系统中的实现&#xff0c;这篇文章就是他们的部分研究成果。 Hadoop并行…

Vue Google浏览器插件 Vue Devtools无法使用的解决办法

1.插件安装不必多说 一定要用Vue.js 开发版 Vue.min.js 在控制面板就不会显示 2.本地调试 用的是file://协议 修改插件允许访问文件网址 打上对勾 转载于:https://www.cnblogs.com/116970u/p/11052987.html

JVM原理探究及调优方法论

1 此文目的 本文不准备从盘古开天地开始讲述JVM的种种&#xff0c;相关的文章网上太多了&#xff0c;大多也无非转来转去&#xff0c;连图都差不多。笔者只整理个提纲挈领的学习路线指南&#xff0c;并对自己学习过程中遇到的坑和容易混淆和忽视的地方作个总结。 2 JVM内存模型…

超方便、最简单版本:java 邮件发送 (半分钟写完代码)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. jar 和 邮箱设置 <!--邮件--><dependency><groupId>org.simplejavamail</groupId><artifactId>simpl…