服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

网易云音乐开源的云原生应用部署平台 - Horizon

日期: 来源:Github爱好者收集编辑:Horizon

Horizon 网易云音乐开源的一个云原生应用程序持续交付 (CD) 平台,平台团队可以让开发人员将他们的代码和中间件以最佳实践方式轻松、高效地部署到云和 Kubernetes。Horizon 的灵感来自 ArgoCD 和 AWS Proton,全面践行 GitOps,通过 Horizon GitOps 机制,确保任意变更(代码、配置、环境)持久化、可回滚、可审计。现在 Horizon 已被大规模应用到了网易云音乐和网易传媒的实际生产环境中。

特性

GitOps

在 Horizon 中,Git 被用作唯一的"The Source Of Truth",Horizon 将模板和所有的值存储在 Git 仓库中。每一个变化都是持久的、可逆的和可审计的,包括代码、环境变量、资源规格等。

模板

Horizon 模板是基于 Helm 和 jsonschema 的。平台团队可以在默认情况下进行基本的实践(包括安全、亲和性、优先级、资源等),并为用户提供一个简单而统一的界面,这个界面是由 jsonschema 文件定义的。jsonschema 用于在 Horizon 上提供一个用户友好的 HTML 表单,基于 react-jsonschema-form。它具有高度的可扩展性和灵活性,可以在简单的模板系统的基础上做出你自己的最佳实践。

RBAC 和成员系统

Horizon 提供一个 RBAC 和成员系统,就像 Gitlab 一样。你可以轻松地定义你自己的平台成员和角色(就像 Kubernetes 角色和角色绑定)。在我们的实践中,我们提供了 PE、Owner、Maintainer、Guest 等角色。Owner 具有读取(列出 pod、读取所有属性等)/写入(部署、构建部署、重启、发布、删除等)的权限,Guest 只具有读取权限。

集成的便利性

Horizon 提供 OpenAPI、AccessToken、Oauth2.0、IDP Connector、Webhooks,它使整合内部系统变得容易。

易用性

我们还提供产品功能,如模板管理、Kubernetes 管理、监控管理、环境管理。平台团队可以通过网页界面轻松地进行设置。

架构

Horizon-Core

Horizon Core Server 是一个 Rest Server,它暴露 Web UI、CLI 和其他系统使用的 OpenAPI。此外它还提供以下功能:

_ Kubernetes 和环境管理
_ 模板管理
_ PrivateToken、AccessToken 管理
_ 组、应用、集群管理
_ CI、CD 流水线管理
_ WekHook 管理
_ 用户和成员管理
_ IDP 管理

Gitlab 和 ArgoCD


  • Gitlab:Gitlab 存储应用程序的所有配置,应用程序的“唯一来源”。
  • ArgoCD:ArgoCD 是我们默认的 GitOps 引擎,可将应用程序工作负载从 git 仓库同步到 Kubernetes。

Tekton 和 S3

  • Tekton:用于我们默认 ci 引擎的云原生流水线,用于从源代码自动构建镜像。
  • S3:已完成的流水线会被存储到 S3,你可以使用任何 S3 兼容服务,如 Mino 或 Aws S3 服务等。

Grafana 和 Prometheus

为了方便,我们默认将监控功能集成到 Horizon 中,只要你配置好 Prometheus,Horizon 就会自动检索指标,在 Horizon-Web 上显示指标仪表面板。

MySQL 和 Redis

用于存储和缓存基本元信息,例如成员、用户、Token、webhook、IDP 等数据。

产品对比

Horizon 与 ArgoCD

Argo CD 对于 Kubernetes 运维团队和熟悉 Kubernetes 的用户来说是一个很好的工具,实际上,Horizon 使用 Argo CD 作为默认的 GitOps 引擎。但是我们认为 Argo CD 对于广大的业务研发的全流程支撑并不是很友好。基于 Group、Member、RBAC 和 Template 等核心特性,Horizon 对于业务开发者更加友好。

产品功能HorizonArgo CD
CI支持(待完善)不支持
CD支持支持
GitOps支持支持
Group支持不支持
RBAC 与 Member支持支持
Template支持不支持
应用支持自定义支持自定义

Horizon 与 OpenShift

Horizon 和 Openshift 都想要解决同一个问题,两者都给予了用户在 Kubernetes 上构建、部署和运行应用的能力。但是 Horizon 与 Openshift 存在根本性的差异,Openshift 更像是 Kubernetes 的发行版,但是 Horizon 的目标是成为基于 Kubernetes 的持续交付平台。

