Application Devs

A team-centric standard for building cloud native apps.

Open Application Model [OAM] describes a model where developers are responsible for defining application components.

Application Ops

While application operators are responsible for creating instances of those components and assigning them application configurations.

Infrastructure Operators

And infrastructure operators are responsible for declaring, installing, and maintaining the underlying services that are available on the platform.

Read the Spec

Check out Rudr for a Kubernetes implementation of the specification. ↓

Overview

Cloud-native development

Microservices Are Complicated.

  1. Developers have to spend more and more time on their app’s infrastructure tooling - images, registries, versioning, etc.
  2. Security, performance, and configuration concerns are becoming more blurred with the app development processes.
  3. Decisions about where you run your microservices can impact on how you configure and develop your app.

The OAM Way

A New Application Model

  1. Manage your apps like you manage your teams - with roles and scopes for apps, free of infrastructure.
  2. An opinionated workflow that separates the concerns of developers & operators, whilst providing flexibility and clarity.
  3. Runs anywhere - a unified approach that works across cloud platforms and edge devices.

OAM is platform-agnostic. Read the Intro doc for more background and user stories.

Examples




Example-1.yml

Create a component:


apiVersion: core.oam.dev/v1alpha1
kind: ComponentSchematic
metadata:
  name: helloworld-python-v1
spec:
  name: helloworld-python
  workloadType: core.oam.dev/v1alpha1.Server
  containers:
    - name: foo
      image: oamdev/helloworld-python:v1
      env:
        - name: TARGET
          fromParam: target
        - name: PORT
          fromParam: port
      ports:
        - type: tcp
          containerPort: 9999
          name: http
  parameters:
    - name: target
      type: string
      default: World
    - name: port
      type: string
      default: "9999"
          

Example-2.yml

Show a component and a config in one file:


apiVersion: core.oam.dev/v1alpha1
kind: ComponentSchematic
metadata:
  name: alpine-forever-v1
spec:
  workloadType: core.oam.dev/v1alpha1.SingletonServer
  parameters:
    - name: message
      type: string
      required: false
    - name: unused_integer
      type: number
      required: false
      default: 5678
  containers:
    - name: runner
      image: technosophos/alpine-forever:latest
      env:
        - name: FOO
          value: bar
          fromParam: message
        - name: UNUSED
          value: "1234"
          fromParam: unused_integer
---
apiVersion: core.oam.dev/v1alpha1
kind: ApplicationConfiguration
metadata:
  name: example-env-vars
spec:
  components:
    - name: alpine-forever-v1
      instanceName: example-alpine-forever
      parameterValues:
        - name: message
          value: Hello World
          

Implementation

Rudr

Rudr: A Kubernetes Implementation of the Open Application Model

github.com/oam-dev/rudr

Rudr takes an incremental approach to solving problems. The architecture is a set of plugins for Kubernetes which allow OAM specifications to be implemented and deployed on clusters with native APIs (you still use kubectl).

This allows app developers to focus on building OAM components, app operators to focus on operational capabilities through the OAM app config and infra operators to focus on Kubernetes. By leveraging the Open App Model, users now have a framework to define their apps on their Kubernetes clusters.

Currently, Rudr will leverage the defined trait to accomplish the task. This gives the freedom to use whatever underlying tool the user wants while providing a trait that focuses on the functionality and not the technology. In the future, Rudr might provide a set of default technologies to provide the functionality desired by a trait.

Community


Mailing List
https://groups.google.com/forum/#!forum/oam-dev
Dev Meetings
Bi-weekly (Starting October 22nd), Tuesdays 10:30AM PST
Meeting invite
zoom.us/j/623691799
Meeting notes
Notes doc
IM Channel
https://gitter.im/oam-dev/