Exactly one year ago today, we unveiled the Crossplane project to the world. We are simply thrilled with the reception in the ecosystem and the thriving community of adopters and contributors that has steadily been building around it. As one of the founders of the project, as well as the owner of both the first commit and the first star on the repository (a fact I am sure to remind everyone of often), I wanted to take a little retrospective look back over the last year and celebrate all the amazing progress we've made as a community.
The founding contributors to Crossplane have their roots in the cloud native ecosystem from also being the founders of the Rook project, an open source storage orchestrator for Kubernetes in the CNCF Incubator with a plan for fully graduating by early next year. Rook is excited to hopefully join the prestigious company of other great cloud native projects such as Kubernetes itself, Prometheus, Envoy, and others.
Conception of the Multi Cloud Control Plane
From the hands on experiences of being very plugged in and active in the Kubernetes ecosystem, we had a front row seat to watch and participate in some of the foundational concepts of Kubernetes as they were conceived and matured. It started to become very clear that the control plane and machinery in Kubernetes was really onto something and it would have practical application and usage outside of just managing resources inside of the cluster, like pods and nodes. Coupled with the rapid maturity of the Kubernetes extensibility story with Custom Resource Definitions (CRDs), the timing was perfect to layer on top of the amazing work from Kubernetes and build a control plane that went beyond a single cluster.
The project began with a ton of discussions and white boarding to work through not only the system architecture but the user experience we wanted to enable as well. We felt strongly that any leap forward in technology would only have value and gain adoption if it actually solves problems and makes life easier for its intended audience. It was a primary goal early on to provide a strong separation of concerns between infrastructure owners and application developers. We wanted developers to be able to provision the infrastructure they need to run their applications in an on-demand way, while balancing the very real need of infrastructure owners to define best-practice configurations and set policies that enable application developers to self-service.
This idea of separation of concerns, along with a declarative configuration experience, active reconciliation, and dynamic provisioning of resources, all across multiple clouds and environments, was captured in the original vision document that was circulated amongst industry leaders for early feedback in 2018. With enthusiastic responses coming in, it was clear that something like Crossplane was needed to create a more open cloud that would help level the playing field for the open source community and the industry at large.
Application Portability with Cloud Service Provisioning
One of the first areas of focus for our efforts was two-fold:
- On-demand provisioning of cloud provider managed services from
kubectl
- Portable abstractions for commonly available managed services
This has always been at the heart of the project and we delivered on this in an early preview form with the very first v0.1
release. In addition to being able to provision and manage popular services in the major cloud providers, we put forth an effort at defining a set of common abstractions for these services that would be portable across clouds. Kubernetes itself comes with a set of abstractions, such as pods and volumes, that enable application portability by eliminating the need for an application to know the specific details about the environment it is running in. We thought this was a powerful idea and should be extended to all new types of services, such as databases, caches, buckets, and even Kubernetes clusters themselves.
Over time, in subsequent releases, we have continued to add support for more services and more cloud providers. Some of these services will be genuinely unique as they only exist as an offering by a single cloud provider, but wherever possible we are committed to defining common abstractions that allow applications to consume these services from any cloud without having to change at all. This is true application portability that Crossplane has treated as a core tenant of the project.
Control Plane Extensibility
Just like Kubernetes itself has established an extensibility story that allows users to define their own types and run their own controllers, we established an extensibility story for Crossplane as well. Kubernetes has been referred to many times recently as a platform for building platforms, and since Crossplane is built on Kubernetes, we are taking this idea even further.
We call the unit of extensibility in Crossplane a "Stack" and it allows users to essentially teach the multi cloud control plane to manage new clouds and services of their choosing. We went into a lot of details around how this works and the interesting use cases in a previous blog post for v0.3
Since the addition of Stacks in Crossplane, the community has been empowered to start managing all sorts of new resources, such as Packet, CloudScale, and Rook services as well. We are really excited to see this set of community driven integrations with Crossplane continue to grow.
Multi Cloud Continuous Deployment
Having a kubectl
experience to deploy and manage all of your applications, as well as their infrastructure and resources, is great in order to manually provision your environments when you need to. But isn't the point of software to automate our tasks and make our lives easier? In the last couple releases, we made significant investments in the control plane to enable new CI/CD scenarios. This enables a single source of truth, and a configuration and infrastructure as code approach to managing your environments. Simply describe your applications and infrastructure in a declarative way in a Git repository and Crossplane can be used to continuously deploy new changes to your environments upon every commit.
While running live services as part of a small team in a start-up, I've personally had my eyes opened to the wonders of a GitOps style continuous deployment process. This effort to support configuration and infrastructure as code, and to support continuous deployment across multiple clouds and environments is really exciting to see and a big step forward for the Crossplane project as a whole.
Developer Experience and a Solid API
Similar to our initial goal of providing a great experience for users of Crossplane, we have always wanted to ensure that we deliver on a great experience for developers building solutions on Crossplane as well. In the very beginnings of the project, the only way to add new functionality to Crossplane was to write new full fledged controllers in the Go programming language and merge them into the main Crossplane code base. After going through the exercise of enabling out-of-tree Stacks to be built and published by anyone, the barrier to entry for integrating with Crossplane became lower, but we can keep driving it even lower than that.
Instead of having to be well versed in Go and Kubernetes, we think there should be a more declarative approach where you can describe the integration of new services and clouds that you want with Crossplane instead of having to write code to do that. Be on the lookout for new "no code" and "low code" ways of easily extending Crossplane that offer a great developer and user experience.
Some new scenarios and functionality in the multi cloud control plane are still better served by having full expressiveness and power of a complete programming language, so Go based controllers aren't going anywhere. We've also made significant investments into a runtime framework, API patterns, and best practices to make an awesome developer experience for full controllers too, and we will continue making investments there.
Get involved!
After 1 year of excitement and growth, we have our sights set on even higher goals for the next year. There are many different ways to get involved in the Crossplane project, both from the user side and the developer side. Please join us in helping the project continue to grow on its way to a stable v1.0 release over the next year!