Skip to content
Latchkey

Crossplane CRDs not installed (core not ready) in CI

Applying a Provider, Configuration, or Composition fails because the Crossplane CRDs those kinds belong to are not registered yet. The core Helm chart either was not installed or its pods have not become Ready.

What this error means

A kubectl apply of Crossplane objects fails with "no matches for kind ..." or "the server could not find the requested resource" right after installing the chart.

kubectl
error: resource mapping not found for name: "provider-aws-s3" namespace: ""
from "provider.yaml": no matches for kind "Provider" in version "pkg.crossplane.io/v1"
ensure CRDs are installed first

Common causes

Core Crossplane was never installed

The pipeline applies Provider/Composition manifests without first installing the Crossplane Helm chart that registers those CRDs.

Applying before the core pods are Ready

The chart install returned but the crossplane and rbac-manager pods are still starting, so the CRDs are not served yet.

How to fix it

Install core and wait for it to be ready

  1. Install the Crossplane Helm chart into crossplane-system.
  2. Wait for the deployment rollout to finish.
  3. Only then apply Providers, Configurations, and Compositions.
Terminal
helm install crossplane crossplane-stable/crossplane \
  --namespace crossplane-system --create-namespace --wait
kubectl -n crossplane-system rollout status deploy/crossplane

Gate applies on the CRD existing

Wait for the specific CRD to be established before applying resources that use it.

Terminal
kubectl wait --for condition=established --timeout=120s \
  crd/providers.pkg.crossplane.io

How to prevent it

  • Install core Crossplane with --wait before applying any packages.
  • Wait on CRD established conditions in the pipeline.
  • Separate the bootstrap (install core) stage from the apply stage.

Related guides

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