您好,登錄后才能下訂單哦!
本篇內容介紹了“KubeVela與PaaS的不同點有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
首先,我們先說結論:KubeVela 能夠為用戶帶來非常接近 PaaS 的體驗,但 KubeVela 并不是 PaaS。
大多數 PaaS 都能提供完整的應用生命周期管理功能,同時也非常關注提供簡單友好的用戶體驗,以及對研發效能的提升。在這些點上,KubeVela 跟 PaaS 的目標和提供的用戶體驗,是高度一致的。但如果你去研究 KubeVela 的實現細節,就不難發現 KubeVela 的整體設計與實現其實與各類 PaaS 項目的差別是非常大的。如果從用戶視角來看,這些區別則會直接反應在整個項目的“可擴展性”上。
進一步來說,PaaS 的用戶體驗雖好,但卻往往是不可擴展的。我們可以直接拿比較新的 Kubernetes PaaS,比如 Rancher Rio 項目來看。這個項目提供了很好的應用部署體驗,比如 Rio run 來讓你快速部署一個容器化應用、自動分配域名和訪問規則等等。但是,如果我們想讓 Rio 支持更多的能力以滿足不同的用戶訴求呢?
比如:
能否幫助我運行一個 定時任務?
能不能幫我運行一個 OpenKruise 的 CloneSet 工作負載?
能不能幫我運行一個 MySQL Operator?
能不能根據我的自定義 metrics 來做水平擴容?
能不能基于 Flagger 和 Istio來幫我做漸進式灰度發布?
能不能 ……
而這里的關鍵點在于,上述這些能力在 Kubernetes 生態中都是非常常見的的能力,有的甚至是 Kubernetes 內置就可以支持。可是到了 PaaS 這里,要支持上述任何一個能力,都必須對 PaaS 進行一輪開發,而且由于先前的一些假設和設計,甚至很可能需要大規模的重構。
舉個例子,我有一個 PaaS 系統,它所有的應用都是通過 Deployment 來執行的,那么這個 PaaS 的發布、擴容等功能,也都會直接按照 Deployment 來進行實現。而現在,用戶提出了原地升級的訴求,需要讓這個 PaaS 再支持 CloneSet,那整套系統很可能就得掀翻重來。再到運維能力這一側,這個問題會更加嚴重,比如現在這個 PaaS 支持的是藍綠發布策略,那么它跟流量管理、監控系統等依賴之間,都是需要大量交互和集成的。而現在我們要讓 PaaS 支持一個新的策略叫做“金絲雀”發布,那么所有的這些交互和執行邏輯基本全得重重構一遍,工作量是巨大的。
當然,并不是所有的 PaaS 都完全沒有可擴展性。工程能力比較強的 PaaS,比如 Cloud Foundry 和 Heroku,它們都提供了自己的插件能力和插件中心,在確保平臺本身的用戶體驗和能力的可控制性的前提下開放一定的插件能力,比如允許用戶接入自己的數據庫,或者開發一些簡單的 Feature 進去。但這種插件機制無論怎么做,說白了只能是這個 PaaS 專屬的封閉小生態能力。而在云原生時代,我們開源社區已經有了 Kubernetes 生態這樣一個近乎“無限”的能力池,在這個能力池面前,任何 PaaS 專屬的小生態都顯得太蒼白無力了。
上述問題,我們可以統稱為 PaaS 的“能力困境”。
相比之下,KubeVela 的目標從一開始就是利用整個 Kubernetes 生態作為自己的“插件中心”,并且“有意”把它的每一個內置能力都設計成獨立的、可插拔的插件。這種高度可擴展的模型,背后其實有著精密的設計與實現。比如,KubeVela 如何確保某個完全獨立的 Trait 一定能夠綁定于某種 Workload Type?如何檢查這些相互獨立的 Trait 間是否存在沖突?這些挑戰正是 Open Application Model(OAM)作為 KubeVela 模型層的起到的關鍵作用,一言以蔽之:OAM 是一個高度可擴展的應用定義與能力裝配模型。
而且,大家設計和制作任何 Workload Type 和 Trait 的定義文件,只要存放在 GitHub 上,全世界任何一個 KubeVela 用戶就都可以在自己的 Appfile 里使用這些能力。具體的方式,請參考 $ vela cap (即:插件能力管理命令)的使用文檔。
所以說,KubeVela 提倡的是一種面向未來的云原生平臺架構,這種架構認為:
應用平臺本身架構徹底模塊化,其所有的能力都是可插拔的,而平臺核心框架通過模型層提供標準化的能力封裝與裝配流程。
該流程能夠無縫接入云原生生態中的任何應用管理能力,使得平臺工程師完全專注于能力本身的研發和基于該模型的能力封裝過程,使平臺團隊在為用戶帶來簡單易用的平臺層抽象的同時,快速、敏捷地響應用戶千變萬化的應用管理訴求。
KubeVela 整體架構如下圖所示:
在架構上,KubeVela 只有一個 controller 并且以插件的方式運行在 Kubernetes 之上,為 Kubernetes 帶來了面向應用層的抽象,以及以此為基礎的面向用戶的使用界面,即Appfile。Appfile 乃至 KubeVela 運行機制背后的核心,則是其能力管理模型 Open Application Model (OAM) 。基于這個模型,KubeVela 為系統管理員提供了一套基于注冊與自發現的能力裝配流程,來接入 Kubernetes 生態中的任意能力到 KubeVela 中,從而以“一套核心框架搭配不同能力”的方式,適配各種使用場景(比如 AI PaaS,數據庫 PaaS 等等)。
具體操作上,作為系統管理員或者平臺開發者,上述能力裝配流程允許他們把任意的 Kubernetes API 資源(含 CRD)以及對應的 Controller 作為“能力”一鍵注冊到 KubeVela 中,然后通過 CUE 模板語言將這些能力封裝成用戶可用的抽象(即成為 Appfile 中的一部分)。
接下來,我們就來 Demo 一下如何將 kubewatch 這個社區中的告警機制直接插入到 KubeVela 中作為一個告警 Trait 來使用:
首先,你需要確定 CRD 所表示的能力是對應一個 Workload Type 還是 Trait?這里的區別在于 Workload Type 指的是如何運行你的代碼。而 Trait 指的是如何運維、管理或者操作已經運行起來的代碼實例。
而 KubeWatch 作為一種告警機制,自然作為 Trait 來使用的。這時候,我們就可以通過寫一個 TraitDefinition yaml 來將它注冊:
KubeVela 內置的服務器端 Runtime 會識別監聽的 TraitDefinition 注冊事件,然后將該能力納入平臺管理中。
這一步完成,KubeVela 就已經注冊完畢在 KubeVela 平臺中可用了。但接下來我們還需要將它暴露給用戶使用,所以需要定義這個能力對外的使用接口。
實際上,大多數社區能力雖然很強大,但對于最終用戶來都比較復雜,學習和上手非常困難。所以在 KubeVela 中,它允許平臺管理員對能力做進一步封裝以便對用戶暴露簡單易用的使用接口,在絕大多數場景下,這些使用接口往往只有幾個參數就足夠了。在能力封裝這一步,KubeVela 選擇了 CUE 模板語言,來連接用戶界面和后端能力對象,并且天然就支持完全動態的模板綁定(即變更模板不需要重啟或者重新部署系統)。下面就是 KubeWatch Trait 的模板例子:
將這個模板放到 Definition 文件中并 $ kubectl apply -f 到 Kubernetes 中,KubeVela 就會自動識別和處理相關輸入。這時候,用戶就可以直接在 Appfile 中聲明使用剛加進來的能力了,比如發送告警信息到指定的 Slack channel:
可以看到,這個 kubewatch 的配置是我們通過三方擴展進來的一個新的能力,通過 KubeVela 平臺管理 Kubernetes 擴展能力就是這么簡單快速。有了 KubeVela,平臺開發人員就可以簡單快速地在 Kubernetes 上搭建起一個 PaaS,且能夠將任何一個 Kubernetes 能力快速封裝成面向最終用戶的上層抽象。
以上示例,僅僅是 KubeVela 可擴展性的“冰山一角”。在后續的文章中,我們會繼續詳細介紹 KubeVela 能力裝配流程中更多的細節問題,比如:
如何定義能力之間的沖突關系與協作關系?
如何快速的定義 CUE 模板文件?
如何基于 CUE 語言定義出功能強大的“能力模塊”,然后把這些模塊安裝到 KubeVela 中?
等等 ……
“KubeVela與PaaS的不同點有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。