- Explain why separate app and infra workflows cause friction.
- Introduce Crossplane’s core concepts and flow.
- Show how to define platform APIs with XRDs, map APIs to cloud and Kubernetes resources with Compositions, and expose those as developer-facing XRs.
Crossplane lets platform teams provide developer-friendly Kubernetes APIs (XRs) that create and reconcile both cloud-managed resources and Kubernetes resources from a single manifest — enabling true self-service.
- They write code and push it to Git.
- Argo CD deploys the application after a few minutes.
- To provision a database they switch to Terraform.
- They write HCL they’re not comfortable with and submit a change.
- The infra team reviews (2-day SLA) and runs a separate CI pipeline to apply the Terraform.
- After provisioning, the developer manually creates Kubernetes Secrets with connection strings.
- They push the secret reference to Git and wait for Argo CD to sync.


- App deployment runs in Kubernetes with Argo CD.
- Infrastructure runs in Terraform with a separate CI pipeline.
- The two systems are disconnected, creating manual handoffs and long SLAs.
- Single abstraction — one YAML to declare app + database + networking + security.
- Namespace isolation — developers operate in their namespaces with RBAC.
- Continuous reconciliation — platform automatically detects drift and self-heals all resources, cloud and Kubernetes.



- Platform team defines the developer API by authoring an XRD (CompositeResourceDefinition).
- Platform team writes one or more Compositions that map the API fields to concrete managed and Kubernetes resources.
- Developers request resources by creating XRs; Crossplane matches XRs to a Composition and provisions everything.

provider-aws registers CRDs for S3, RDS, VPC, IAM, and many more. provider-gcp registers GCP resources, and provider-kubernetes enables Crossplane to manage remote Kubernetes clusters.
Example Provider package manifest:
spec.forProvider section (cloud-specific config). Crossplane’s controllers handle API calls to create and reconcile them.
In practice you rarely create managed resources directly. Instead, platform teams provide higher-level abstractions (XRs) and Compositions instantiate managed resources. Still, understanding managed resources is useful — they are the underlying building blocks.
XRDs (CompositeResourceDefinition)
XRDs declare the developer-facing API schema: fields, types, defaults, enums, required properties, and scope (Namespaced or Cluster). In Crossplane v2 you can make the XR itself namespaced (removing the older need for “claims”).

Important: In Crossplane v2, prefer making XRs namespaced when you want per-team isolation. Older “claim” patterns used cluster-scoped XRs with namespace-scoped claims; this extra indirection is unnecessary with namespaced XRs.
function-patch-and-transform: it takes values from the XR spec and patches them into composed resource specs, optionally transforming them (for example, size: medium → instanceClass: db.r5.large).

- Developer creates an XR.
- The Composition pipeline runs functions to render composed resource manifests.
- Crossplane creates managed resources and any Kubernetes resources listed in the Composition.
- Reconciliation keeps all resources in the desired state.

kubectl apply of this XR can result in:
- a Deployment and Service,
- an Ingress,
- an RDS instance and security group,
- a Secret containing connection strings,
- XRDs define platform API schemas and scope.
- XRs (composite resources) are the developer-facing requests and can be namespaced for multi-tenancy.
- Compositions map XRs to managed and Kubernetes resources using pipeline mode and functions such as
function-patch-and-transform. - With Crossplane you can expose a single manifest that provisions and connects both application and infrastructure components, enabling self-service and consistent GitOps workflows.

- Crossplane: https://crossplane.io/
- Kubernetes docs: https://kubernetes.io/
- Argo CD: https://argo-cd.readthedocs.io/en/stable/
- Terraform: https://www.terraform.io/
- provider-aws repo: https://github.com/crossplane/provider-aws
- provider-gcp repo: https://github.com/crossplane/provider-gcp
- provider-kubernetes repo: https://github.com/crossplane/provider-kubernetes