Kubernetes API versions
Kubernetes APIs move from alpha to beta to stable, and the older versions are then removed. A removed version is simply not served any more: kubectl apply fails with no matches for kind, and old clients break. Here is the life cycle of every built-in API version, read from the lifecycle markers in the Kubernetes source at v1.37.2 and the official migration guide.
v1StableBinding, ConfigMap, Endpoints, Event, LimitRange, Namespace, Node, NodeProxyOptions +17 more
admission.k8s.io/v1StableAdmissionReview
admission.k8s.io/v1beta1Removed in 1.22AdmissionReview
admissionregistration.k8s.io/v1StableMutatingAdmissionPolicy, MutatingAdmissionPolicyBinding, MutatingWebhookConfiguration, ValidatingAdmissionPolicy, ValidatingAdmissionPolicyBinding, ValidatingWebhookConfiguration
admissionregistration.k8s.io/v1beta1Partly removedMutatingAdmissionPolicy, MutatingAdmissionPolicyBinding, MutatingWebhookConfiguration, ValidatingAdmissionPolicy, ValidatingAdmissionPolicyBinding, ValidatingWebhookConfiguration
apiextensions.k8s.io/v1StableConversionReview, CustomResourceDefinition
apiextensions.k8s.io/v1beta1Removed in 1.22ConversionReview, CustomResourceDefinition
apiregistration.k8s.io/v1StableAPIService
apiregistration.k8s.io/v1beta1Removed in 1.22APIService
apps/v1StableControllerRevision, DaemonSet, Deployment, ReplicaSet, StatefulSet
apps/v1beta1Removed in 1.16ControllerRevision, Deployment, DeploymentRollback, ReplicaSet, Scale, StatefulSet
apps/v1beta2Removed in 1.16ControllerRevision, DaemonSet, Deployment, ReplicaSet, Scale, StatefulSet
authentication.k8s.io/v1StableSelfSubjectReview, TokenRequest, TokenReview
authentication.k8s.io/v1beta1Removed in 1.33SelfSubjectReview, TokenReview
authorization.k8s.io/v1StableLocalSubjectAccessReview, SelfSubjectAccessReview, SelfSubjectRulesReview, SubjectAccessReview
authorization.k8s.io/v1beta1Removed in 1.22LocalSubjectAccessReview, SelfSubjectAccessReview, SelfSubjectRulesReview, SubjectAccessReview
autoscaling/v1StableHorizontalPodAutoscaler, Scale
autoscaling/v2StableHorizontalPodAutoscaler
autoscaling/v2beta1Removed in 1.25HorizontalPodAutoscaler
autoscaling/v2beta2Removed in 1.26HorizontalPodAutoscaler
batch/v1StableCronJob, Job
batch/v1beta1Removed in 1.25CronJob
certificates.k8s.io/v1StableCertificateSigningRequest, ClusterTrustBundle, PodCertificateRequest
certificates.k8s.io/v1beta1Partly removedCertificateSigningRequest, ClusterTrustBundle, PodCertificateRequest
coordination.k8s.io/v1StableLease
coordination.k8s.io/v1beta1Partly removedLease, LeaseCandidate
discovery.k8s.io/v1StableEndpointSlice
discovery.k8s.io/v1beta1Removed in 1.25EndpointSlice
events.k8s.io/v1StableEvent
events.k8s.io/v1beta1Removed in 1.25Event
extensions/v1beta1Removed in 1.22DaemonSet, Deployment, DeploymentRollback, Ingress, NetworkPolicy, PodSecurityPolicy, ReplicaSet, Scale
flowcontrol.apiserver.k8s.io/v1StableFlowSchema, PriorityLevelConfiguration
flowcontrol.apiserver.k8s.io/v1beta1Removed in 1.26FlowSchema, PriorityLevelConfiguration
flowcontrol.apiserver.k8s.io/v1beta2Removed in 1.29FlowSchema, PriorityLevelConfiguration
flowcontrol.apiserver.k8s.io/v1beta3Removed in 1.32FlowSchema, PriorityLevelConfiguration
networking.k8s.io/v1StableIPAddress, Ingress, IngressClass, NetworkPolicy, ServiceCIDR
networking.k8s.io/v1beta1Removed in 1.37IPAddress, Ingress, IngressClass, ServiceCIDR
node.k8s.io/v1StableRuntimeClass
node.k8s.io/v1beta1Removed in 1.25RuntimeClass
policy/v1StableEviction, PodDisruptionBudget
policy/v1beta1Removed in 1.25Eviction, PodDisruptionBudget, PodSecurityPolicy
rbac.authorization.k8s.io/v1StableClusterRole, ClusterRoleBinding, Role, RoleBinding
rbac.authorization.k8s.io/v1beta1Removed in 1.22ClusterRole, ClusterRoleBinding, Role, RoleBinding
resource.k8s.io/v1StableDeviceClass, DeviceTaintRule, ResourceClaim, ResourceClaimTemplate, ResourceSlice
resource.k8s.io/v1beta1Deprecated since 1.35DeviceClass, ResourceClaim, ResourceClaimTemplate, ResourceSlice
off by defaultresource.k8s.io/v1beta2Deprecated since 1.36DeviceClass, DeviceTaintRule, ResourceClaim, ResourceClaimTemplate, ResourceSlice
off by defaultscheduling.k8s.io/v1StablePriorityClass
scheduling.k8s.io/v1beta1Partly removedPodGroup, PriorityClass, Workload
storage.k8s.io/v1StableCSIDriver, CSINode, CSIStorageCapacity, StorageClass, VolumeAttachment, VolumeAttributesClass
storage.k8s.io/v1beta1Removed in 1.37CSIDriver, CSINode, CSIStorageCapacity, StorageClass, VolumeAttachment, VolumeAttributesClass
storagemigration.k8s.io/v1StableStorageVersionMigration
storagemigration.k8s.io/v1beta1Deprecated since 1.37StorageVersionMigration
off by defaultDeprecated but still served in 1.37
These still work today but log deprecation warnings; each has a removal release scheduled in the source.
| Kind | API version | Deprecated | Stops being served | Use instead |
|---|---|---|---|---|
| MutatingAdmissionPolicy | admissionregistration.k8s.io/v1alpha1 alpha · off |
1.35 | 1.38 | admissionregistration.k8s.io/v1 |
| MutatingAdmissionPolicyBinding | admissionregistration.k8s.io/v1alpha1 alpha · off |
1.35 | 1.38 | admissionregistration.k8s.io/v1 |
| LeaseCandidate | coordination.k8s.io/v1alpha2 alpha · off |
1.35 | 1.38 | — |
| DeviceClass | resource.k8s.io/v1beta1 beta · off by default | 1.35 | 1.38 | resource.k8s.io/v1 |
| ResourceClaim | resource.k8s.io/v1beta1 beta · off by default | 1.35 | 1.38 | resource.k8s.io/v1 |
| ResourceClaimTemplate | resource.k8s.io/v1beta1 beta · off by default | 1.35 | 1.38 | resource.k8s.io/v1 |
| ResourceSlice | resource.k8s.io/v1beta1 beta · off by default | 1.35 | 1.38 | resource.k8s.io/v1 |
| LeaseCandidate | coordination.k8s.io/v1beta1 beta · off by default | 1.36 | 1.39 | — |
| DeviceClass | resource.k8s.io/v1beta2 beta · off by default | 1.36 | 1.39 | resource.k8s.io/v1 |
| DeviceTaintRule | resource.k8s.io/v1alpha3 alpha · off |
1.36 | 1.39 | resource.k8s.io/v1 |
| ResourceClaim | resource.k8s.io/v1beta2 beta · off by default | 1.36 | 1.39 | resource.k8s.io/v1 |
| ResourceClaimTemplate | resource.k8s.io/v1beta2 beta · off by default | 1.36 | 1.39 | resource.k8s.io/v1 |
| ResourceSlice | resource.k8s.io/v1beta2 beta · off by default | 1.36 | 1.39 | resource.k8s.io/v1 |
| MutatingAdmissionPolicy | admissionregistration.k8s.io/v1beta1 beta · off by default | 1.37 | 1.40 | admissionregistration.k8s.io/v1 |
| MutatingAdmissionPolicyBinding | admissionregistration.k8s.io/v1beta1 beta · off by default | 1.37 | 1.40 | admissionregistration.k8s.io/v1 |
| ClusterTrustBundle | certificates.k8s.io/v1beta1 beta · off by default | 1.37 | 1.40 | certificates.k8s.io/v1 |
| PodCertificateRequest | certificates.k8s.io/v1beta1 beta · off by default | 1.37 | 1.40 | certificates.k8s.io/v1 |
| StorageVersionMigration | storagemigration.k8s.io/v1beta1 beta · off by default | 1.37 | 1.40 | storagemigration.k8s.io/v1 |
Scheduled removals after 1.37
Removal releases written into the API lifecycle markers. Most of these are beta versions that are off by default, so they only affect clusters that enabled them.
| Kind | API version | Stops being served | Use instead |
|---|---|---|---|
| MutatingAdmissionPolicy | admissionregistration.k8s.io/v1alpha1 alpha · off |
1.38 | admissionregistration.k8s.io/v1 |
| MutatingAdmissionPolicyBinding | admissionregistration.k8s.io/v1alpha1 alpha · off |
1.38 | admissionregistration.k8s.io/v1 |
| LeaseCandidate | coordination.k8s.io/v1alpha2 alpha · off |
1.38 | — |
| DeviceClass | resource.k8s.io/v1beta1 beta · off by default | 1.38 | resource.k8s.io/v1 |
| ResourceClaim | resource.k8s.io/v1beta1 beta · off by default | 1.38 | resource.k8s.io/v1 |
| ResourceClaimTemplate | resource.k8s.io/v1beta1 beta · off by default | 1.38 | resource.k8s.io/v1 |
| ResourceSlice | resource.k8s.io/v1beta1 beta · off by default | 1.38 | resource.k8s.io/v1 |
| LeaseCandidate | coordination.k8s.io/v1beta1 beta · off by default | 1.39 | — |
| DeviceClass | resource.k8s.io/v1beta2 beta · off by default | 1.39 | resource.k8s.io/v1 |
| DeviceTaintRule | resource.k8s.io/v1alpha3 alpha · off |
1.39 | resource.k8s.io/v1 |
| ResourceClaim | resource.k8s.io/v1beta2 beta · off by default | 1.39 | resource.k8s.io/v1 |
| ResourceClaimTemplate | resource.k8s.io/v1beta2 beta · off by default | 1.39 | resource.k8s.io/v1 |
| ResourceSlice | resource.k8s.io/v1beta2 beta · off by default | 1.39 | resource.k8s.io/v1 |
| MutatingAdmissionPolicy | admissionregistration.k8s.io/v1beta1 beta · off by default | 1.40 | admissionregistration.k8s.io/v1 |
| MutatingAdmissionPolicyBinding | admissionregistration.k8s.io/v1beta1 beta · off by default | 1.40 | admissionregistration.k8s.io/v1 |
| ClusterTrustBundle | certificates.k8s.io/v1beta1 beta · off by default | 1.40 | certificates.k8s.io/v1 |
| PodCertificateRequest | certificates.k8s.io/v1beta1 beta · off by default | 1.40 | certificates.k8s.io/v1 |
| StorageVersionMigration | storagemigration.k8s.io/v1beta1 beta · off by default | 1.40 | storagemigration.k8s.io/v1 |
| DeviceTaintRule | resource.k8s.io/v1beta2 beta · off by default | 1.42 | resource.k8s.io/v1 |
| ResourcePoolStatusRequest | resource.k8s.io/v1alpha3 alpha · off |
1.42 | — |
| Eviction | lifecycle.k8s.io/v1alpha1 alpha · off |
1.43 | — |
| EvictionRequest | lifecycle.k8s.io/v1alpha1 alpha · off |
1.43 | — |
| PodGroup | scheduling.k8s.io/v1beta1 beta · off by default | 1.43 | — |
| Workload | scheduling.k8s.io/v1beta1 beta · off by default | 1.43 | — |
Alpha API versions are left out of the cards unless the migration guide covers them; they are never on by default. Stable v1 core kinds (Pod, Service, ConfigMap…) have no removals.