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 Day today 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.
- composite resource claim (XRC) kind - e.g.
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
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
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
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-aws v0.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
- apply it with
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.
- Next / Under Consideration
- Code Generation of Providers (100% coverage)
- First-class multi-language support for
- Managed resources can accept an array of resource references for enhanced cross-resource reference (CRR) / dependency support.
- 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:
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
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: