Announcing Crossplane v1.0 - the Cloud Native Control Plane

Crossplane has now officially reached version 1.0 with the ability to manage an extensive set of cloud services from the Kubernetes API and compose them into configuration blueprints to define your own cloud platform  – all without writing code. It’s been an amazing year for the Crossplane community with tons of momentum and engagement as we collectively build towards an API-centric Control Plane future!

We're excited to announce the v1.0 release of Crossplane with final v1 APIs, leader election, Prometheus metrics for all binaries, enhanced platform configuration support and more!

We celebrated the v1.0 release today at Crossplane Community Daytoday with an amazing lineup including Kelsey Hightower, Joe Beda, Brendan Burns, Bassam Tabbara, Brian Grant, and more -- right after Crossplane turned 2 years old earlier this month! Checkout the YouTube replay videos if you couldn't make it!

Crossplane is a CNCF project -- founded by the creators of Rook which became a graduated CNCF project earlier this year alongside Kubernetes itself, Prometheus, and Envoy. The community has rallied around Crossplane with diverse membership from AWS, Microsoft, Alibaba Cloud, RedHat, Equinix, IBM Cloud, Accenture, VSHN, Akirix, and more -- with IBM Cloud officially joining the Crossplane Community today adding support for over 85 IBM Cloud services that can now be composed into your own cloud APIs with Crossplane!

With over 10M+ downloads, 3,300+ GitHub stars, and 1,000+ Slack members it’s an exciting time to be part of the growing Crossplane community and there have been a ton of contributions we’d like to recognize. Community members have stepped up to be maintainers of sub-projects like crossplane/provider-aws that supports 3x more AWS cloud services vs. last year and lots more on the way!

We’re excited about how the community benefits from a converged effort around Crossplane and the joint work to adapt the AWS ACK and Azure ASO codegen pipelines to emit native Crossplane resources plus the use of stateless Terraform providers to accelerate coverage for the Long Tail -- targeting 100% Crossplane Provider coverage for all clouds and cloud services.

Roll your own PaaS with Crossplane

Provisioning the cloud services your apps need directly from Kubernetes and with GitOps workflows and Velero backup/restore compatibility is one of the core use cases Crossplane supports.

Furthermore using Crossplane as an API-centric Control Plane to provision and manage complete platform Configurations like the open source Multi-cloud Kubernetes Reference Platform enables you to deploy complete environments with clusters, networking, security, and a catalog of cloud services for your app teams to self serve and deploy their apps faster.

XRDs and Compositions

CompositeResourceDefinitions (XRDs) let you define your own cloud APIs with a simple API schema that generates two CRDs:

  • composite resource (XR) kind - e.g. CompositePostgreSQLInstance
  • composite resource claim (XRC) kind - e.g. PostgreSQLInstance
apiVersion: apiextensions.crossplane.io/v1alpha1
kind: CompositeResourceDefinition
metadata:
  name: compositepostgresqlinstances.aws.platformref.crossplane.io
spec:
  claimNames:
    kind: PostgreSQLInstance
    plural: postgresqlinstances
  group: aws.platformref.crossplane.io
  names:
    kind: CompositePostgreSQLInstance
    plural: compositepostgresqlinstances
  versions:
  - name: v1alpha1
    served: true
    referenceable: true
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              parameters:
                type: object
                properties:
                  storageGB:
                    type: integer
                required:
                  - storageGB
            required:
              - parameters

The API schema is the same for the XR and XRC kinds and is passed down from the XRC to the XR and into the Composition where it is mapped onto the composed resources using a patch overlay, in this case onto a DBSubnetGroup and an RDSInstance.

apiVersion: apiextensions.crossplane.io/v1alpha1
kind: Composition
metadata:
  name: compositepostgresqlinstances.aws.platformref.crossplane.io
spec:
  compositeTypeRef:
    apiVersion: aws.platformref.crossplane.io/v1alpha1
    kind: CompositePostgreSQLInstance
  resources:
    - base:
        apiVersion: database.aws.crossplane.io/v1beta1
        kind: DBSubnetGroup
        spec:
          forProvider:
            region: us-west-2
            description: An excellent formation of subnetworks.
          reclaimPolicy: Delete
      patches:
...
    - base:
        apiVersion: database.aws.crossplane.io/v1beta1
        kind: RDSInstance
        spec:
          forProvider:
            region: us-west-2
            dbInstanceClass: db.t2.small
            engine: postgres
            engineVersion: "9.6"
            skipFinalSnapshotBeforeDeletion: true
          reclaimPolicy: Delete
      patches:
        - fromFieldPath: "metadata.uid"
          toFieldPath: "spec.writeConnectionSecretToRef.name"
          transforms:
            - type: string
              string:
                fmt: "%s-postgresql"
        - fromFieldPath: "spec.parameters.storageGB"
          toFieldPath: "spec.forProvider.allocatedStorage"

The XRD defines a custom cloud API for a PostgreSQLInstance that your teams can provision with kubectl that will be satisfied with a Composition that composes a DBSubnetGroup and RDSInstance.

