no matches for kind Deployment in version extensions/v1beta1
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
In Kubernetes, resources are often managed and manipulated in a declarative manner using YAML configurations. When using these configurations, users commonly encounter error messages. One such error is "no matches for kind 'Deployment' in version 'extensions/v1beta1'."
Understanding the Error
API Versioning in Kubernetes
Kubernetes uses API versioning to manage changes in its API while maintaining backward compatibility. Each Kubernetes API version has the format <group>/<version>, such as extensions/v1beta1 or apps/v1. The version is crucial because it determines not only the features available in that version but also the stability and maturity of the APIs.
What is extensions/v1beta1?
The extensions/v1beta1 group was part of earlier Kubernetes releases and included several beta APIs. Over time, Kubernetes has stabilized its core resources and moved stable APIs to their dedicated groups. For instance, Deployment objects, initially found under extensions/v1beta1, are now in apps/v1.
Meaning of the Error
The error "no matches for kind 'Deployment' in version 'extensions/v1beta1'" typically arises when a Deployment resource configured to use extensions/v1beta1 is applied to a Kubernetes cluster that no longer supports this API version. This mismatch usually occurs because the extensions/v1beta1 group is deprecated or removed in newer Kubernetes versions.
Transition to apps/v1
The logical resolution to the error is transitioning the API version to a universally supported one. For Deployment resources, the recommended version is apps/v1.
Example Migration
Suppose you have the following Deployment configuration:
To resolve the error, change the apiVersion as follows:
Key Changes:
- apiVersion: Switch from
extensions/v1beta1toapps/v1. - selector: Unlike older versions,
apps/v1mandates the inclusion of aselectorfield that explicitly matches labels set intemplate.metadata.
Why the Shift?
There are several reasons why Kubernetes deprecates and removes specific API versions:
- Stability: To transition from beta to stable versions, highlighting mature, stable APIs.
- Consistency: Newer versions typically offer better features, consistent behavior, and resolved bugs.
- Simplification: Reducing duplicate resources in different API groups.
Checking Kubernetes Version Compatibility
Before deploying resources, ensure compatibility with your current Kubernetes version. The Kubernetes documentation provides insights into deprecated APIs and replacement versions. Additionally, the CLI command $ kubectl explain<resource_type> can help identify supported API versions for any resource type.
Summary Table
Below is a summary of the changes and issues:
| Component | extensions/v1beta1 | apps/v1 |
| Deployment API Version | Deprecated and removed in newer releases | Supported and stable in all recent versions |
| Required Fields | Missing explicit selector | Requires explicit selector |
| Migration Recommendation | Update to apps/v1 | No migration needed |
Final Considerations
When managing Kubernetes resources, regularly review the release notes of newer Kubernetes versions to ensure continuity. Automated tools and kubectl commands can assist in auditing configurations for deprecated or unsupported API versions. By staying vigilant and periodically updating configurations, you can maintain a smooth and error-free Kubernetes environment.
Related reading
- No matches for kind HorizontalPodAutoscaler in version autoscaling/v2 when installing knative serving
- no X-Forwarded-For with Traefik 2 on bare metal Kubernetes with ClusterIP Service and kube-keepalive-vip
- Node had taints that the pod didn't tolerate error when deploying to Kubernetes cluster
- NodePort services not available on all nodes
- No suitable records were found verify your bundle identifier is correct
- Node.js + Nginx - What now?
- No MediaTypeFormatter is available to read an object of type 'String' from content with media type 'text/plain
- No primary or default constructor found for interface java.util.List Rest API Spring boot

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.