網易雲音樂最近開源了 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的開源建設,一起交流,一起學習,一起進步。
優勢與特性
優勢
- 標準化部署:選擇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)等,防止出現資源的碎片化且保障使用者介面的更加友好而簡潔。
- 安全和可靠:Horizon 的另一個優點是安全和可靠。Horizon 100% 基於GitOps,透過 Horizon 對應用程式所做的每個變更都是持久化的、可回滾和可審計。保障可靠安全的情況下,依然能夠助力業務進行敏捷實踐。
- 開放且可擴充套件:Horizon 還支援各種型別的工作負載,包括基本的 Kubernetes 工作負載和雲原生工程師自主研發的CRD。基於通用的宣告式API,實現廣泛的相容與開放。大部分情況下,Horizon平臺不用任何前後端程式碼研發,即可快速將各種雲原生能力賦能到業務一線研發。
- 多雲支援:Horizon 提供了統一的應用程式平臺來管理多雲和混合雲,這使得 Horizon 成為各種使用場景下的理想平臺。
- 高效:Horizon 管理團隊能夠基於模板以及低程式碼的能力快速交付符合最佳實踐的應用部署,快速賦能業務全面實踐 DevOps。
特性
- GitOps: Horizon 基於 GitOps 部署應用,Git 倉庫儲存了所有的配置及其變更,使每個應用程式的更改都是持久化的、可逆的和可審計的。
- 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 定義自己的最佳實踐。
- RBAC & Member: Horizon 提供了一個與 Gitlab/GitHub 類似的 RBAC & Member 系統,Horizon 管理團隊可以輕鬆地建立符合自身需求的 Role(與Kubernetes 的 role、rolebinding 類似)和 Member。在我們的生產實踐中,我們定義了 PE、Owner、Maintainer、Guest 等角色。Owner 擁有讀(查詢Pods,讀取配置等),寫(部署,構建部署,重啟,釋出,刪除等)許可權,Guest 只有讀許可權。
- 外部整合:Horizon 支援提供了 OpenAPI、OAuth2.0、Webhooks、訪問令牌等功能,使用者可以方便地將 Horizon 整合到自身內部系統中。並且 Horizon 也可以作為 OAuth 客戶端,接入外部 OAuth 伺服器。
系統架構
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
微信:
注:如果二維碼過期,請前往 Horizon Github 倉庫檢視最新二維碼