horizon 网易云音乐最近开源了Horizon〔1〕应用部署平台,旨在为基于Kubernetes的云原生应用部署提供可靠、安全、高效的标准化方案。Horizon是一个基于Kubernetes的云原生持续部署平台,并且全面践行GitOps。PlatFormTeam可以自定义创建版本化的服务模板,为业务应用程序和中间件定义符合统一标准的部署和运维。Developer可以选择预先定义的模板,进行自动化的服务部署,确保基于Kubernetes的统一最佳实践。通过HorizonGitOps机制,确保任意变更(代码、配置、环境)持久化、可回滚、可审计。 Horizon受ArgoCD和AWSProton的启发,并由网易云音乐、网易数帆等团队合作开发,现在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通过引入模板(基于HelmTemplate)解决了这个问题。Horizon提供了标准化模板化的能力,平台管理人员可以自定义符合自身需求的模板,协助业务进行最佳实践落地。例如,Horizon管理团队可以在自定义模板中提供几个基本资源选项,比如,默认情况下只提供tiny(0。5core,512MB)、small(1core,1GB)和middle(2core,4GB)等,防止出现资源的碎片化且保障用户接口的更加友好而简洁。安全和可靠:Horizon的另一个优点是安全和可靠。Horizon100基于GitOps,通过Horizon对应用程序所做的每个变更都是持久化的、可回滚和可审计。保障可靠安全的情况下,依然能够助力业务进行敏捷实践。开放且可扩展:Horizon还支持各种类型的工作负载,包括基本的Kubernetes工作负载和云原生工程师自主研发的CRD〔2〕。基于通用的声明式API,实现广泛的兼容与开放。大部分情况下,Horizon平台不用任何前后端代码研发,即可快速将各种云原生能力赋能到业务一线研发。多云支持:Horizon提供了统一的应用程序平台来管理多云和混合云,这使得Horizon成为各种使用场景下的理想平台。高效:Horizon管理团队能够基于模板以及低代码的能力快速交付符合最佳实践的应用部署,快速赋能业务全面实践DevOps。特性GitOps:Horizon基于GitOps部署应用,Git仓库储存了所有的配置及其变更,使每个应用程序的更改都是持久化的、可逆的和可审计的。Horizon模板:Horizon基于JSONSchema简单拓展了HelmTemplateSystem(兼容HelmTemplate),Horizon管理团队可以在Template中定义默认Kubernetes资源的基本配置(例如security,affinity,priority,resource等)确保业务开发能够遵守最佳实践;并且各种底层声明式的能力可以面向业务进行进一步的更好的产品化。用户选择模板后,Horizon基于模板中的JSONSchema文件和ReactJSONSchemaForm渲染一个简单统一的HTML表单。Template简单而灵活,可以基于Template定义自己的最佳实践。RBACMember:Horizon提供了一个与GitlabGitHub类似的RBACMember系统,Horizon管理团队可以轻松地创建符合自身需求的Role(与Kubernetes的role、rolebinding类似)和Member。在我们的生产实践中,我们定义了PE、Owner、Maintainer、Guest等角色。Owner拥有读(查询Pods,读取配置等),写(部署,构建部署,重启,发布,删除等)权限,Guest只有读权限。外部集成:Horizon支持提供了OpenAPI、OAuth2。0、Webhooks、访问令牌等功能,用户可以方便地将Horizon集成到自身内部系统中。并且Horizon也可以作为OAuth客户端,接入外部OAuth服务器。 stream 系统架构 architectureHorizonCore HorizonCore是Horizon平台的核心,HorizonCore是一个Restful服务器,为WebUI、CLI等各种系统,提供了OpenAPI接口。它提供了丰富的功能,包括Kubernetes和环境管理,模板管理,私有令牌和访问令牌管理,组、应用程序和集群管理,CICD流水线管理,Webhook管理,用户和成员管理以及IDP管理。GitlabArgoCD Horizon使用Gitlab存储应用程序所有配置,而ArgoCD则是Horizon默认的GitOps引擎,用于将应用程序的配置文件(KubernetesManifest)从Git仓库渲染同步到Kubernetes。TektonS3 Horizon使用云原生流水线Tekton作为默认的CI引擎,可以自动从源代码构建镜像。一旦流水线完成,Horizon将流水线归档存储在S3存储中,兼容Mino和AWSS3等服务。Grafana 为了监控平台的健康状况,Horizon集成了Grafana。如果配置了Prometheus源,Horizon将自动探测指标并在指标仪表板上显示所有指标。MySqlRedis 最后,Horizon使用MySQL和Redis存储和缓存基本元信息,包括成员、用户、令牌、Webhook、IDP等相关数据。相关产品比较Horizon与ArgoCD ArgoCD对于Kubernetes运维团队和熟悉Kubernetes的用户来说是一个很好的工具,实际上,Horizon使用ArgoCD作为默认的GitOps引擎。但是我们认为ArgoCD对于广大的业务研发的全流程支撑并不是很友好。基于Group、Member、RBAC和Template等核心特性,Horizon对于业务开发者更加友好。产品功能对比 产品功能HorizonArgoCDCI支持(待完善)不支持CD支持支持GitOps支持支持Group支持不支持RBAC与Member支持支持Template支持不支持应用支持自定义支持自定义Horizon与OpenShift 我们认为Horizon和Openshift都想要解决同一个问题。两者都给予了用户在Kubernetes上构建、部署和运行应用的能力。但是Horizon与Openshift存在根本性的差异,Openshift更像是Kubernetes的发行版,但是Horizon的目标是成为基于Kubernetes的持续交付平台。产品功能对比 产品功能HorizonOpenShiftCI支持(待完善)支持CD支持支持GitOps支持支持Group支持支持RBAC与Member支持支持Template支持不支持应用支持自定义丰富,支持各种预置中间件Horizon与KubeVela 和Horizon一样,KubeVela通过OAM掩盖了Kubernetes的复杂性。但是Horizon和KubeVela的定位不同,KubeVela是一个部署工具,而Horizon则是一个功能完善的平台,支持登录、RBAC、Group管理等功能。对于企业来说,这些功能都是不可或缺的。产品功能对比 产品功能HorizonKubeVelaCI支持(待完善)不支持CD支持支持GitOps支持不支持Group支持支持RBAC与Member支持支持Template支持支持应用支持自定义支持自定义社区 Horizon计划建设一个关于GitOps与CD的国际化社区,如果你对GitOps、云原生或者CICD感兴趣,请与我们联系,或者在GitHub上给我们一个Star。 Github:https:github。comhorizoncdhorizon〔3〕 官网与文档:https:horizoncd。github。io〔4〕 Slack:https:join。slack。comthorizoncdsharedinvitezt1pqpobiwn1mgV60SIa1oi4mL1WXf7uA〔5〕参考资料 〔1〕 Horizon:https:github。comhorizoncdhorizon 〔2〕 CRD:https:kubernetes。iodocsconceptsextendkubernetesapiextensioncustomresourcescustomresourcedefinitions 〔3〕 https:github。comhorizoncdhorizon:https:github。comhorizoncdhorizon 〔4〕 https:horizoncd。github。io:https:horizoncd。github。io 〔5〕 https:join。slack。comthorizoncdsharedinvitezt1pqpobiwn1mgV60SIa1oi4mL1WXf7uA:https:join。slack。comthorizoncdsharedinvitezt1pqpobiwn1mgV60SIa1oi4mL1WXf7uA 作者:云音乐技术中心 来源:微信公众号:网易云音乐技术团队 出处:https:mp。weixin。qq。comshRuHQ5egPvzLD4IdKiOvA