做者 | 孫健波(天元) 阿里巴巴技術專家git
導讀:OAM 是阿里巴巴聯合微軟在社區推出的一款用於構建和交付雲原生應用的標準規範,旨在經過全新的應用定義、運維、分發與交付模型,推進應用管理技術向「輕運維」的方向邁進,全力開啓下一代雲原生 DevOps 的技術革命。github
OAM 是阿里巴巴聯合微軟在社區推出的一款用於構建和交付雲原生應用的標準規範,以前咱們已經發布過一系列介紹文章,爲方便你們查閱,連接和介紹以下:web
在上面的幾篇文章中,咱們介紹了爲何雲原生應用須要標準定義,以及 OAM 模型究竟是什麼樣子的。今天則爲你們介紹 OAM 自己有哪些價值,即回答爲何是使用 OAM 來做爲應用標準模型。數據庫
本月初(2019 年 12 月),AWS 發佈了 ECS CLI v2,這是自 2015 年發佈 v1 之後,四年來首次發佈的大版本更新,此次發佈的 v2 版本命令行工具將更關注端到端的應用體驗,即管理從源代碼開發到應用部署的全方位應用交付流程。他們基於多年來收到的用戶反饋總結了四條 CLI 的開發原則:api
默認建立現代化的應用。建立的現代化應用默認知足這幾個特徵:無服務化 (serverless),基礎設施即代碼 (infrastructure as code),可觀測 (observable),安全 (secure);安全
用戶應該考慮的是架構,而不是基礎設施。開發者構建微服務的時候,不該該指定 VPC、負載均衡配置亦或是複雜的 Pipeline 流程配置。開發者能夠對雲服務一無所知,可是他們應該制定應用到底屬於哪一種類型,即應用應該適配哪一種架構,基礎設施應該根據應用指定的架構自動匹配資源;架構
運維也應該是工做流的一部分。應用的構建、開發、部署只是應用生命週期中由應用開發者負責的一部分。應用的全生命週期中還應該包含運維的部分,即問題排查和解決;負載均衡
應用交付是持續的。應用的升級變動也應該方便地集成到 CI/CD 系統中。less
這幾條原則與其說是 ECS CLI 的開發原則,不如說是用戶的訴求,用戶但願他們的應用是現代化的(或者說雲原生化的);用戶但願他們指定架構,而不是具體的基礎設施資源;用戶但願運維能力也被統一管理進應用的生命週期;用戶但願應用的變動交付能夠持續、透明、方便的對接並被 CI/CD 系統管理。運維
針對上述用戶的訴求,咱們一個個來看 OAM 是如何知足的,同時也能看出 OAM 在其中發揮的價值。
以下圖所示,你能夠看到運行 OAM 的一個應用配置,使用 K8s 的 API spec,完整包含了一個應用方方面面的資源。
OAM 應用定義並不限定你底層的平臺和實際運行時,你徹底能夠運行在 K8s 之外的平臺,不論是 ECS、Docker、又或是 FaaS (Serverless),天然也不存在廠商鎖定的問題。若是你的應用知足 Serverless 的條件,那麼針對該應用的 OAM 描述,自然就能夠運行在支持 OAM 規範的 Serverless 運行時。
在支持 OAM 的不一樣環境中,你即可以使用統一的應用描述,打造無差異的應用交付。就以下圖所示,對應用戶,他們只要描述統一的應用配置,即可以在不一樣的環境達到一致的應用體驗。
雲原生的普及很大程度上推進了基礎設施即代碼的實現,K8s 做爲一個基礎設施平臺,經過聲明式 API,讓用戶習慣了 經過 Yaml 文件描述須要的資源,這其實就是基礎設施即代碼的實現。 而 OAM 更進一步,還將原生 K8s 中沒有包含的基礎設施資源也統必定義起來,經過配置 OAM 規範的 yaml(代碼)來使用基礎設施。
現在阿里雲上的資源編排產品 ROS 的 OAM 實現就是這樣一個典範,你徹底能夠經過 OAM 的配置拉起一個雲上的基礎設施資源。
讓咱們來實際看一個例子,爲拉起一個 NAS 持久化存儲,其中包含兩個 ROS 的資源,分別爲 NAS FileSystem
和 NAS MountTarget
。
apiVersion: core.oam.dev/v1alpha1 kind: ComponentSchematic metadata: name: nasFileSystem annotations: version: v1.0.0 description: > component schematic that describes the nas filesystem. spec: workloadType: ros.aliyun.com/v1alpha1.NAS_FileSystem workloadSettings: ProtocolType: NFS StorageType: Performance Description: xxx expose: - name: fileSystemOut --- apiVersion: core.oam.dev/v1alpha1 kind: ComponentSchematic metadata: name: nasMountTarget annotations: version: v1.0.0 description: > component schematic that describes the nas filesystem. spec: workloadType: ros.aliyun.com/v1alpha1.NAS_MountTarget workloadSettings: NetworkType: VPC AccessGroupName: xxx FileSystemId: ${fileSystemOut.FileSystemId} consume: - name: fileSystemOut expose: - name: moutTargetOut --- apiVersion: core.oam.dev/v1alpha1 kind: ApplicationConfiguration metadata: name: nas-demo spec: components: - componentName: nasMountTarget traits: - name: DeletionPolicy properties: "Retain" - componentName: nasFileSystem traits: - name: DeletionPolicy properties: "Retain"
在定義中,你能夠看到 NAS MountTarget 使用了 NAS FileSystem 輸出的 FileSystemId,最終這個 yaml 會由 ROS 的 OAM Controller 翻譯爲 ROS 的資源棧模板文件,最終拉起雲上的資源。
用戶的訴求實際上是應用的架構,而不是具體使用哪一種基礎設施資源。而 OAM 經過 "WorkloadType" 來解決這個訴求,經過描述一個應用的 WorkloadType 來定義應用的架構,這個 WorkloadType 能夠是簡單的無狀態應用 "Server",表示應用可複製、可訪問、並做爲守護進程長久運行;也能夠是一個數據庫類型的應用 "RDS",對應啓動一個雲上的 RDS 實例。
用戶的組件 "Component" 經過指定 "WorkloadType" 選擇具體的架構模板,多個 Component 構成了完整的架構。
使用 OAM 應用定義讓用戶真正關心的是架構,而不是具體的基礎設施。
以下圖所示,OAM 的一個應用描述,用戶指定它的應用須要一個外網訪問能力,而不是指定一個 SLB,用戶指定它的組件是數據庫的。
用戶但願運維能力也是應用生命週期的一部分,而 OAM 正是如此,經過綁定 Trait,來定義一個 Component 所使用到的運維能力,從而把運維能力也加入到應用描述中,方便底層基礎設施統一管理。
以下圖所示,一個應用包含兩部分組件,一個 web 服務和一個數據庫, 數據庫組件應該具備數據備份的能力,而 web 服務則能夠被訪問、能夠彈性擴縮容。這些能力由 OAM 的解釋器(即 OAM 的實現層)統一管理,今後運維能力綁定出現衝突也再也不是煩惱。
就像 Docker 鏡像解決了長久以來開發、測試、生產環境不一致同樣,統一而標準化的 OAM 應用描述也讓不一樣系統之間的集成變得透明而標準化。
OAM 也將原先 K8s All-in-one 的複雜 API 作了必定層次的解耦,分爲應用研發(管理 Component)、應用運維(將 Component 組合並綁定 Trait 變成 AppConfig)、以及基礎設施提供方(提供 OAM 的解釋能力映射到實際的基礎設施)三大角色,不一樣角色分工協做,從而總體簡化單個角色關注的內容。使得不一樣角色能夠更聚焦更專業的作好本角色的工做。
OAM 應用定義是彈性、可擴展的,你能夠經過擴展 Workload 來定義不一樣類型的工做負載,你也能夠經過自定義的 Trait 來描述你的運維能力,並且均可以與現有的 K8s 體系裏面 CRD+Operator 的擴展方式完美結合。
OAM 經過關注點分離的思想,將應用分爲研發、運維和基礎設施三個層次,同時又爲研發的 Workload 和運維的 Trait 提供了模塊化協做的能力,大大提升了複用能力。
當模塊化的 Workload 和 Trait 愈來愈多,就會造成這些組件的市場,用戶能夠在 CRD Registry 這樣的註冊中心,快速找到適合本身的應用的架構(Workload),以及本身須要使用的運維能力(Trait)。構建應用將愈來愈簡單。
相信應用的構建會愈來愈簡單,基礎設施的選擇會根據用戶的架構需求自動匹配,用戶能夠真正享受到雲平臺化的紅利,快速複用已有的模塊化能力,而 OAM 也將成爲應用雲原生化的必然選擇。
目前,阿里巴巴團隊正在上游貢獻和維護這套技術,若是你們有什麼問題或者反饋,也很是歡迎與咱們在上游或者釘釘聯繫。
參與方式:
「阿里巴巴雲原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,作最懂雲原生開發者的技術圈。」