Crossplane v0.12 upgrades claims/classes to a more powerful composition approach, plus more AWS and GCP cloud service primitives

Introduced at v1alpha1 in the v0.10 release, Crossplane Composition is a more powerful and flexible form of the resource claims/classes approach it replaces. In v0.12, claims/classes are officially deprecated and you can now define your own platform abstractions with composite resources and publish them for teams to consume without writing any code. New Crossplane Provider releases add support for more cloud service primitives including GCP PubSub and AWS SNS, SQS, ELB, ACMPCA, and Route53.

It's been a busy start to summer for Crossplane with the v0.12 release officially deprecating claims/classes in favor of Composition, acceptance as a CNCF Sandbox Project, auto-generated CRD docs enhancements, plus new Provider releases that add support for more AWS and GCP cloud services!

If there are additional cloud services you'd like to see, please drop us a note in the Crossplane Provider repos on GitHub: AWS, GCP, Azure, or Alibaba!

We're also exploring options to code generate resource controllers using various metadata sources in addition to the hand-crafted controllers we have today. Checkout #262 to follow along with our progress or drop us a note in the new #providers channel on Crossplane Slack!

There's been a ton of community engagement on the upcoming Composition v1beta1 enhancements, the new Helm Provider being incubated in crossplane-contrib, plus many contributions especially on provider-aws -- thanks @janwillies, @enderv, @kferrone, @jbrawdy, @sahil-lakhwani, @arush-sal, @rachulchheda, @ajaykangare, @gauravgahlot and anyone we may have missed!

We'd love to see you at any of our upcoming virtual KubeCon talks August 17-19, so register now if you haven't already and checkout the schedule below!

Composition to replace claims/classes

As mentioned in the v0.10 release annoucement, Crossplane uses a class and claim model to publish and provision infrastructure resources using kubectl, similar to the PVC model in Kubernetes.

Crossplane previously supported a fixed number of claim kinds and provisioning a single managed resource per claim. Adding more managed resources required authoring Golang controllers using the Crossplane Services Developer Guide and using the Managed Reconciler from the crossplane-runtime.

While this significantly reduced the work to author robust controllers that reconciled external cloud services, it did not support:

  • Defining and publishing your own claim kinds.
  • Composing multiple resources for provisioning with a single claim.
  • Authoring your own platform abstractions in a low/no-code way.

The v0.11 release added v1alpha1 support for composite resources, which removes all of these limitations while retaining the general usage model of classes and claims, which we'll continue to support during the transition to this new model.

Crossplane v0.12 officially deprecates resource claims and classes -- scheduled to be removed by the v0.15 release -- and adds some Composition enhancements and robustness improvements on the road to Composition v1beta1, which will be available later this year as part of the Crossplane v1.0 release.

Learn more about Composition in the Getting Started Guide and Composition Overview.

For a guided tour checkout Kelsey Hightower's keynote from Crossplane Community Day in May 2020, which shows an early version of Crossplane Composition in action with both kubectl and the Terraform Kubernetes Provider!

Auto Generated CRD Docs now support sorting by G/V/K

The Crossplane Provider API docs use a site called https://doc.crds.dev/ maintained by @hasheddan which automatically indexes all the CRDs for a given release. It's been recently updated to list and sort CRDs by Group / Version / Kind instead of filename which is super handy.

The recent provider-aws v0.11.1 release is up to 38 CRDs:

To look at an older release we can change the @version suffix like this: https://doc.crds.dev/github.com/crossplane/provider-aws@v0.10.0.

This shows 16 new CRDs were added in v0.11.1 since the last monthly provider-aws release -- a 70% increase in AWS cloud service coverage in 1 month!

More cloud services for AWS and GCP

