Categories
程式開發

使用Crossplane構建自己的PaaS:Kubernetes、OAM和核心工作流


本文要點

  • 很多企業想要構建自己的雲平台,通常由內部基礎設施和雲供應商組成。
  • 儘管Kubernetes沒有提供完整的開箱即用的平台即服務(PaaS)體驗,但其定義良好的API、清晰的抽象和全面的擴展點讓它成為完美的基礎組件。
  • Crossplane是一個開源的雲控制平面,工程師可以直接用它來管理基於從Kubernetes的基礎設施和雲服務。 這個控制平面為用戶交互提供了單個入口點,可以在其中執行策略,應用防護和審計。
  • 可以使用k8s的資源定義(CRD)和YAML來配置基礎設施,也可以通過完善的工具(如kubectl)或Kubernetes API本身來管理基礎設施,並遵循一些工作流最佳實踐(如GitOps)。
  • 開放應用模型(Open Application Model,OAM)規範描述了一種模型,它定義了核心軟件交付角色,並規定了明確的職責範圍:​​開發人員、應用程序運維人員和基礎設施運維人員。 Crossplane是Kubernetes規範的實現。

最近,InfoQ採訪了Upbound創始人兼首席執行官Bassam Tabbara,討論瞭如何構建跨多個雲供應商和內部基礎設施的應用程序平台。

採訪從探討企業在平台上部署應用程序開始。 目前,Kubernetes是很多“雲原生”平台的基礎。 儘管Kubernetes並未提供完整的開箱即用的平台即服務(PaaS)體驗,但其定義良好的API、清晰的抽象和全面的擴展點讓它成為完美的基礎組件。

Tabbara還討論了橫飛機,這是一個開源項目,工程師可以直接用它來管理基於Kubernetes的基礎設施和雲服務。 這種“跨多雲控制平面”是基於Kubernetes的聲明式配置原語構建的,工程師可以自定義基礎設施,以便利用已有的k8s工具鏈。 採訪內容還涵蓋了開放應用模型(OAM),並探討了Crossplane如何成為以團隊為中心的標準的Kubernetes實現。

每個工程團隊都需要一個平台

很多企業想要構建自己的雲平台,通常由內部基礎設施和雲供應商組成。 這些企業的領導者認識到,最小化部署摩擦並減少應用程序的交付時間,同時又能提供安全性,可以提升競爭優勢。 這些團隊還認識到,成功的企業通常都需要將現有的“遺留”應用程序和基礎設施包含在平台中。 很多公司還希望支持多個公共雲供應商,目標是避免被鎖定、套利成本或實施災難恢復策略。

企業內的平台團隊通常希望為應用程序開發人員和運維人員提供自助服務,但他們也希望平台保持適當的安全性、合規性和監管能力。 所有的大型公共雲供應商,例如Amazon Web Service(AWS)、Microsoft Azure和Google Cloud Platform(GCP)都通過控制平面提供服務。 控制平面由用戶界面(UI)、命令行接口(CLI)和應用程序編程接口(API)組成,平台團隊和運維人員用它們來配置和部署基礎設施服務的基礎“數據平面”。 儘管雲控制平面的實現通常是分佈式的,但對於最終用戶來說是集中式的。 控制平面為用戶交互提供了單個入口點,可以在其中執行策略,應用防護和審計。

應用程序開發人員通常希望獲得類似平台即服務(PaaS)的體驗來定義和部署應用程序,就像冬季Heroku雲鑄造之類的開創者一樣。 通過簡單的“git push heroku master”命令來部署應用程序是一種功能強大且毫不​​費力的方法。 應用程序運維人員和站點可靠性工程(SRE)團隊希望能夠輕鬆地組裝、運行和維護應用程序及其配置。

Tabbara說,這些需要企業購買PaaS,如果選擇不當,其維護成本可能會很高:

“現代商業PaaS通常可以滿足企業80%的場景需求,這意味著基礎設施團隊必須創建額外的平台資源來滿足其他20%的需求。”

構建PaaS風格的體驗

構建PaaS平台並不容易,它需要時間和技能,而且定義和實現滿足所有相關角色要求的技術是一項巨大的挑戰。 谷歌的內部平台有數千名訓練有素的工程師,Netflix擁有龐大的專家團隊,他們專注於內部PaaS的創建和維護,甚至連Shopify這種規模較小的公司也有專門的平台團隊。 技術抽象的範圍很廣,從“最低公分母”(Libcloud和OpenStack所採用的)一直到提供通用工作流程和完整的雲特定配置(HashiCorp Terraform或Pulumi)。 傳統PaaS抽像在雲領域也很常見,但通常是特定於供應商,例如GCP App Engine,AWS Elastic Beanstalk或Azure Service Fabric。

很多企業選擇Kubernetes作為構建平台的基礎。 但是,正如Tabbara在Twitter上指出的那樣,這可能需要大量的前期投入,再加上80%的應用場景挑戰,可能會陷入“PaaS困境”:

“PaaS的困境——你的PaaS完成了我想要的80%,而我的PaaS花費了80%的時間來維護Kubernetes”。

Tabbara表示,開源Crossplane項目旨在成為一種通用的多雲控制平面,用於構建定制的PaaS體驗。

Crossplane是“跨”雲“控制平面”的融合。 我們想用一個名詞來命名這個實體,它負責連接不同雲提供商,並充當跨雲控制平面。 “cross”表示“跨雲”,“plane”表示“控制平面”。

在Kubernetes風格原語基礎上構建配置,並提供現成的基礎設施組件和用於共享其他資源的註冊表,減輕了基礎設施和應用程序運維人員的負擔。 另外,通過提供封裝了關鍵基礎設施抽象的API,可以將平台運維人員(在“API層”之下工作的人)與應用程序開發人員和運維人員(在“ API層”之上工作的人)之間的關注點分開。