产品功能HorizonOpenShift
CI支持(待完善)支持
CD支持支持
GitOps支持支持
Group支持支持
RBAC 与 Member支持支持
Template支持不支持
应用支持自定义丰富,支持各种预置中间件

Horizon 与 KubeVela

和 Horizon 一样,KubeVela 通过 OAM 掩盖了 Kubernetes 的复杂性。但是 Horizon 和 KubeVela 的定位不同,KubeVela 是一个部署工具,而 Horizon 则是一个功能完善的平台,支持登录、RBAC、Group 管理等功能。对于企业来说,这些功能都是不可或缺的。

产品功能HorizonKubeVela
CI支持(待完善)不支持
CD支持支持
GitOps支持不支持
Group支持支持
RBAC 与 Member支持支持
Template支持支持
应用支持自定义支持自定义

安装

目前 Horizon 在 Kubernetes V1.19.3 版本上进行了全面测试,大于该版本的集群不保证能正常使用。下表列出了用于部署 Horizon 的最低和推荐硬件配置。

资源最小推荐
CPU4 CPU8 CPU
Mem12 GB16 GB
Disk40 GB80 GB

整体看来 Horizon 还是比较耗资源的。

要安装 Horizon 可以使用 Helm Chart 进行一键安装:

$ helm repo add horizon https://horizoncd.github.io/helm-charts
$ helm install horizon horizon/horizon -n horizoncd --version 2.0.3 --create-namespace

不过需要注意的是该 charts 模板中的 Ingress 对象还是使用的 extensions/v1beta1 版本,所以如果你使用的是 networking.k8s.io/v1 版本则需要手动去修改下模板。而且默认情况下会安装很多组件,包括:gitlab、tektoncd、harbor、argo cd、grafana、chartmuseum、mysql、minio 等,所以如果你集群中已经有相关组件,则需要去定制 values 文件了,所以建议用 Kind 创建一个全新的集群进行测试更好,各组件对应的版本如下所示:

组件版本
Gitlab13.11.7-ce.0
Argo-cdv2.4.11
Tektondashboard: v0.11.1 pipeline: v0.18.1 triggers: v0.11.2
Chartmuseumv0.15.0
Grafana8.4.6
Minio2022.10.29-debian-11-r0
Redis6.0.7-alpine
Mysql8.0.31-debian-11-r0

使用默认 values 安装后,会包含很多 pod,如上所示:

$ kubectl get pod -n horizoncd
NAME                                                 READY   STATUS      RESTARTS   AGE
el-horizon-listener-f5dcd8958-tx675                  1/1     Running     0          26m
horizon-argocd-application-controller-0              1/1     Running     0          39m
horizon-argocd-repo-server-5c89969bbb-l8hcr          1/1     Running     0          40m
horizon-argocd-server-579fdbf68c-9p8wr               1/1     Running     0          40m
horizon-chartmuseum-5db87d9dc8-8j6b9                 1/1     Running     4          40m
horizon-core-64df467d7-jtdl6                         1/1     Running     0          24m
horizon-gitlab-75d5c47c96-zzjpl                      1/1     Running     0          17h
horizon-grafana-78c956d9b6-6th7p                     3/3     Running     0          17h
horizon-harbor-core-86944d7f76-q2lcb                 1/1     Running     2          26m
horizon-harbor-database-0                            1/1     Running     0          39m
horizon-harbor-jobservice-569559cfd8-c2plt           1/1     Running     2          26m
horizon-harbor-nginx-7f7cc9b669-64nxz                1/1     Running     0          26m
horizon-harbor-portal-555876fd5-q9mc5                1/1     Running     0          40m
horizon-harbor-registry-77977b5d58-64m6l             2/2     Running     0          26m
horizon-job-bfbc7cb4d-td64p                          1/1     Running     0          37m
horizon-minio-74c84b8c4f-qsdj2                       1/1     Running     0          39m
horizon-minio-provisioning-9tgz8                     0/1     Completed   0          26m
horizon-mysql-0                                      1/1     Running     0          39m
horizon-redis-ha-server-0                            2/2     Running     0          25m
horizon-swagger-676fbc8ff9-w8tq7                     1/1     Running     0          40m
horizon-web-5784d89d46-g7bx7                         1/1     Running     0          40m
tekton-dashboard-598fb5b5b7-xmfsz                    1/1     Running     0          40m
tekton-pipelines-controller-688d99f585-kvb58         1/1     Running     0          40m
tekton-pipelines-webhook-86bd954957-6n7m2            1/1     Running     1          40m
tekton-triggers-controller-f45c96768-pg8sv           1/1     Running     0          40m
tekton-triggers-core-interceptors-857dcb75b6-lbprb   1/1     Running     0          40m
tekton-triggers-webhook-559b5b98cc-c7tmj             1/1     Running     0          40m

当所有 Pod 都正常后我们可以通过 ingress 去访问 horizon 的 web 服务:

使用

然后就可以使用邮箱和密码进行登录了。

当第一次使用的时候需要先配置一些资源。比如先添加一个 Docker Registry 镜像仓库,默认安装了 Harbor,所以这里配置 Harbor 的相关信息即可。

然后要添加一个 Kubernetes 集群,如果你想在本地 K8s 上部署工作负载,Domain 字段的值配置成 https://kubernetes.default.svc 即可,然后将你的 kubeconfig 文件内容填入保存即可。

接下来还需要创建一个环境。

创建完成后进入你的环境页面,点击 Link kubernetes 链接你刚刚添加的 Kubernetes 集群。

接下来还需要一个模板来保存你应用程序的构建和部署配置,这里我们创建一个公共模板。

然后输入模板相关信息,请注意,Git repo 是模板的克隆链接,Horizon 通过它拉取它。我们可以使用示例应用 https://github.com/horizoncd/deployment.git 来部署第一个工作负载。

接下来需要创建并管理一个新的组,Group 需要绑定 Kubernetes,这是用标签来部署你的应用程序,所以需要将 Kubernetes 资源链接到你的新组。

然后在 Group 页面,点击 New application 按钮,开始创建一个新的应用程序。这里使用 git 仓库的样本 https://github.com/horizoncd/springboot-source-demo.git,可以按照下面的方式使用它。

然后填写 Dockerfile 路径。

选择模板并填写部署配置信息。

应用创建完成后,在应用程序页面中,单击 New cluster 按钮开始创建新集群,选择要部署集群的环境和地域。

接下来就是部署我们的第一个工作负载的最后一步了,在集群页面,点击构建和部署按钮,选择你的 git reference,并检查与上次修订的差异,点击提交按钮,确认构建和部署。

检查流水线的日志和集群状态。

当集群状态处于 healthy 时,你部署的第一个工作负载就成功地部署在 Kubernetes 上了。

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


相关阅读

  • 又一优雅的 K8s 开源桌面管理工具 - Monokle

  • Monokle 是一款完全开源的 Kubernetes 桌面管理工具,通过提供用于编写 YAML 清单、验证策略和管理实时集群的统一可视化工具,简化了创建、分析和部署 Kubernetes 配置的过程。
  • 潮汕职业技术学院2023年人才招聘计划

  • 潮汕职业技术学院(简称"潮汕学院")创办于1999年8月,是经国家教育部批准设立、广东省教育厅备案的一所全日制民办高职高专学校。学校位于广东省潮汕平原著名侨乡、商贸名城普宁
  • 无锡职业技术学院2023年招聘公告

  • 导读:1.2023年无锡职业技术学院诚聘天下英才2.无锡职业技术学院2023年公开招聘技术技能型人才公告2023年无锡职业技术学院诚聘天下英才‍一、学校简介无锡职业技术学院是一所
  • 多地高校降薪,官方允许教师兼职,意味着什么?

  • 近日,有爆料称高校迎来了一波降薪潮,降得多的平均一年就降了4万。同时,在社交平台,也可以看见不少教师分享自己“降薪”的情况——其实早在去年,高校教师降薪的传言就开始了。202
  • 这是一件程序员才懂的T恤

  • 提到程序员的穿衣搭配,秋冬季容易想到的有冲锋衣、卫衣、格子衫,到了夏天程序员的专属衣柜里必不可少的,当然是日常又百搭的T恤。尤其是可以随心定制,自己设计的T恤,青春活力无限

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 又一优雅的 K8s 开源桌面管理工具 - Monokle

  • Monokle 是一款完全开源的 Kubernetes 桌面管理工具,通过提供用于编写 YAML 清单、验证策略和管理实时集群的统一可视化工具,简化了创建、分析和部署 Kubernetes 配置的过程。
  • 帕特完成B轮融资 |【经纬低调新闻】

  • 综述近日,高端宠粮品牌帕特宣布完成了B轮融资,此次融资将用于研发端投入、供应链建设、品牌建设等方面。经纬观点早在2021年,经纬创投就独家投资了帕特的A轮融资,是公司最大的机