Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →The error occurs because the lab’s Ambassador Operator CRD manifest uses apiextensions.k8s.io/v1beta1, an API Kubernetes stopped serving in v1.22. A cluster that does not serve that API cannot create the ambassadorinstallations.getambassador.io CustomResourceDefinition, so Kubernetes reports that it cannot find a resource mapping. Use an Ambassador manifest maintained for your Kubernetes server version, or recreate the historical lab environment only when reproducing that course exactly.
What the error means
The lab command downloads a CRD file and applies it with kubectl:
kubectl apply -f https://github.com/datawire/ambassador-operator/releases/latest/download/ambassador-operator-crds.yaml
The reported output names ambassadorinstallations.getambassador.io and says there are no matches for CustomResourceDefinition in apiextensions.k8s.io/v1beta1. Because the CRD was rejected, kubectl get crd returns no corresponding resource. The follow-up message about installing CRDs first describes the consequence of the failed apply; it is not the underlying fix.
Why newer clusters reject the lab manifest
Kubernetes removed service for the apiextensions.k8s.io/v1beta1 CustomResourceDefinition API in Kubernetes v1.22. The replacement, apiextensions.k8s.io/v1, has been available since v1.16. A manifest that still declares the removed beta API cannot be applied to a v1.22-or-newer API server.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problems#1 Best Overall
Changing only the first line is not a reliable migration. A v1 CRD also requires fields and validation that older beta manifests could omit, including:
- An explicit
spec.scope. spec.versionsinstead of the older singularspec.version.- A structural
spec.versions[*].schema.openAPIV3Schema. - Other field moves and conversion rules documented by Kubernetes for the beta-to-v1 transition.
Use a complete operator installation manifest intended for the Kubernetes version running your cluster. Do not assume that editing apiVersion in an old downloaded file produces a valid, supported CRD.
Check the cluster and manifest before changing anything
- Identify the Kubernetes server version. Run
kubectl versionand pay attention to the server version, not just the client version. - Inspect the downloaded YAML, or save it locally and search for
apiVersion. If the CRD saysapiextensions.k8s.io/v1beta1, it is incompatible with a Kubernetes v1.22-or-newer server. - Confirm whether the CRD exists:
kubectl get crd ambassadorinstallations.getambassador.io. A “NotFound” result after the failed apply is expected. - Locate an operator release and CRD manifest that explicitly supports your server version. The historical
releases/latestdownload URL above is not verified here as a current installation path.
Apply the compatible CRD and wait for readiness
After obtaining the version-appropriate manifest, apply it with kubectl apply -f. Then verify the object:
kubectl get crd ambassadorinstallations.getambassador.io
Creating a CRD adds API paths asynchronously. Before applying an Ambassador custom resource, check that the CRD has an Established condition or that its resource appears through API discovery. For example:
Free tools Windows power users keep installed
One-click scans. No signup required.
Rank #3
kubectl get crd ambassadorinstallations.getambassador.io -o yaml
kubectl api-resources | grep -i ambassador
If the CRD appears but dependent resources still fail immediately, wait briefly and check discovery again. This handles propagation delay; it cannot make a removed beta API available.
Choosing between present-day repair and lab reproduction
| Approach | When it fits | Trade-off |
|---|---|---|
| Use a maintained, Kubernetes-version-compatible operator manifest | Any current cluster or new deployment | Requires identifying a release whose CRDs support your server version; no universal compatibility matrix is established here. |
Migrate the CRD fully to apiextensions.k8s.io/v1 |
You own the manifest and have the operator’s schema and conversion requirements | More work than changing one string; structural schema and other v1 fields must validate. |
| Recreate the historical lab environment | You must follow the course exactly for an assessment or demonstration | Older tooling and Kubernetes images are outdated and should not be treated as a general production recommendation. |
What the historical kind reports actually show
In the course discussion, a student reported using kind v0.13.0 while the lab specified kind v0.8.1, and said removing the newer binary and installing the lab-specified version resolved the exercise. A separate kind issue reported success with a kindest/node:v1.21.12 image. These reports support a version-compatibility explanation for that 2022 training setup, but they do not establish that downgrading kind or pinning Kubernetes 1.21.12 is appropriate today.
Rank #4
If you reproduce the lab, match all versions the course requires and treat the environment as isolated. For ordinary Kubernetes work, keep the cluster on a supported release and update the operator’s CRDs instead.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Common failure branches
The manifest still says v1beta1
The API server will continue rejecting it on v1.22 and later. Obtain a v1 CRD manifest or perform the complete documented migration, including schema and field changes.
Best Value
The CRD applies, but the custom resource is rejected
Check the CRD’s Established condition and API discovery first. Then verify that the custom resource’s group, version, and kind match the CRD’s declared versions.
kubectl get crd is empty
Confirm that you are connected to the intended cluster and context, then inspect the apply error again. An empty result does not mean Kubernetes needs a second “install CRDs” command; it usually means the CRD manifest never succeeded.
Bottom line
This is a Kubernetes API compatibility failure, not an Ambassador resource-name typo. Kubernetes v1.22 removed apiextensions.k8s.io/v1beta1; install or migrate a complete apiextensions.k8s.io/v1 CRD that matches your server, wait for it to become Established, and only use the old kind or node-image versions when deliberately reproducing the historical lab.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →




