horizon

module
v0.0.0-...-d125d34 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 8, 2024 License: Apache-2.0

README

license version Test Coverage

Horizon

English | 中文

Horizon is a cloud-native application Continues Delivery (CD) platform. Platform team can let the developers deploy their code and MiddleWares to cloud and kubernetes easily, efficiency and with best practice. Horizon is inspired by ArgoCD and AWS Proton.

horizon-platform

Why Horizon

  1. standardized : kubernetes is flexible and powerful, but it is complex. it's hard to let all the developers have a comprehensive understanding of kubernetes and practice best practice. so horizon introduce a template system to make the best practice under control, and also provide efficient delivery. For example, Platform Team can provide basic spec of resource tiny(0.5core, 512MB)、small(1core, 1GB), middle(2core, 4GB) etc. by default, not for the developer to select limit or request resource on common case.
  2. security and reliable :security and reliable is always a challenge. In Horizon, Horizon make every change of application durable, reversible and auditable. It's done with our best practice of GitOps. And Horizon introduce rbac&member system to let you have best practice on fine-grained permission control.
  3. multi-cloud : Horizon provide a consistent application platform to manage multi-cloud, hybrid cloud.
  4. infrastructure agnostic :horizon doesn't limit the kind of workload. the basic kubernetes workloads and self defined CR are all supported.
  5. efficiency :platform team can quickly make an end to end best practice workload delivery based on Horizon template.
  6. Production-Grade:Within NetEase Cloud Music about thousands of developer use horizon to deploy workload everyday.

Features

GitOps

In Horizon, Git is Used as the only "The Source Of Truth", Horizon stores template and all values in Git repository. Every change are durable, reversible and auditable, Including code, image, environment variables, resource spec, etc.

Horizon Template

Horizon Template is based on helm and jsonschema. The Platform Team can make the basic practice (including security, affinity, priority, resource, etc.) by default, and provide user a simple and uniform interface which is defined by jsonschema files. jsonschema is used for provide a user friend HTML form on the Horizon Based on react-jsonschema-form. It's highly Scalable and flexible to make your own best practice based on the simple template system.

RBAC & Member

Horizon Provide a RBAC & Member system Just like Gitlab. You can easily define your Own PlatForm Member and Role(Just like Kubernetes role and rolebinding). In our Practice, we Provide Role like PE, Owner, Maintainer, Guest. the Owner is binding with the Read(list pods, read all properties, etc.)/Write(deploy, builddeploy, restart, release, delete etc.) Permission, the guest just have the read permission.

Ease For Integration

Horizon Provide OpenAPI, AccessToken, Oauth2.0, IDP Connector, Webhooks. It makes easy to d integrate internal system.

Ease For use

We Also Provide Product Features, Like Template Management, Kubernetes Management, Monitoring Management, Environment Management. PlatForm Team can easily set up through the horizon web ui.

Architecture

arch

Horizon-Core

The Horizon Core Server is the Rest Server which export the OpenAPIs consume by the Web UI, CLI, and other systems. it also provides features like:

  • Kubernetes and environment Management
  • Template Management
  • PrivateToken,AccessToken Management
  • Group,application,cluster management
  • CI,CD Pipeline Management
  • WebHook Management
  • User and Member Management
  • IDP Management
Gitlab & ArgoCD
  • Gitlab: Gitlab store all the configs of an application, "The Only Source Of Truth" of an application.
  • ArgoCD: ArgoCD is our default GitOps Engine that sync Application Workloads from git repo to Kubernetes.
Tekton & S3
  • Tekton: the cloudnative pipeline used for our default ci engine, to auto build images from source.
  • S3: Completed Pipelines are restore to S3, you can use any of S3 Compatible Service like Mino or Aws S3 service and soon.
Grafana:

For convenient, we default integrate monitoring feature into Horizon. Just Config you Source Prometheus, Horizon will automatically retrieve the metric to show the Metric DashBoard on Horizon-Web.

MySql & Redis

For Store and Cache Basic meta Info, such like member, user, token, webhook, IDPs and soon.

FAQs

Horizon vs ArgoCD

ArgoCD is a great tool for the kubernetes platform team or users that familiar with kubernetes, actually Horizon use argoCD as the default GitOps engine. But we think it is not very user-friendly for the application developer team. We make Horizon more user-friendly by core features like group、member & rbac、 template and so on.

Horizon vs OpenShift

We think both Horizon and Openshift solve the same problem. They all give you the ability to build、deploy and run applications on kubernetes and cloud. But they looks fundamentally different, this mainly because openshift is more an extension and enhancement of kubernetes, but now horizon is aimed to be a continues delivery platform based on kubernetes and cloud.

Horizon GitOps

GitOps is a best practice of application delivery, Horizon Follow GitOps Best Practice. We use Git to make every change of application stable, reliable, secure, auditable and reversible.

Horizon Usage

Within NetEase Cloud Music, the platform team delivers a variety of service template to users based on Horizon, including webserver, serverless (Knative application), middleware etc. 700+ R&D make hundreds of build and deploy based on Horizon every day.

To start using Horizon

Contributions

We welcome contributions from the community! Here are some ways you can help make this project better:

  • Report bugs and request new features by opening an issue in our issue tracker.
  • Submit code contributions by opening a pull request. Before submitting, please make sure to follow our contribution guidelines and code of conduct. Development guide could help to debug horizon locally.
  • Improve documentation by suggesting changes or submitting pull requests.

Thank you to all of our contributors for helping to make this project a success!

Contact us

You can contact with us by the following ways:

  • Discussions

  • Slack

  • WeChat Group

    Add administrator wechat and you will be invited to join the group.

    wechat

Directories

Path Synopsis
cmd
lib
orm
q
s3
mock
lib/gitlab
Package mock_gitlab is a generated GoMock package.
Package mock_gitlab is a generated GoMock package.
pkg/application/gitrepo
Package mock_gitrepo is a generated GoMock package.
Package mock_gitrepo is a generated GoMock package.
pkg/application/manager
Package mock_manager is a generated GoMock package.
Package mock_manager is a generated GoMock package.
pkg/cd
Package mock_cd is a generated GoMock package.
Package mock_cd is a generated GoMock package.
pkg/cluster/code
Package mock_code is a generated GoMock package.
Package mock_code is a generated GoMock package.
pkg/cluster/gitrepo
Package mock_gitrepo is a generated GoMock package.
Package mock_gitrepo is a generated GoMock package.
pkg/cluster/manager
Package mock_manager is a generated GoMock package.
Package mock_manager is a generated GoMock package.
pkg/cluster/registry
Package mock_registry is a generated GoMock package.
Package mock_registry is a generated GoMock package.
pkg/cluster/registry/factory
Package mock_factory is a generated GoMock package.
Package mock_factory is a generated GoMock package.
pkg/cluster/tekton
Package mock_tekton is a generated GoMock package.
Package mock_tekton is a generated GoMock package.
pkg/cluster/tekton/collector
Package mock_collector is a generated GoMock package.
Package mock_collector is a generated GoMock package.
pkg/cluster/tekton/factory
Package mock_factory is a generated GoMock package.
Package mock_factory is a generated GoMock package.
pkg/git
Package mock_git is a generated GoMock package.
Package mock_git is a generated GoMock package.
pkg/group/manager
Package mock_manager is a generated GoMock package.
Package mock_manager is a generated GoMock package.
pkg/hook/handler
Package mock_handler is a generated GoMock package.
Package mock_handler is a generated GoMock package.
pkg/member/manager
Package mock_manager is a generated GoMock package.
Package mock_manager is a generated GoMock package.
pkg/member/service
Package mock_service is a generated GoMock package.
Package mock_service is a generated GoMock package.
pkg/pipelinerun/manager
Package mock_manager is a generated GoMock package.
Package mock_manager is a generated GoMock package.
pkg/rbac/role
Package mock_role is a generated GoMock package.
Package mock_role is a generated GoMock package.
pkg/tag/manager
Package mock_manager is a generated GoMock package.
Package mock_manager is a generated GoMock package.
pkg/template/manager
Package mock_manager is a generated GoMock package.
Package mock_manager is a generated GoMock package.
pkg/templaterelease/manager
Package mock_manager is a generated GoMock package.
Package mock_manager is a generated GoMock package.
pkg/templaterelease/output
Package mock_output is a generated GoMock package.
Package mock_output is a generated GoMock package.
pkg/templaterelease/schema
Package mock_schema is a generated GoMock package.
Package mock_schema is a generated GoMock package.
pkg/templaterepo
Package mock_repo is a generated GoMock package.
Package mock_repo is a generated GoMock package.
pkg/templateschematag/manager
Package mock_manager is a generated GoMock package.
Package mock_manager is a generated GoMock package.
pkg/user/manager
Package mock_manager is a generated GoMock package.
Package mock_manager is a generated GoMock package.
pkg/userlink/manager
Package mock_manager is a generated GoMock package.
Package mock_manager is a generated GoMock package.
pkg
cd
git

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL