Skip to content
Latchkey

Crossplane "provider not installed" in CI

Every managed resource kind (Bucket, RDSInstance) is provided by a Provider package that registers its CRD. If the Provider is not installed, applying that resource fails with "no matches for kind" because the CRD does not exist.

What this error means

Applying a managed resource fails with "no matches for kind \"Bucket\"", or kubectl get providers does not list the provider the resource needs.

kubectl
error: unable to recognize "bucket.yaml": no matches for kind "Bucket"
in version "s3.aws.upbound.io/v1beta1"

Common causes

The Provider package was never applied

The pipeline applies managed resources without first installing the Provider that registers their CRDs.

Applying resources before the provider is healthy

The Provider was applied but its CRDs are not registered yet because the provider is still installing.

How to fix it

Install the provider and wait for it

  1. Apply the Provider package the resource needs.
  2. Wait for the Provider to be INSTALLED and HEALTHY.
  3. Then apply the managed resources.
Terminal
kubectl apply -f provider-aws-s3.yaml
kubectl wait --for condition=Healthy --timeout=300s \
  provider.pkg.crossplane.io/provider-aws-s3

Confirm the CRD is served

After the provider is healthy, check that the resource CRD exists before applying it.

Terminal
kubectl get crd buckets.s3.aws.upbound.io

How to prevent it

  • Install providers and wait for HEALTHY before applying managed resources.
  • Separate provider install from resource apply into ordered stages.
  • Pin provider package versions so CRDs stay stable.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →