Crossplane v0.2 - Doubling the Supported Resources and Services

Since the unveiling and initial v0.1 release of Crossplane, the open source multi-cloud control plane, the community has been hard at work continuing to execute on the grand vision of enabling real-world applications and workloads to seamlessly run across all environments. Today, we are pleased to announce v0.2, the second official release of Crossplane! In this blog post, we will highlight some of the new features you'll find in this release. The full release notes can be found on the v0.2 release page.

Expanded Service and Resource Support

The biggest area of development focus for the v0.2 release was in adding support for new types of resources, such as PostgreSQL, Redis, and object storage. This new support is fully featured, meaning that you will be able to dynamically provision these new types of resources across all three major cloud providers (Amazon, Google, and Azure). You will be able to author your application in a single consistent way and run it in any of those environments without any changes, enabling the ability to dynamically choose the best fit environment whenever the application is deployed.

PostgreSQL

PostgreSQL is a powerful, open source object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance. Crossplane v0.2 adds a new portable postgresqlinstance.storage.crossplane.io abstraction to allow your application to express its need for a PostgreSQL database. Three new controllers have been added, one for each major cloud provider, that will dynamically provision an instance of PostgreSQL for your application, depending on which environment it has been scheduled to run on.

Object Storage

Similar to PostgreSQL, the latest release of Crossplane also adds a new bucket.storage.crossplane.io resource that represents a portable abstraction for object storage. Many applications make use of object storage since it has such versatility. Any arbitrary blob of data can be stored in a bucket for safe persistence and retrieval at a later time, so it is a great mechanism for storing all types of data. All the major cloud providers and many on-premises data solutions provide object storage, and with Crossplane v0.2 they are now more accessible by your application than ever before.

Redis

Redis is an open source in-memory data structure store, used as a database, cache and message broker. Many popular applications such as Twitter, Pinterest, and GitLab take advantage of the impressive speed of Redis to build highly responsive and performant experiences. With Crossplane's new rediscluster.cache.crossplane.io abstraction and controllers, your applications can also now have Crossplane dynamically provision and deploy a Redis instance to any of the supported environments.

Let's take a look at an example of how Crossplane can provision Redis for your application in a seamless and portable way, no matter which environment is chosen for the application to be deployed to. Similar examples could also be shown for the other newly supported resources, but we will focus on Redis in this blog post.

First, your application simply needs to express its general need for a Redis instance, with no knowledge or awareness needed about which particular Redis service will be provided for it at deployment time:

apiVersion: cache.crossplane.io/v1alpha1
kind: RedisCluster
metadata:
  name: cloud-rediscluster-claim
spec:
  classReference:
    name: cloud-rediscluster
  engineVersion: "3.2"

That is all the application author needs to worry about. The administrator, in the spirit of separation of concerns, provides a set of resource classes that can be selected from that provide the details and environment specifics for the Redis instance. For example, below is a resource class that defines Redis for Google Cloud Platform (GCP):

apiVersion: core.crossplane.io/v1alpha1
kind: ResourceClass
metadata:
  name: cloud-rediscluster
parameters:
  tier: STANDARD_HA
  region: us-west2
  memorySizeGb: "32"
provisioner: cloudmemorystoreinstance.cache.gcp.crossplane.io/v1alpha1
providerRef:
  name: gcp-cache-provider

This separation of concerns concept between the administrator and application author is very similar to the idea of dynamic provisioning with storage classes in Kubernetes. The key point here is that these environment details are completely transparent to the application author, their application doesn't need to change at all and it will just work in any environment.

Workload Scheduler

The workload scheduler received an initial implementation in v0.2 that allows remote clusters to be selected based on a criteria of matching labels. This gives the application author the ability to choose where their workload will be deployed and it is a critical first step on the path to delivering more advanced scheduling functionality and automation. In future releases, the scheduler will be able to automatically optimize the selected deployment environment for many attributes such as capabilities, availability, reliability, cost, regions, and performance while deploying workloads and their resources.

Generalized Resource Controller

In an effort to reduce development burden when supporting new types of resources and services, this release also includes a new generalized resource controller. This controller contains the functionality that is applicable to all resource controllers such as resource life-cycle management, binding claims to their resources, handler invocation, garbage collection, error handling, and more. Besides putting the DRY principle to work, we hope that this general resource controller makes it easier for new developers and resource providers to integrate with Crossplane and add new support for their services.

Engineering Quality

Finally, we made great advancements on improving our engineering quality, standards, and practices. We have started an effort around documenting the best practices for writing resource controllers in Crossplane, which helps improve overall reliability and performance of the software. On every pull request, we now have in place automated code coverage verification in addition to the automated test coverage that runs to verify the correctness of the code base. Each change must now include sufficient testing to pass the minimum code coverage bar, forcing all developers to think through and implement testing that will ensure their features do not regress as the code base evolves. Furthermore, each build undergoes a slew of automated linting checks provided by golangci-lint that ensure the code base stays consistent and adheres to best practices.

We expect this investment in engineering quality will lay a solid foundation for maintaining a great project as we continue delivering on the Crossplane vision.

What's Next

The next big focus for us will be on enabling real-world applications to be deployed and managed by Crossplane. As we expand the breadth of supported resources and services, the complexity and breadth of applications that can utilize Crossplane will also expand. We are very excited to soon deliver on support for GitLab, being able to deploy it across all three of the major cloud providers in a truly portable way.

Another important focus for Crossplane going forward will be continuing to build support for on-premises environments, for instance with Rook. Additionally, support will be added for hybrid deployments that span both the cloud and on-premises as well.

Crossplane is a community driven effort, so we encourage you to get involved and help us continue to build this exciting open source multi-cloud control plane. We'd love to see you join the community and get involved!

Keep up with Upbound

* indicates required