Today we’re excited to welcome Microsoft and Alibaba to the Crossplane community and announce that Crossplane is the Kubernetes implementation of the Open Application Model! With v0.11, you can install Crossplane into any Kubernetes cluster to manage cloud infrastructure, services, and applications using kubectl or any tool that works with the Kubernetes API.
Crossplane strives to be the best Kubernetes add-on to provision and manage cloud infrastructure, services, and applications using kubectl, GitOps, or any tool that works with the Kubernetes API. A huge part of this mission is arriving at an elegant, flexible way to model and manage cloud native applications. As founders of the Open Application Model (OAM) Microsoft Azure and Alibaba Cloud know this all too well. Today we’re excited to welcome Microsoft and Alibaba to the Crossplane community!
The path of cloud native apps from developer laptop into production requires collaboration across teams to build the app itself, deploy and manage the app and it’s infrastructure, and publishing infrastructure recipes that embody organizational best practices and security policies.
Today, multiple tools and management models must be glued together in deployment pipelines that are often fragile and error prone. Teams can find it difficult to collaborate in an effective way when aspects of an application are blurred, resulting in a lack of clear ownership and conflicts integrating changes. Requiring team members to master multiple tools, languages, and philosophies, while understanding the interactions and failure modes between them can significantly impede an organization’s ability to deliver applications efficiently.
Crossplane & OAM
The Crossplane and OAM communities share a team-centric philosophy and believe a strong separation of concerns combined with the proven Kubernetes declarative model is the best way to unify application and infrastructure management. Teams should be able to publish infrastructure recipes for applications to consume, define application components independent of infrastructure, and compose both into complete application configurations -- all using a declarative model that can be deployed with kubectl from app delivery pipelines or with GitOps workflows.
Over the last few months the OAM and Crossplane communities have collaborated on a new v1alpha2 version of the OAM specification that unifies the Crossplane and OAM approaches to managing infrastructure and applications. Key enhancements include: natively adopting Kubernetes Resource Model so any Kubernetes resource can be used as a first-class citizen in OAM, supporting “bring your own workload/trait” and embracing the Kubernetes Operator ecosystem etc. This essentially makes OAM the building block for creating any application centric platform on Kubernetes in a standardized approach.
Crossplane: the Kubernetes implementation of OAM
With this updated specification in place Microsoft and Alibaba have joined the Crossplane community and Crossplane is now the Kubernetes implementation of the Open Application Model. With Crossplane v0.11 you can use Crossplane and OAM together by installing the Crossplane helm chart into any Kubernetes cluster.
Our shared team-centric approach reflects individuals often specializing in the following roles:
- Infrastructure Operators - provide infrastructure for apps to consume
- Application Developers - build components of an application
- Application Operators - compose, deploy, and manage applications
This separation of concerns is core to Crossplane’s approach to infrastructure and application management, so team members can deliver value by focusing on what they know best.
Crossplane v0.11 support for OAM
With Crossplane v0.11, infrastructure operators can define and compose their own infrastructure resources with declarative YAML and publish them for applications to consume as Kubernetes custom resources (e.g. MySQLInstanceRequirement). These Crossplane resources can then be composed into OAM applications as a first-class kind of workload, resulting in Crossplane dynamically provisioning cloud services (Alibaba Cloud, Azure, AWS, GCP) and securely connecting them to the application.
With OAM, application developers define components that application operators may compose into application configurations, producing workloads. Application operators may optionally attach operational traits, like autoscaling, or network ingress, to the applications they compose. Support for OAM application scopes - a flexible way to group components around common operational behaviors such as health group, security policy, or API gateway - are under active development in Crossplane.
New OAM support in Crossplane v0.11 allows us to author the following OAM application:
---
apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:
name: example-containerized-workload
spec:
workload:
apiVersion: core.oam.dev/v1alpha2
kind: ContainerizedWorkload
metadata:
name: example-containerized-workload
spec:
containers:
- name: wordpress
image: wordpress:4.6.1-apache
env:
- name: WORDPRESS_DB_HOST
fromSecret:
name: example-mysql-secret
key: endpoint
- name: WORDPRESS_DB_USER
fromSecret:
name: example-mysql-secret
key: username
- name: WORDPRESS_DB_PASSWORD
valueFrom:
name: example-mysql-secret
key: password
ports:
- containerPort: 80
name: wordpress
---
apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:
name: example-mysql-instance
spec:
workload:
apiVersion: database.crossplane.io/v1alpha1
kind: MySQLInstanceRequirement
metadata:
name: example-mysql-instance
spec:
engineVersion: 5.6
writeConnectionSecretToRef:
name: example-mysql-secret
---
apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
metadata:
name: example-appconfig
spec:
components:
- componentName: example-containerized-workload
traits:
- trait:
apiVersion: core.oam.dev/v1alpha2
kind: ManualScalerTrait
metadata:
name: example-appconfig-trait
spec:
replicaCount: 3
- componentName: example-mysql-instance
In the above example an OAM application is composed from two components. The Wordpress developer publishes the components; one describing how a Wordpress container must be run and another describing Wordpress’s database needs - an instance running MySQL 5.6. The application operator composes these two components into an application by authoring an application configuration, attaching an operational trait that will ensure the application runs three replicas of the MySQL container.
A strong separation of concerns
The separation of concerns supported by Crossplane and OAM ensures that:
- Infrastructure Operators can compose infrastructure recipes as declarative YAML and publish them for applications to consume via the Kubernetes API, encapsulating best-practices and security policies.
- Application Developers can build application components without getting bogged down with infrastructure details or managing complex configurations across environments.
- Application Operators can compose OAM applications from application components and Crossplane infrastructure recipes, to deliver applications into production using kubectl in traditional pipelines or with GitOps workflows.
With Crossplane v0.11 now supporting the OAM specification, you can install Crossplane onto any Kubernetes cluster to provision and manage infrastructure, services, and OAM applications using kubectl, GitOps, or any tool that works with the Kubernetes API.
Thanks to everyone that helped bring the OAM and Crossplane communities together and we’re excited about our shared journey to bring standard application and infrastructure management to the Kubernetes API!
Beyond v0.11
- More v1beta1 API types for AWS, GCP, Azure, Alibaba, and more
- v1beta1 quality conformance doc and testing guidelines
- Enhanced support for publishing infrastructure abstractions
- Enhanced support for the Open Application Model
- Versioning and upgrade support for all aspects of Crossplane
- Enhanced automated integration tests for GCP, AWS, Azure
- Expanded Rook support for additional in-cluster stateful storage types
- Standalone mode allowing Crossplane to run in a single container or process
- Continued focus on reliability and production quality on the road to v1.0
Get involved!
We're excited to see the continual growth of the Crossplane community and would love for you to get involved. Whether you are a developer, user, or just interested in what we're up to, feel free to join us via one of the following methods: