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.pswp.cn/news/448700.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448700.shtml
英文地址,請注明出處:http://en.pswp.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…