Crossplane "no matches for kind Composition" on kubectl apply in CI
kubectl could not map kind: Composition to a served resource. Either the apiextensions.crossplane.io CRDs are missing (core not installed) or the manifest declares an apiVersion the cluster does not serve.
What this error means
Applying a Composition or CompositeResourceDefinition fails with "no matches for kind \"Composition\" in version \"apiextensions.crossplane.io/v1\"".
error: unable to recognize "composition.yaml": no matches for kind "Composition"
in version "apiextensions.crossplane.io/v1"Common causes
The apiextensions CRDs are not installed
Core Crossplane registers Composition and CompositeResourceDefinition; without core installed the mapping does not exist.
A wrong or dropped apiVersion in the manifest
The manifest uses an apiVersion the running core no longer serves (for example a removed alpha), so kubectl cannot recognize it.
How to fix it
Install core, then confirm the CRD is served
- Install the Crossplane Helm chart and wait for readiness.
- List the apiextensions CRDs to confirm they are established.
- Re-apply the Composition.
kubectl get crd | grep apiextensions.crossplane.io
kubectl apply -f composition.yamlUse the apiVersion the cluster serves
Match the manifest apiVersion to what kubectl api-resources reports for Crossplane, and migrate off removed alpha versions.
kubectl api-resources --api-group=apiextensions.crossplane.ioHow to prevent it
- Install core Crossplane before applying Compositions.
- Keep manifest apiVersions aligned with the running core version.
- Validate manifests against the cluster with
crossplane beta validatein PRs.