Code Monkey home page Code Monkey logo

velaux's Introduction



Make shipping applications more enjoyable.

Build status Go Report Card Docker Pulls codecov LICENSE Releases TODOs Twitter Artifact HUB CII Best Practices E2E status OpenSSF Scorecard

Introduction

KubeVela is a modern application delivery platform that makes deploying and operating applications across today's hybrid, multi-cloud environments easier, faster and more reliable.

kubevela

Highlights

KubeVela practices the "render, orchestrate, deploy" workflow with below highlighted values added to existing ecosystem:

Deployment as Code

Declare your deployment plan as workflow, run it automatically with any CI/CD or GitOps system, extend or re-program the workflow steps with CUE. No ad-hoc scripts, no dirty glue code, just deploy. The deployment workflow in KubeVela is powered by Open Application Model.

Built-in observability, multi-tenancy and security support

Choose from the wide range of LDAP integrations we provided out-of-box, enjoy enhanced multi-tenancy and multi-cluster authorization and authentication, pick and apply fine-grained RBAC modules and customize them as per your own supply chain requirements. All delivery process has fully automated observability dashboards.

Multi-cloud/hybrid-environments app delivery as first-class citizen

Natively supports multi-cluster/hybrid-cloud scenarios such as progressive rollout across test/staging/production environments, automatic canary, blue-green and continuous verification, rich placement strategy across clusters and clouds, along with automated cloud environments provision.

Lightweight but highly extensible architecture

Minimize your control plane deployment with only one pod and 0.5c1g resources to handle thousands of application delivery. Glue and orchestrate all your infrastructure capabilities as reusable modules with a highly extensible architecture and share the large growing community addons.

Getting Started

Documentation

Full documentation is available on the KubeVela website.

Blog

Official blog is available on KubeVela blog.

Community

We want your contributions and suggestions! One of the easiest ways to contribute is to participate in discussions on the Github Issues/Discussion, chat on IM or the bi-weekly community calls. For more information on the community engagement, developer and contributing guidelines and more, head over to the KubeVela community repo.

Contact Us

Reach out with any questions you may have and we'll make sure to answer them as soon as possible!

Community Call

Every two weeks we host a community call to showcase new features, review upcoming milestones, and engage in a Q&A. All are welcome!

Talks and Conferences

Check out KubeVela videos for these talks and conferences.

Contributing

Check out CONTRIBUTING to see how to develop with KubeVela.

Report Vulnerability

Security is a first priority thing for us at KubeVela. If you come across a related issue, please send email to [email protected] .

Code of Conduct

KubeVela adopts CNCF Code of Conduct.

velaux's People

Contributors

barnettzqg avatar basuotian avatar binaryhb0916 avatar chivalryq avatar dependabot[bot] avatar fogdong avatar ghostbaby avatar hanxie-crypto avatar hongchaodeng avatar iambocai avatar jiaxiaolei007 avatar king-jam1 avatar mujinhuakai avatar neerajgartia21 avatar nuclearwu avatar resouer avatar sunny0826 avatar tclxpeng-xin avatar wangbow avatar wangyikewxgm avatar wangyuan249 avatar weiy730 avatar wonderflow avatar wzjgo avatar xamast avatar xianyue390348 avatar yangsoon avatar yikuaibro avatar zhiyu0729 avatar zuoningz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

velaux's Issues

[Feature][Dashboard] All Dashboard features implementation follow-up

New Vela control plane implementation plan

We are trying to rewrite the APIServer based on the new design.

Why rewrite?

  • The users who want to adopt this can't accept an APIServer that stores data in local environment or relies on k8s APIServer directly. Instead, all the data should be stored in a DB like MySQL.
  • The previous code is tightly coupled with the Vela repo and refactoring work might be time-consuming.
  • We have a tight schedule to work out a PoC quickly.
  • I don't think anyone has adopted the old APIServer yet.

As a starting point, we will implement the Catalog API first. That includes:

  • /catalogs/<catalog> for CRUD of catalog resources
  • /catalogs/<catalog>/sync to scan the catalog repo and store necessary information in DB.
  • /catalogs/<catalog>/packages and its child APIs for package resources. This might depends on the sync API.

Future plan with KubeVela repo:

  • We will merge this back to the main repo after the PoC is done.
  • The old APIServer will be deprecated.
  • The CLI will be rewritten as well.
  • The Dashboard is reusable but might need a little tweak to adopt the new API.

Support environment-based application deployment

As part of the UX improvement roadmap, we got some user feedback to support the following scenarios:

  • Users want to define base application template and add patches based on environment. For example, in dev environment users would use ephemeral disk, while in prod environment use persistent volumes.
  • Users want to define environments as the shared-bases for applications. For example, applications might need shared definitions, secrets, health checks, network gateways, etc.

To support the above scenarios, we will add the following concepts:

  • AppTemplate that defines the template base as well as the env-based patches:

    name: example-app-template
    
    base: # the base template
      components:
        - name: backend
          settings:
            cmd:
              - /bin/myservice
          traits:
            - name: logging
              properties:
                rotate: 1d
    patch: # kustomize-style overlay patch to base template based on env matching
      - envs:
          - dev # the name of the Environment
        components:
          - name: backend
            settings:
              image: dev/myimage
            traits:
              - name: scaler
                properties:
                  replicas: 1
      - envs:
          - prod-beijing
          - prod-shenzhen
        components:
          - name: backend
            settings:
              image: production/myimage
            traits:
              - name: scaler
                properties:
                  replicas: 10
  • Environment that defines a shared-base for applications:

    name: prod
    
    clusters:  # deploy to the following clusters
      - prod-cluster
    
    secrets: # The secrets that will be created for applications if not existed.
      - name: redis
        data:
          url: redis-url
          password: redis-password
    
    definitions: # The definitions that will be created for applications if not existed.
      - type: Component
        name: function
        source:
          git: catalog-url
          path: pacakge/function
      - type: Trait
        name: logging
        source:
          git: catalog-url
          path: package/logging

    Note: we will define a definition catalog/package format: https://github.com/hongchaodeng/catalog-example

With the above concepts, the user story goes as:

  • The operations/admin team sets up environments first
  • The developer users prepare app templates and individual patches for each environment that will have apps to deploy to.
  • Users choose a template, then choose an environment, and deploy!
    • velacp will render the final Application based on the template and env
    • velacp will prepare the necessary secrets, definitions in the environment for the applications
    • The Application can use any of the definitions, secrets in this env.
Applicaton deployment workflow:

Env -> Controller -> (Secrets + Definitions)
AppTemplate -> velacp -> Application -> Controller

Notes:

  • AppTemplate will be implemented in velacp. Environment will be implemented as a CRD.

Umbrella features for KubeVela Dashboard

Application

detail

create

Component

Workloads/Traits

Create grpc services

grpc provides an easy way to build services. More specifically, it makes building client tools easier and generates OpenAPI/swagger definitions automatically. For exposing RESTful endpoints, there is a grpc-gateway to do that.

Implement Catalog Package Install

See this modules.yaml example.

For Vela 1.0 we will support:

  • native module, aka raw k8s yaml, in both url and relative path cases.
  • helm remote repo

For now the installation will be handled on the server side. After Vela 1.0 we will migrate to CLM and implement the full set of features in the controller component.

Create Cache interface

We should have a cache interface to cache data from the underlying datastore (e.g. MySQL database)

Use mongodb as backend instead of MySQL

Currently the ORM tool like gorm needs adding custom tags for better integration. But protobuf doesn't support custom tags as discussed in this issue.

The above is the main reason. Additionally, mongodb has great golang client and easy to bootstrap experience.

MySQL is known to be better when data volume is large and query is complicated. We don't have that requirements anyway.

Add official docker image

  • add velacp dockerfile and ui dockerfile
  • add official docker image with gitlab ci

I can help if needed

Create datastore interface

We should have a unique datastore interface for data access layer.
An example:

type DataStore interface {
	// Find finds the documents matched given criteria.
	Find(ctx context.Context, kind string, opts ListOptions) (Iterator, error)
	// Get gets one document specified with ID, and unmarshal it to typed struct.
	// If the document can not be found in datastore, ErrNotFound will be returned.
	Get(ctx context.Context, kind, id string, entity interface{}) error
	// Create saves a new entity to the datastore.
	// If an entity with the same ID is already existing, ErrAlreadyExists will be returned.
	Create(ctx context.Context, kind, id string, entity interface{}) error
	// Put saves the entity into the datastore with a given id and kind.
	// Put does not check the existence of the entity with same ID.
	Put(ctx context.Context, kind, id string, entity interface{}) error
	// Update updates an existing entity in the datastore.
	// If updating entity was not found in the datastore, ErrNotFound will be returned.
	Update(ctx context.Context, kind, id string, factory Factory, updater Updater) error
	// Close closes datastore resources held by the client.
	Close() error
}

UX Improvement Roadmap

What's the background? KubeVela controller provides the engine to encapsulate resources, deploy applications, and handle some of basic application operations (health, logs, rollout). But on top of that users still need to go a few manual steps to setup the platform and deploy applications.

What's the proposal? Since v1.0 is released, the API is stable. For the next steps, we are going to improve user experience with KubeVela. There is still some gap between what the platform provides and how people use it. We need automate as many steps to fill the gap as possible.

The baseline is that we assume users should use dashboard as much as possible. On top of that, it should provide end-to-end solutions to deploy and operate users' applications.

How do we define an end-to-end solution? It means automation and ease of use. Automation means if a step could be automated, we should handle it in dashboard/backend. Ease of use means if users need to manually do something, e.g. install a package, they should only need to click a button instead of typing kubectl apply -f ...

Here's a list of items to do for current roadmap:

  • Cluster management
    • Install KubeVela and necessary dependencies
    • List comp/trait definitions
  • Application deployment
    • Step-by-step walkthrough the deployment config
    • Provide forms and documentation for parameters in the UI
  • Application operation
    • logs
    • metrics
    • health
    • trace
    • route
  • Revision/Traffic management + Progressive rollout
    • ✅ Bonus: The UI could provide approval gate button for canary check
  • Multi-cluster rollout
  • Environment managment
    • Application template should be provided as well to render based on environment
  • Capability catalog
  • Application catalog

[Brainstorm] Application Page

Now the application CRUD is finished, we need to show an application page when user clicks an app:

WX20210418-233621@2x

This is related to the "application operation" section in https://github.com/oam-dev/kubevela/issues/1495 . A few points I can think of to show in application page:

  • metadata
  • health
  • replica
  • logs menu
  • metrics menu

Any idea is welcome! Please share your thoughts and ideas on what to show up in the application page.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.