網易雲音樂全面開源一款雲原生應用部署平台:Horizon

語言: CN / TW / HK

網易雲音樂最近開源了 Horizon 應用部署平台,旨在為基於 Kubernetes 的雲原生應用部署提供可靠、安全、高效的標準化方案。Horizon是一個基於 Kubernetes 的雲原生持續部署平台,並且全面踐行 GitOps。PlatForm Team可以自定義創建版本化的服務模板,為業務應用程序和中間件定義符合統一標準的部署和運維。Developer可以選擇預先定義的模板,進行自動化的服務部署,確保基於Kubernetes的統一最佳實踐。通過Horizon GitOps機制,確保任意變更(代碼、配置、環境)持久化、可回滾、可審計。

Horizon 受 Argo CD 和 AWS Proton 的啟發,並由網易雲音樂、網易數帆等團隊合作開發,現在 Horizon 已被大規模應用到了網易雲音樂和網易傳媒的實際生產環境中。

開源背景

網易雲音樂全面啟動雲原生、容器化的時間並不是非常早,大約在2020年,雲原生的發展也是日新月異,諸多技術方案基於Cloud和Kubernetes都有被重新打造的潛力和趨勢。當時我們關注到GitOps領域的發展,以及CICD領域的雲原生的前沿進展,決定基於這些最新的理念和方案去打造一款能夠中長期滿足公司長遠發展的CD平台。

目前該項目已經全面落地到網易雲音樂,以及其他事業部。網易雲音樂通過Horizon全面管理國內外7大機房,支持各種類型的業務,包括在線應用(Web服務)、Serverless(支持音視頻)、實時計算、AI推理、中間件等的部署和運維。基於Horizon的日均構建和發佈達到上千次,各類微服務集羣8K+。全面高效支撐了雲音樂實現雲原生容器化的技術迭代和轉型,並且有效地支持了公司降本增效目標的落地。

經過2年多來,協同業務不斷地打磨、迭代,以及大規模業務落地實踐,我們認為Horizon 在 GitOps 持續部署領域相比業界解決方案擁有優勢。正好,網易集團也鼓勵我們做創新做開源。所以此次,我們將Horizon正式全面開源,希望Horizon同樣幫助更多同行和公司,創造更大的價值。當然我們希望社區和有興趣的同仁能夠參與到Horizon的開源建設,一起交流,一起學習,一起進步。

優勢與特性

優勢

  1. 標準化部署:選擇Horizon的一個關鍵原因是Horizon標準化的應用部署。雖然 Kubernetes 靈活而強大,但也是龐大而複雜的,融合諸多視角的關注點,比如安全、架構、sre等等,這使得開發人員難以全面理解 Kubernetes,更難以遵循最佳實踐。Horizon 通過引入模板(基於Helm Template)解決了這個問題。Horizon提供了標準化模板化的能力,平台管理人員可以自定義符合自身需求的模板,協助業務進行最佳實踐落地。例如,Horizon 管理團隊可以在自定義模板中提供幾個基本資源選項,比如,默認情況下只提供 tiny(0.5 core,512 MB)、small(1 core,1 GB)和 middle(2 core,4 GB)等,防止出現資源的碎片化且保障用户接口的更加友好而簡潔。
  2. 安全和可靠:Horizon 的另一個優點是安全和可靠。Horizon 100% 基於GitOps,通過 Horizon 對應用程序所做的每個變更都是持久化的、可回滾和可審計。保障可靠安全的情況下,依然能夠助力業務進行敏捷實踐。
  3. 開放且可擴展:Horizon 還支持各種類型的工作負載,包括基本的 Kubernetes 工作負載和雲原生工程師自主研發的CRD。基於通用的聲明式API,實現廣泛的兼容與開放。大部分情況下,Horizon平台不用任何前後端代碼研發,即可快速將各種雲原生能力賦能到業務一線研發。
  4. 多雲支持:Horizon 提供了統一的應用程序平台來管理多雲和混合雲,這使得 Horizon 成為各種使用場景下的理想平台。
  5. 高效:Horizon 管理團隊能夠基於模板以及低代碼的能力快速交付符合最佳實踐的應用部署,快速賦能業務全面實踐 DevOps。

特性

  1. GitOps: Horizon 基於 GitOps 部署應用,Git 倉庫儲存了所有的配置及其變更,使每個應用程序的更改都是持久化的、可逆的和可審計的。
  2. Horizon模板: Horizon 基於 JSON Schema 簡單拓展了 Helm Template System(兼容 Helm Template),Horizon 管理團隊可以在 Template 中定義 默認Kubernetes 資源的基本配置(例如 security, affinity, priority, resource 等)確保業務開發能夠遵守最佳實踐;並且各種底層聲明式的能力可以面向業務進行進一步的更好的產品化。用户選擇模板後,Horizon 基於模板中的 JSON Schema 文件和 React JSON Schema Form 渲染一個簡單統一的 HTML 表單。Template 簡單而靈活,可以基於 Template 定義自己的最佳實踐。
  3. RBAC & Member: Horizon 提供了一個與 Gitlab/GitHub 類似的 RBAC & Member 系統,Horizon 管理團隊可以輕鬆地創建符合自身需求的 Role(與Kubernetes 的 role、rolebinding 類似)和 Member。在我們的生產實踐中,我們定義了 PE、Owner、Maintainer、Guest 等角色。Owner 擁有讀(查詢Pods,讀取配置等),寫(部署,構建部署,重啟,發佈,刪除等)權限,Guest 只有讀權限。
  4. 外部集成:Horizon 支持提供了 OpenAPI、OAuth2.0、Webhooks、訪問令牌等功能,用户可以方便地將 Horizon 集成到自身內部系統中。並且 Horizon 也可以作為 OAuth 客户端,接入外部 OAuth 服務器。

stream

系統架構

architecture

Horizon-Core

Horizon-Core 是 Horizon 平台的核心,Horizon-Core 是一個 Restful 服務器,為Web UI、CLI 等各種系統,提供了 OpenAPI 接口。它提供了豐富的功能,包括 Kubernetes 和環境管理,模板管理,私有令牌和訪問令牌管理,組、應用程序和集羣管理,CI/CD 流水線管理,Webhook 管理,用户和成員管理以及 IDP 管理。

Gitlab & ArgoCD

Horizon 使用 Gitlab 存儲應用程序所有配置,而 Argo CD 則是 Horizon 默認的 GitOps 引擎,用於將應用程序的配置文件(Kubernetes Manifest)從 Git 倉庫渲染同步到 Kubernetes。

Tekton & S3

Horizon 使用雲原生流水線 Tekton 作為默認的 CI 引擎,可以自動從源代碼構建鏡像。一旦流水線完成,Horizon 將流水線歸檔存儲在 S3 存儲中,兼容 Mino 和 AWS S3等服務。

Grafana

為了監控平台的健康狀況,Horizon 集成了 Grafana。如果配置了 Prometheus 源,Horizon 將自動探測指標並在指標儀表板上顯示所有指標。

MySql & Redis

最後,Horizon 使用 MySQL 和 Redis 存儲和緩存基本元信息,包括成員、用户、令牌、Webhook、IDP 等相關數據。

相關產品比較

Horizon 與 ArgoCD

Argo CD 對於 Kubernetes 運維團隊和熟悉 Kubernetes 的用户來説是一個很好的工具,實際上,Horizon 使用 Argo CD 作為默認的 GitOps 引擎。但是我們認為 Argo CD 對於廣大的業務研發的全流程支撐並不是很友好。基於 Group、Member、RBAC 和 Template 等核心特性, Horizon 對於業務開發者更加友好。

產品功能對比

| 產品功能 | Horizon | Argo CD | | -------------- | -------------- | ---------- | | CI | 支持(待完善) | 不支持 | | CD | 支持 | 支持 | | GitOps | 支持 | 支持 | | Group | 支持 | 不支持 | | RBAC 與 Member | 支持 | 支持 | | Template | 支持 | 不支持 | | 應用 | 支持自定義 | 支持自定義 |

Horizon 與 OpenShift

我們認為 Horizon 和 Openshift 都想要解決同一個問題。兩者都給予了用户在Kubernetes上構建、部署和運行應用的能力。但是 Horizon 與 Openshift 存在根本性的差異,Openshift 更像是 Kubernetes 的發行版,但是 Horizon 的目標是成為基於 Kubernetes 的持續交付平台。

產品功能對比

| 產品功能 | Horizon | OpenShift | | -------------- | -------------- | ------------------------ | | CI | 支持(待完善) | 支持 | | CD | 支持 | 支持 | | GitOps | 支持 | 支持 | | Group | 支持 | 支持 | | RBAC 與 Member | 支持 | 支持 | | Template | 支持 | 不支持 | | 應用 | 支持自定義 | 豐富,支持各種預置中間件 |

Horizon 與 KubeVela

和 Horizon 一樣,KubeVela 通過 OAM 掩蓋了 Kubernetes 的複雜性。但是 Horizon 和 KubeVela 的定位不同,KubeVela 是一個部署工具,而 Horizon 則是一個功能完善的平台,支持登錄、RBAC、Group管理等功能。對於企業來説,這些功能都是不可或缺的。

產品功能對比

| 產品功能 | Horizon | KubeVela | | -------------- | -------------- | ---------- | | CI | 支持(待完善) | 不支持 | | CD | 支持 | 支持 | | GitOps | 支持 | 不支持 | | Group | 支持 | 支持 | | RBAC 與 Member | 支持 | 支持 | | Template | 支持 | 支持 | | 應用 | 支持自定義 | 支持自定義 |

社區

Horizon計劃建設一個關於 GitOps 與 CD 的國際化社區,如果你對GitOps、雲原生或者 CICD 感興趣,請與我們聯繫,或者在 GitHub 上給我們一個 Star。

Github:https://github.com/horizoncd/horizon

官網與文檔:https://horizoncd.github.io/

Slack:https://join.slack.com/t/horizoncd/shared_invite/zt-1pqpobiwn-1mgV60SIa1oi4mL1WXf7uA

微信:

wechat

注:如果二維碼過期,請前往 Horizon Github 倉庫查看最新二維碼