Multiple Compositions can be used to offer classes-of-service for each API, while providing a consistent API across environments.

Accelerating Crossplane Provider Coverage

We’re excited about how the community benefits from a converged effort around Crossplane and service operators like AWS ACK and Azure Service Operator (ASO) who are adapting their codegen pipelines to emit native Crossplane resources for provider-aws and provider-azure, so the cloud providers can own the respective generated Crossplane resources -- and you can use Crossplane to compose and publish your own infrastructure abstractions to the k8s API without writing code.

Crossplane Resource Model (XRM)
We love the Kubernetes Resource Model (KRM) and what it has done for open source control planes, and we’ve found that the Crossplane community benefits from an even more opinionated API - we think of this as the Crossplane Resource Model, or XRM.

Under this superset of the KRM things like credentials, status conditions, deletion policies, and references to other resources work the same no matter which provider you use. This prevents users having to build subtly different mental models (and software!) when they need to work with multiple providers - for example pairing provider-gcpwith provider-sql, or provider-helm.

AWS ACK code generation of Crossplane provider-aws resources
The AWS ACK codegen of Crossplane provider-aws resources has been spearheaded by @jaypipes and @muvaf to emit native Crossplane resources that shipped in the Crossplane provider-awsv0.15.0 release, including 12 new API Gateway managed resources generated by ACK.

This greatly accelerates AWS provider coverage for a total of 56 AWS cloud services supported in Crossplane provider-aws and more on the way!

Azure ASO code generation of Crossplane provider-azure resources
The Azure ASO codegen of Crossplane provider-azure resources has been driven by @matthchr @Dave_Fellows @kasey and the NZ team (@babbageclunk @theunrepentantgeek @porges @frodopwns).

Checkout the latest work in progress here!

Accelerating Crossplane Provider coverage for the Long Tail
To accelerate support for cloud providers that don't have an open source codegen pipeline, @kasey is leading an effort to generate Crossplane providers on top of the stateless Terraform providers.

Checkout the early set of generated resources here!

Towards 100% coverage of all cloud and cloud services
These are major milestones towards 100% Crossplane provider coverage of all clouds and cloud services in Crossplane and we’re excited about all the community involvement to build Crossplane providers:

Checkout the live discussion in the Crossplane #providers Slack channel and say hi, we’d love to hear from you!

Amazing community momentum and engagement!

The growth of the community and convergence around Crossplane as an API-centric control plane for application and infrastructure management has been amazing to witness. There are too many community contributions to mention all of them but we’ll do our best to cover the highlights. Many thanks for everyone’s efforts and hard work bringing Crossplane to v1.0 and growing an ecosystem around it!

Auto-generated API Documentation

Crossplane uses doc.crds.dev created by @hasheddan, to crawl GitHub repos and auto-generate API docs for any discovered CRDs. It’s really come a long way in a short time and recently got a huge UI upgrade from @RichiCoder1 including dark mode, collapsable sections, copy buttons, and more -- super cool!

Experimental multi-language support

Import into cdk8s and compose with your language of choice
AWS cdk8s lead @eladb has recently merged support to import CRDs from doc.crds.dev, that enables you to:

  • compose Crossplane resources in TypeScript, Python, or Java
  • generate YAML with cdk8s synth
  • apply it with kubectl.

crossplane-cdk8s to build your own cloud platform
crossplane-cdk8s is a new multi-language toolkit built on cdk8s to define CRDs and composite Kubernetes resources with all the benefits of using imperative code and libraries to build declarative resources. crossplane-cdk8s can statically generate CRDs and compositions in a CI pipeline -- and future versions will allow Compositions to run dynamically behind the Kubernetes API line with Crossplane and a cdk8s sidecar. The result is faster platform definition and app delivery using your languages of choice.

What's Next

  • Next / Under Consideration
  • Code Generation of Providers (100% coverage)
  • First-class multi-language support for Compositions and Configurations
  • Managed resources can accept an array of resource references for enhanced cross-resource reference (CRR) / dependencysupport.
  • Per-namespace mapping of IRSA and workload identity for finer grained infra permissions in multi-tenant clusters
  • Additional conversion strategies for XRDs with multiple versions of an XR
  • Conversion webhooks to support installing multiple API versions
  • CustomComposition support for use with cdk8s sidecar, TYY, and others

Checkout the following to learn more:

KubeCon NA 2020 - Recap

It was great to see everyone at KubeCon NA, if you missed the office hours are talks below checkout the replay videos on YouTube:

Wednesday Nov. 18th
Crossplane Project Office Hours - Join Here (Zoom)
Crossplane Maintainers
03:00 PM EST

Managing Apps and Cloud Resources with a Unified Approach in Kubernetes
Jianbo Sun, Alibaba & Jared Watts, Upbound
4:55 pm EST

Friday Nov. 20th
Building an Enterprise Infrastructure Control Plane on Kubernetes
Daniel Mangum, Upbound & Steven Borrelli, Mastercard
5:05 pm EST

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: