公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

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 对于业务开发者更加友好。

产品功能 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 在 Kubernetes V1.19.3 版本上进行了全面测试,大于该版本的集群不保证能正常使用。下表列出了用于部署 Horizon 的最低和推荐硬件配置。

资源 最小 推荐
CPU 4 CPU 8 CPU
Mem 12 GB 16 GB
Disk 40 GB 80 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 创建一个全新的集群进行测试更好,各组件对应的版本如下所示:

组件 版本
Gitlab 13.11.7-ce.0
Argo-cd v2.4.11
Tekton dashboard: v0.11.1 pipeline: v0.18.1 triggers: v0.11.2
Chartmuseum v0.15.0
Grafana 8.4.6
Minio 2022.10.29-debian-11-r0
Redis 6.0.7-alpine
Mysql 8.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

本文转载自:「Github爱好者」,原文:https://tinyurl.com/2p8pvrj6,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

你可能还喜欢

点击下方图片即可阅读

如何在 Kubernetes 部署 HBase 数据库


点击上方图片,『美团|饿了么』外卖红包天天免费领

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

Horizon: 网易云音乐开源的云原生应用部署平台相关推荐

  1. 微信小程序仿网易云音乐(使用云开发,提供源码)

    微信小程序仿网易云音乐(使用云开发,提供源码)!!!!!!!!!!! 源码: 链接:https://pan.baidu.com/s/1z_ZnRVbT4vjEENimi8yBQQ 提取码:u0o3 一 ...

  2. 【Python程序设计】基于Python Flask的网易云音乐歌单采集与可视化分析平台-源码经过调试,100%可运行

    基于Python Flask的网易云音乐歌单采集与可视化分析平台 项目获取 一.项目简介 二.开发环境 三.项目技术 四.功能介绍 五.功能结构 六.运行截图 项目获取 获取方式(点击下载):是云猿实 ...

  3. 牛X,网易开源了这个项目后,结果被山寨出了无数个网易云音乐APP,网友炸锅了!...

    个点击上方"Github中文社区",关注 看遍Github好玩的项目 第023期原创分享 作者:huber 大家好,我是hub哥 大家印象中的国产开源,也许更多关注的是BAT.京东 ...

  4. 牛X,网易开源了这个项目后,结果被山寨出了无数个网易云音乐 APP,网友炸锅了!...

    " 阅读本文大概需要 3 分钟. " 大家印象中的国产开源,也许更多关注的是BAT.京东.美团之类,其实还有一些大厂的开源,人们平时没太留意,比如小米.网易等等,他们的开源库里其实 ...

  5. “中国第一云算命科技集团”上市,网易云音乐能给投资者惊喜吗?

    "中国第一云算命科技集团"上市,网易云音乐能给投资者惊喜吗? 出品 l 观点财经 作者 l 大钊 用颜色测性格.用名人区分左右脑.用职业辨别内外在,以上三个选项并非毫不相干,他们有 ...

  6. 15份PPT,透视网易云音乐/严选/新闻/游戏背后的AI实践(合集下载)

    在最近一次[网易TALK-网易AI大会]内部技术分享会上,网易数帆.云音乐.严选.传媒.有道.Lofter.智企.伏羲等多个业务的人工智能大咖,共同分享AI算法和系统在网易各个业务领域的落地实践和思考 ...

  7. 网易云音乐的前端基础设施是如何优雅地走向统一的

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 作者|葛星 编辑|黎安 网易云音乐(以下简称"云音乐")的前端团队大概在 4 年前初具规模,4 年多的快速发展过程当中 ...

  8. 逐渐“狗化”!网易云音乐控诉酷狗像素级抄袭,酷狗高管反击...

    今日上午,网易云音乐官微发布<网易云音乐:关于给酷狗音乐相关团队申请年终奖励的建议>一文,控诉酷狗抄袭网易云音乐"一起听"."云贝推歌"两大功能. ...

  9. 大话云时代rac_“音乐隐士”沈以诚:他在网易云音乐为什么这么火?

    "介绍一下,沈以诚,他是我的宝藏男孩啊." 在网易云音乐.知乎.微博等关于原创音乐人沈以诚的话题中,出现频率最高的两个词汇是"宝藏男孩"和"男友音&q ...

最新文章

  1. Max_user_connections 与Max_connections 与max_connect_errors
  2. 2017年全球光伏需求有望首次突破100吉瓦
  3. HUAWEI视讯技术学习笔记(转载)
  4. 【鸿蒙 HarmonyOS】Ability 简介 ( 简介 | 创建应用 | Page Ability 生命周期 )
  5. java 递归 堆栈_尾递归函数仍在Java吹堆栈
  6. java压缩传输gzip_服务器使用Gzip压缩数据,加快网络传输(Java 例子)
  7. git-osc自己定义控件之:CircleImageView
  8. UNIX哲学之我的实践【1】
  9. 解决idea使用jdbc连接数据库失败的方法(针对驱动导入失败)
  10. 【Oracle】并行等待之PX Deq Credit: send blkd
  11. Centos6.X升级至Centos7.2升至Centos7.9详细步骤和踩过的坑(升级者必看~)
  12. RK3399调试支持以太网
  13. 双光子荧光成像_为什么双光子成像如此重要?
  14. python经典编程题分别取个位十位百位
  15. leaflet 导出图片,打印图片(A4横版或竖版)
  16. uClinux移植概述
  17. 用python将多张图片拼接成一张
  18. Python中的面向对象编程练习
  19. 工业交换机的工作原理
  20. 数据看板/商业智能分析仪表盘

热门文章

  1. 加密模式介绍(ECB、CBC、PCBC、CFB、OFB、CTR)
  2. jenson nano对YoloV5进行部署以及TensorRT加速
  3. 教育期刊《中学生物教学》杂志简介及投稿要求
  4. 我的前半生之人物关系图
  5. mysql清空数据库中所有表数据_清空mysql数据库所有表数据
  6. Flexsim-查找货架上指定货格的货物案例
  7. 队列和栈是什么,列出它们的区别?
  8. linux将中文语言改成英文版,将Linux中文语言修改成英文的具体操作方法及报错解决...
  9. android 丢帧率测试,Android流畅度测试
  10. 不动的大图书馆 第一期