Managed resources
One CRD per cloud resource.
A managed resource (MR) is the atom of Crossplane: one Kubernetes custom resource representing exactly one external cloud resource. You write a manifest with a spec.forProvider block that mirrors the cloud API’s fields, apply it, and the provider’s controller creates the real thing and writes its observed status back into the object. It is the lowest level — one MR, one bucket or instance or role.
apiVersion: s3.aws.upbound.io/v1beta1kind: Bucketmetadata:name: acme-logs-prodspec:forProvider:region: us-east-1providerConfigRef:name: default # which credentials to use (next lessons)
Status and readiness
After you apply it, the MR is not instantly done — the controller calls the cloud, and you watch the object’s conditions move to Ready and Synced. Synced means Crossplane reconciled the spec with the API; Ready means the cloud reports the resource as available. kubectl describe shows the events and any error the cloud returned, which is where you debug a resource that will not become ready.
$ kubectl apply -f bucket.yaml$ kubectl get bucket acme-logs-prodNAME READY SYNCED EXTERNAL-NAMEacme-logs-prod True True acme-logs-prod$ kubectl describe bucket acme-logs-prod # events + any cloud API error