New AWS resources in the provider-aws v0.11.1 release:

  • Certificate.acm.aws.crossplane.io/v1alpha1
  • CertificateAuthority.acmpca.aws.crossplane.io/v1alpha1
  • CertificateAuthorityPermission.acmpca.aws.crossplane.io/v1alpha1
  • Queue.applicationintegration.aws.crossplane.io/v1alpha1
  • Cluster.eks.aws.crossplane.io/v1beta1
  • NodeGroup.eks.aws.crossplane.io/v1alpha1
  • ELB.elasticloadbalancing.aws.crossplane.io/v1alpha1
  • ELBAttachment.elasticloadbalancing.aws.crossplane.io/v1alpha1
  • IAMGroup.identity.aws.crossplane.io/v1alpha1
  • IAMGroupPolicyAttachment.identity.aws.crossplane.io/v1alpha1
  • IAMGroupUserMembership.identity.aws.crossplane.io/v1alpha1
  • SNSSubscription.notification.aws.crossplane.io/v1alpha1
  • SNSTopic.notification.aws.crossplane.io/v1alpha1
  • Cluster.redshift.aws.crossplane.io/v1alpha1
  • HostedZone.route53.aws.crossplane.io/v1alpha1
  • ResourceRecordSet.route53.aws.crossplane.io/v1alpha1

AWS resources promoted from v1alpha1 to v1beta1:

  • DBSubnetGroup.database.aws.crossplane.io/v1beta1
  • InternetGateway.ec2.aws.crossplane.io/v1beta1
  • SecurityGroup.ec2.aws.crossplane.io/v1beta1
  • Subnet.ec2.aws.crossplane.io/v1beta1
  • VPC.ec2.aws.crossplane.io/v1beta1
  • IAMRole.identity.aws.crossplane.io/v1beta1
  • IAMRolePolicyAttachment.identity.aws.crossplane.io/v1beta1

New GCP resources in the provider-gcp v0.11.0 release:

  • Topic.pubsub.gcp.crossplane.io/v1alpha1

TBS#18: Live Coding the GCP Pub/Sub resource

Checkout TBS episode 18 to see @hasheddan and fellow Crossplane maintainer @muvaffakonus live code the Google Cloud Pub/Sub resource, that enables provisioning a new Pub/Sub topic using Crossplane.

They detail all the design decisions made along the way, which is a great complement to the Crossplane Services Developer Guide!

Beyond v0.12

  • Composition: to v1beta1 quality & community requested features
  • Versioning and upgrade support for all aspects of Crossplane
  • More v1beta1 API types for AWS, GCP, Azure, Alibaba, and more
  • Provider v1beta1 quality conformance doc and testing guidelines
  • Enhanced automated integration tests for GCP, AWS, Azure
  • Code generated providers (AWS, GCP, Azure, Alibaba, ...)
  • Crossplane Connector Agent - new pull model
  • Open Application Model (OAM) - support for traits, scopes
  • Expanded Rook support for additional in-cluster stateful types
  • Standalone mode allowing Crossplane to run in a single container
  • Continued focus on quality and reliability on the road to v1.0
  • More info: crossplane/roadmap.md, slides

KubeCon EU 2020 Talks & Office Hours

We'd love to see you at any of our upcoming virtual KubeCon talks, so register now if you haven't already and note all times in in Central European Summer Time (CEST)!

Monday, August 17
Crossplane Project Office Hours: Zoom
Crossplane Maintainers & Contributors
17:00 CEST

Tuesday, August 18
Anatomy of a Kubernetes Release: Success Through Team and Tools
Sascha Grunert, SUSE & Daniel Mangum, Upbound
13:00 CEST

Intro to Rook: Storage for Kubernetes
Jared Watts, Upbound & Alexander Trost, Cloudical
13:00 CEST

Kubernetes as a General Purpose Control Plane: Scaling on Kubernetes
Hasan Turken, Upbound
14:30 CEST

Towards a Standardized Application Definition Model for Kubernetes
Phil Prasek, Upbound & Sudhanva Huruli, Microsoft
17:45 CEST
Slides

Panel: App Management on K8s: The Good, the Bad and the Ugly
Matt Butcher & MacKenzie Olson, Microsoft; & Jian He, Alibaba
18:30 CEST

Wednesday, August 19
Standardizing Applications For the Cloud at a Global Scale
Jared Watts, Upbound & Lei Zhang, Alibaba
16:55 CEST

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:

Keep up with Upbound

* indicates required