“開發人員可以定義工作負載,不需要擔心實現細節、環境約束或策略。由管理員來定義環境細節和策略。這可以實現更高的可重用性,並降低複雜性。”

Crossplane:通過Kubernetes來控制基礎設施

Crossplane作為一個Kubernetes附加組件,通過提供和管理雲基礎設施、服務和應用程序來擴展集群能力。 Crossplane使用Kubernetes風格的聲明式和API驅動式配置來控製本地或云端的基礎設施。 通過這種方式,我們可以使用自定義資源定義(CRD)和YAML來配置基礎設施,還可以通過完善的工具(如kubectl)或Kubernetes API本身來實現管理。 Kubernetes還允許使用RBAC或策略來定義安全控制(使用開放策略代理,OPA)。

作為Crossplane的一部分,可以配置一個Kubernetes資源控制器負責管理資源的生命週期:配置、健康檢查、伸縮、故障轉移,並主動對偏離配置的外部變更做出響應。 Crossplane與持續交付(CD)管道集成在一起,因此應用程序基礎設施配置存儲在單個控制集群中。 團隊可以使用GitOps等雲原生CD最佳實踐來創建、跟踪和批准變更。 Crossplane讓應用程序和基礎設施配置可以共存於同一個Kubernetes集群中,從而降低了工具鍊和部署管道的複雜性。

使用Crossplane構建自己的PaaS:Kubernetes、OAM和核心工作流 1

清晰的抽象、角色使用以及“上下分界線”方法很大程度上借鑒了開放應用模型的原理。

OAM:以團隊為中心構建雲原生應用程序的標準

開放式應用程序模型(OAM)規範最初由微軟、阿里巴巴和Upbound創建,它描述了一種模型,開發人員負責定義應用程序組件,應用程序運維人員負責創建這些組件的實例並為其分配應用程序配置,而基礎設施運維人員則負責聲明、安裝和維護平台上可用的基礎服務。 Crossplane是Kubernetes規範的實現。

借助OAM,平台構建者可以通過“組件”、“特徵”和“範圍”的格式提供可重複使用的模塊。 平台可以將它們打包在預定義的應用程序配置文件中。 用戶可以通過選擇配置文件來選擇如何運行應用程序,例如,具有高SLO的微服務應用程序、具有持久卷的有狀態應用程序或具有水平自動伸縮功能的事件驅動功能。

OAM規範文檔提供了一個案例,探討了典型的應用程序交付生命週期。

  1. 開發人員創建一個Web應用程序;
  2. 應用程序運維人員將部署該應用程序的實例,並為其配置屬性,例如自動縮放;
  3. 基礎設施運維人員決定使用哪種基礎技術進行部署和運維。

為了交付應用程序,應用程序開發人員將程序的每個單獨組件描述為Component YAML。 該文件封裝了工作負載以及運行它所需的信息。

在應用程序運維方面,應用程序運維人員為開發人員的組件設置參數值,並在ApplicationConfiguration YAML中配置屬性,例如副本大小、自動伸縮策略、入口點和流量路由規則。 在OAM中,這些屬性被稱為特徵。 編寫和部署ApplicationConfiguration等效於部署應用程序。 底層平台將為已經定義好的工作負載創建實時實例,並根據ApplicationConfiguration規範將配置屬性附加到工作負載上。

基礎設施運維人員負責聲明、安裝和維護平台上可用的基礎服務。 例如,基礎設施運維人員可能會在公開服務時選擇特定的負載均衡器或者可確保數據是全局加密的自定義數據庫配置。

一個典型的Crossplane工作流

為了更加具體一點,我們來看一個典型的Crossplane工作流程——從項目的安裝到使用。

首先,安裝Crossplane,並創建一個Kubernetes集群。 接下來,安裝Provider並配置憑據。 基礎設施原語可以來自任意一個供應商,例如GCP、AWS、Azure、阿里巴巴和自定義本地部署。

平台運維人員使用聲明性YAML定義、組合和發布自己的基礎設施資源,從而將自己的基礎設施CRD添加到Kubernetes API中,供應用程序使用。

應用程序開發人員發布應用程序組件,應用服務及其基礎設施的基本、建議或可選屬性。

應用程序運維人員將基礎設施組件和應用程序組件、規範配置聯繫在一起,然後運行應用程序。

使用Crossplane構建自己的PaaS:Kubernetes、OAM和核心工作流 2

結論

Kubernetes被作為很多“雲原生”平台的基礎,因此,對於企業來說,在團隊與平台交互方式以及如何組裝基礎組件這兩方面的投入是至關重要的。 正如Nicole Forsgren博士等人所說的那樣,最小化交付週期(從構想到產生價值)和提高部署頻率與搞績效的組織息息相關。 平台在這裡起著至關重要的作用。

Crossplane是一個不斷發展的項目,隨著社區的擴展,正在尋求越來越多的反饋。 工程團隊可以訪問Crossplane網站開始使用這個開源項目,並在Crossplane Slack中提供反饋。

作者介紹:

丹尼爾·布萊恩特在Datawire擔任產品架構師,在InfoQ擔任新聞板塊經理,並在QCon London擔任主席。 他目前的技術專長集中在“DevOps”工具、雲/容器平台和微服務實現。 Daniel是倫敦Java社區(LJC)的負責人,為多個開源項目做出了貢獻,為InfoQ、O’Reilly和DZone等知名技術網站撰寫文章,並定期在QCon、JavaOne和Devoxx等國際技術大會上演講。

原文鏈接

使用Crossplane構建自己的PaaS:Kubernetes,OAM和核心工作流程