Cloud Native 9 min read

How OAM Simplifies Kubernetes API Complexity for Cloud‑Native DevOps

This article explains how the Open Application Model (OAM) addresses the inherent complexity of the Kubernetes API by introducing an application‑centric resource model, separating developer and operator concerns, and providing a portable application abstraction that enables more efficient cloud‑native DevOps workflows.

Alibaba Cloud Native
Alibaba Cloud Native
Alibaba Cloud Native
How OAM Simplifies Kubernetes API Complexity for Cloud‑Native DevOps

Background

Alibaba started container work in 2013 with a custom LXC‑based engine (T4) and later built an internal orchestration layer called Sigma. By 2018 Sigma was made compatible with the Kubernetes API, and by the end of 2019 most Alibaba workloads ran on Kubernetes, demonstrating scalability during the Double‑11 event. Developers found the native Kubernetes API difficult to use.

Why the Kubernetes API is considered complex

1. Lack of an application‑centric resource model

Kubernetes only exposes low‑level primitives (Pod, Service, PersistentVolume, etc.). Users must manually combine them to express high‑level intents such as auto‑scaling, monitoring, or ingress, which makes application‑level reasoning hard.

2. No separation of development and operations concerns

The same API object mixes fields required by developers (container image, ports, liveness probes) with fields required by operators (replica count, update strategy, storage class). This all‑in‑one design increases cognitive load for end‑users.

3. Absence of a portable application abstraction

Kubernetes defines how to use underlying resources but provides no standard way to describe an application's operational traits (e.g., scaling policy, ingress) that can be reused across environments.

Open Application Model (OAM)

OAM is an open standard co‑created by Alibaba and Microsoft. It introduces a top‑level Application object that composes three core concepts:

Component : a reusable service unit such as a microservice, database, or managed cloud service.

Trait : operational features (autoscaling, ingress, logging, etc.) that can be attached to a Component.

ApplicationConfiguration : a binding that assembles Components and Traits into a concrete deployable instance.

In practice, developers author Component specifications, operators attach Traits, and an OAM runtime translates the ApplicationConfiguration into native Kubernetes resources (Deployments, Services, HorizontalPodAutoscalers, Ingress, etc.).

How OAM addresses the three Kubernetes problems

Provides an application‑centric abstraction that hides low‑level infrastructure details.

Separates responsibilities: developers focus on Component definitions, operators on Traits, and platform engineers on the underlying runtime.

Builds on Kubernetes while offering a portable application model, enabling the same ApplicationConfiguration to run on any OAM‑compatible platform.

Reference implementation

The OAM specifications are implemented in the open‑source project Crossplane ( https://github.com/crossplane/crossplane). Crossplane defines extensible workloads such as ContainerizedWorkload and supports additional workloads (e.g., FaaS) and traits (e.g., CronHPA). Users can extend Crossplane by adding custom ResourceDefinitions that map to new Component or Trait types.

Key technical steps to adopt OAM

Install the OAM runtime (e.g., Crossplane) into a Kubernetes cluster:

kubectl apply -f https://raw.githubusercontent.com/crossplane/crossplane/master/install.yaml

Define a Component (or use an existing workload type). Example:

apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:
  name: web-app
spec:
  workload:
    apiVersion: core.oam.dev/v1alpha2
    kind: ContainerizedWorkload
    spec:
      containers:
      - name: web
        image: nginx:1.19
        ports:
        - containerPort: 80

Create a Trait definition for autoscaling:

apiVersion: core.oam.dev/v1alpha2
kind: Trait
metadata:
  name: autoscale
spec:
  workloadRef:
    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
  spec:
    minReplicas: 2
    maxReplicas: 10
    metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 80

Compose an ApplicationConfiguration that binds the Component and Trait:

apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
metadata:
  name: web-app-config
spec:
  components:
  - componentName: web-app
    traits:
    - trait:
        apiVersion: core.oam.dev/v1alpha2
        kind: autoscale

Apply the ApplicationConfiguration; the OAM controller generates the underlying Deployment, Service, and HPA resources automatically.

Conclusion

OAM standardizes the description of cloud‑native applications, separates development and operations concerns, and provides a portable abstraction that runs on any Kubernetes‑compatible platform. The open‑source Crossplane implementation demonstrates how OAM can be used to build a modular, Lego‑like PaaS stack.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

KubernetesdevopsOAMApplication Model
Alibaba Cloud Native
Written by

Alibaba Cloud Native

We publish cloud-native tech news, curate in-depth content, host regular events and live streams, and share Alibaba product and user case studies. Join us to explore and share the cloud-native insights you need.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.