日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

终于有人把Knative讲明白了

發布時間:2025/3/15 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 终于有人把Knative讲明白了 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

導讀:Knative是Google在2018的Google Cloud Next大會上發布的一款基于Kubernetes的Serverless框架。

作者:劉宇

來源:大數據DT(ID:hzdashuju)

其基本信息如表2-2所示。

▼表2-2 Knative基本信息

Knative一個很重要的目標就是制定云原生、跨平臺的Serverless編排標準。Knative是通過整合容器構建(或者函數)、工作負載管理(和動態擴縮)以及事件模型來實現Serverless標準的。Knative社區的主要貢獻者有Google、Pivotal、IBM、Red Hat。CloudFoundry、OpenShift這些PaaS提供商都在積極地參與Knative的建設。

01 工作原理

如圖2-14所示,Knative是建立在Kubernetes和Istio平臺之上的,使用了Kubernetes提供的容器管理組件(deployment、replicaset和pod等),以及Istio提供的網絡管理組件(ingress、LB、dynamic route等)。

Knative中有兩個重要的組件,分別是為其提供流量的Serving(服務)組件以及確保應用程序能夠輕松地生產和消費事件的Event(事件)組件。

其中,Serving組件基于負載自動伸縮,包括在沒有負載時縮減到零,允許使用者為多個修訂版本應用創建流量策略,從而通過URL輕松路由到目標應用程序;而Event組件的作用是使生產和消費事件變得容易,允許操作人員使用自己選擇的消息傳遞層。

除了Serving和Event組件之外,Build也是Kantive的組件之一。其提供“運行至完成”的顯示功能,這對創建CI/CD工作流程很有用,通過靈活的插件化的構建系統將用戶源代碼構建成容器。

目前,其已經支持多個構建系統,比如Google的Kaniko,它無須運行Docker Daemon就可以在Kubernetes集群上構建容器鏡像。Serving使用它將源存儲庫轉換為包含應用程序的容器鏡像。

在諸多Serverless開源項目中,Knative的優勢也是較為明顯的。一方面,Knative以Kubernetes為底層框架,與Kubernetes生態結合得更緊密。無論是云上Kubernetes服務還是自建Kubernetes集群,都能通過安裝Knative插件快速地搭建Serverless平臺。

另一方面,Knative聯合CNCF,把所有事件標準化為CloudEvent,提供事件的跨平臺運行,同時讓函數和具體的調用方法解耦。在彈性層面,Knative可以監控應用的請求,并自動擴縮容,借助于Istio(Ambassador、Gloo等)支持藍綠發布、回滾的功能,方便應用發布。

同時,Knative支持日志的收集、查找和分析,并支持VAmetrics數據展示、調用關系跟蹤等。

Knative工作原理如圖2-14所示。

▲圖2-14 Knative工作原理

02 功能與策略

1. Serving(服務)

Serving模塊定義了一組特定的對象,包括Revision(修訂版本)Configuration(配置)Route(路由)Service(服務)。Knative通過Kubernetes CRD(自定義資源)的方式實現這些Kubernetes對象。所有Serving組件對象間的關系可以參考圖2-15。

▲圖2-15 Serving組件對象間的關系

Knative Serving始于Configuration。使用者在Configuration中為部署容器定義所需的狀態。最小化Configuration至少包括一個配置名稱和一個要部署容器鏡像的引用。

在Knative中,定義的引用為Revision。Revision代表一個不變的、某一時刻的代碼和Configuration的快照。每個Revision引用一個特定的容器鏡像和運行它所需要的特定對象(例如環境變量和卷)。然而,使用者不必顯式創建Revision。Revision是不變的,它們從不會被改變和刪除。

相反,當使用者修改Configuration的時候,Knative會創建一個Revision。這使得一個Configuration既可以反映工作負載的當前狀態,也可以用于維護一個歷史的Revision列表。

Knative中的Route提供了一種將流量路由到正在運行的代碼的機制。它將一個HTTP可尋址端點映射到一個或者多個Revision。Configuration本身并不定義Route。

2. 彈性伸縮

Serverless架構的一個關鍵原則是可以按需擴容,以滿足需要和節省資源。Serverless負載應當可以一直縮容至零。這意味著如果沒有請求進入,則不會運行容器實例。如圖2-16所示,Knative使用兩個關鍵組件實現該功能。它將AutoscalerActivator實現為集群中的Pod。

▲圖2-16 Knative彈性伸縮原理簡圖

用戶可以看到它們伴隨其他Serving組件一起運行在knative-serving命名空間中。Autoscaler收集達到Revision并發請求數量的有關信息。為了做到這一點,它在Revision Pod內運行一個名為queue-proxy的容器。該Pod中也運行用戶提供的鏡像。

queue-proxy檢測該Revision上觀察到的并發量,然后每隔一秒將此數據發送到Autoscaler。Autoscaler每隔兩秒對這些指標進行評估,并基于評估的結果增加或者減少Revision部署的規模。默認情況下,Autoscaler嘗試維持每Pod每秒平均接收100個并發請求。這些并發目標和平均并發窗口均可以變化。

Autoscaler也可以利用Kubernetes HPA(Horizontal Pod Autoscaler)來替代該默認配置。這將基于CPU使用率實現自動伸縮,但不支持縮容至零。這些設定都能夠通過Revision元數據注解(Annotation)定制。

Autoscaler采用的伸縮算法針對兩個獨立的時間間隔計算所有數據點的平均值。它維護兩個時間窗,分別是60秒和6秒。Autoscaler以兩種模式運作:Stable Mode(穩定模式)和Panic Mode(恐慌模式)。在穩定模式下,它使用60秒時間窗的平均值決定如何伸縮部署以滿足期望的并發量。

如果6秒時間窗的平均并發量兩次達到期望目標,Autoscaler轉換為恐慌模式并使用6秒時間窗。這讓它更加快捷地響應瞬間流量的增長。它也僅僅在恐慌模式下擴容以防止Pod數量快速波動。如果超過60秒沒有發生擴容,Autoscaler會轉換回穩定模式。

3. Build(構建)

Knative的Serving(服務)組件是解決如何從容器到URL的,而Build組件是解決如何從源代碼到容器的。Build資源允許用戶定義如何編譯代碼和構建容器。這確保了在將代碼發送到容器鏡像庫之前以一種一致的方式編譯和打包代碼。下面介紹一些新的組件。

  • Build:驅動構建過程的自定義Kubernetes資源。在定義構建時,用戶需要定義如何

    獲取源代碼以及如何創建容器鏡像來運行代碼。

  • Build Template:封裝可重復構建步驟以及允許對構建進行參數化的模板。

  • Service Account:允許對私有資源(如Git倉庫或容器鏡像庫)進行身份驗證。

4. Event(事件)

到目前為止,向應用程序發送基本的HTTP請求是一種有效使用Knative函數的方式。無服務器的松耦合特性同時也適用于事件驅動架構。也就是說,可能在文件上傳到FTP服務器時需要調用一個函數;或者任何時間發生一筆物品銷售時需要調用一個函數來處理支付和庫存更新的操作。

與其讓應用程序或函數考慮監聽事件的邏輯,不如當那些被關注的事件發生時,讓Knative去處理并通知我們。

自己實現這些功能則需要做很多工作并要編寫實現特定功能的代碼。幸運的是,Knative提供了一個抽象層使消費事件處理變得更容易。

Knative直接提供了一個“事件”,而不需要編寫特定的代碼來選擇消息代理。當事件發生時,應用程序無須關心它來自哪里或發到哪里,只需要知道事件發生了即可。如圖2-17所示,為實現這一目標,Knative引入了三個新的概念:Source(源)Channel(通道)Subscription(訂閱)

  • Source(源):事件的來源,用于定義事件在何處生成以及如何將事件傳遞給關注對象的方式。

  • Channel(通道):通道處理緩沖和持久性,即使該服務已被關閉,也可確保將事件傳遞到預期的服務。另外,通道是代碼和底層消息傳遞解決方案之間的一個抽象層。這意味著可以像Kafka和RabbitMQ一樣在某些服務之間進行消息交換,但在這兩種情況下都不需要編寫特定的實現代碼。

  • Subscription(訂閱):將事件源發送到通道,并準備好處理它們的服務,但目前沒有辦法獲取從通道發送到服務的事件。為此,Knative設計了訂閱功能。訂閱是通道和服務之間的紐帶,指示Knative如何在整個系統中管理事件。

▲圖2-17 Knative事件處理模型簡圖

Knative中的服務不關心事件和請求是如何獲取的。它可以獲取來自入口網關的HTTP請求,也可以獲取從通道發送來的事件。無論通過何種方式獲取,服務僅接收HTTP請求。這是Knative中一個重要的解耦方式。它確保將代碼編寫到架構中,而不是在底層創建訂閱、通道向服務發送事件。

關于作者:劉宇(花名:江昱),國防科技大學電子信息專業博士,阿里云Serverless產品體驗側負責人,從事Serverless相關的工作多年,負責阿里云函數計算(FC)、Serverless工作流(FNF)等產品的體驗工作,有豐富的實踐經驗。阿里云戰略級開源項目Serverless Devs發起人和負責人,Serverless Framework、Kubevela等開源項目貢獻者,社區項目Anycodes在線編程負責人。

本文摘編自《Serverless工程實踐:從入門到進階》,經出版方授權發布。

延伸閱讀《Serverless工程實踐:從入門到進階》

點擊上圖了解及購買

轉載請聯系微信:DoctorData

推薦語:從產品、開發和工程實踐3個維度全面講解Serverless架構。阿里云Serverless產品專家和技術專家撰寫。

劃重點👇

干貨直達👇

  • 吐血整理!12種通用知識圖譜項目簡介

  • 50%企業數據治理失敗!這9大要素才是成功關鍵

  • 多段實例代碼詳解7大類Python運算符,建議收藏!

  • 4918字,詳解商品系統的存儲架構設計

更多精彩👇

在公眾號對話框輸入以下關鍵詞

查看更多優質內容!

讀書?|?書單?|?干貨?|?講明白?|?神操作?|?手把手

大數據?|?云計算?|?數據庫?|?Python?|?爬蟲?|?可視化

AI?|?人工智能?|?機器學習?|?深度學習?|?NLP

5G?|?中臺?|?用戶畫像?|?數學?|?算法?|?數字孿生

據統計,99%的大咖都關注了這個公眾號

👇

總結

以上是生活随笔為你收集整理的终于有人把Knative讲明白了的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。