Application

KubeVela revolves around cloud-native application delivery scenarios. The application delivery model behind it is Open Application Model, or OAM for short.

OAM allows end users to work with a simple artifact to capture the complete application deployment workflow with easier primitives. This provides a simpler path for on-boarding end users to the platform without leaking low level details in runtime infrastructure and allows users to fully focus on the application delivery itself.

alt

Every application deployment plan can be composed by multiple components with attachable operational behaviors (traits), deployment policy and workflow. It works in the following format:

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: <name>
  5. spec:
  6. components:
  7. - name: <component name>
  8. type: <component type>
  9. properties:
  10. <parameter values>
  11. traits:
  12. - type: <trait type>
  13. properties:
  14. <traits parameter values>
  15. - name: <component name>
  16. type: <component type>
  17. properties:
  18. <parameter values>
  19. policies:
  20. - name: <policy name>
  21. type: <policy type>
  22. properties:
  23. <policy parameter values>
  24. workflow:
  25. - name: <step name>
  26. type: <step type>
  27. properties:
  28. <step parameter values>

This Application entity will reference component, trait, policy and workflow step types which are essentially programmable modules that are maintained by platform team. Hence, this abstraction is highly extensible and can be customized in-place at ease.

  • Component: A Component defines the delivery artifact (binary, Docker image, Helm Chart…) or cloud service included in one application. As we will regard an application as a microservice unit, the best practice is to control one application only has one core service for frequent development, other components within this application can be dependencies such as database, cache or other middleware/cloud services, the maximum number of components within an application should under ~15.

  • Trait: Traits are management requirements of an artifact that can be declared with each Component. For example: scale and rollout strategy, persistent storage claim, gateway endpoint and so on.

  • Policy: Policy defines a strategy of certain aspect for application as to multi-cluster topology, configuration overrides, security/firewall rules, SLO and etc. It’s a bit similar with traits but take affects to the whole application instead of one component.

  • Workflow Step: Workflow step allows you to define every steps in the delivery process, typical steps are manual approval, partial deploy, notification.

The modules that make up the application are all extensible, they are defined by a bunch of programmable configurations called Definitions. Under the hood, KubeVela will glue and leverage Kubernetes API to drive the infrastructure capabilities. You can check the following picture to see their relationships:

alt

A package of OAM Definitions and Kubernetes CRD Controller is called an Addon. KubeVela has a large and growing catalog of addons to support modern application delivery, such as terraform for cloud resource provisioning, OCM for multi-cluster management, fluxcd for gitops, and etc.

With these addons, KubeVela provides a unified and good experience for developers to deliver modern application in a multi-cloud/hybrid-cloud environment.

Despite the efficiency and extensibility in abstracting application deployment, programmable (Infrastructure-as-Code) approach may lead to an issue called Infrastructure/Configuration Drift, i.e. the rendered component instances are not in line with the expected configuration. This could be caused by incomplete coverage, less-than-perfect processes or emergency changes. This makes them can be barely used as a platform level building block.

Hence, KubeVela is designed to maintain all these programmable capabilities with Kubernetes Control Loop and leverage Kubernetes control plane to eliminate the issue of configuration drifting, while still keeps the flexibly and velocity enabled by IaC.

  • Learn Definition concept to understand how the extension mechanism works.
  • View Architecture to learn the overall architecture of KubeVela.

Last updated on Aug 4, 2023 by Daniel Higuero