What’s Changed and Migration

This content was generated with the assistance of AI and should be verified against the official documentation before being relied on in production; see the section bibliography for the reference material consulted while preparing these pages.

Kubernetes ships about three minor releases a year and supports each for about 14 months. Older books and tutorials (including the two O’Reilly books this section was cross-checked against) describe a Kubernetes that no longer exists: they use removed API versions, removed kubectl behaviour and architecture that has since been replaced. This page is the consolidated list of what changed, written against Kubernetes 1.37 ("Garhwal", released 2026-08-26, latest patch 1.37.1). Every version and date below was re-checked on 2026-09-30 against the kubernetes.io release pages, the release notes and blogs, and the kubernetes/website and kubernetes/kubernetes repositories. The currently supported minors are 1.37, 1.36 and 1.35, with 1.34 in maintenance mode until its end of life on 2026-10-27, and 1.38 is scheduled for 2026-12-16. Re-verify anything that matters before relying on it: the topic pages linked from each row give the current details, and the section landing page gives the reading path.

Release timeline

Minor Released Landmark for this section

1.24

2022-05-03

dockershim removed

1.25

2022-08-23

PodSecurityPolicy removed; Pod Security Admission stable; cgroup v2 stable

1.26

2022-12-08

autoscaling/v2beta2 removed

1.27

2023-04-11

CSIStorageCapacity v1beta1 removed

1.28

2023-08-15

Native sidecar containers arrive as alpha

1.29

2023-12-13

flowcontrol v1beta2 removed

1.30

2024-04-17

ValidatingAdmissionPolicy GA

1.31

2024-08-13

cgroup v1 moved into maintenance mode

1.32

2024-12-11

flowcontrol v1beta3 removed

1.33

2025-04-23

Native sidecars GA; nftables kube-proxy GA; Endpoints API deprecated

1.34

2025-08-27

Dynamic Resource Allocation GA; VolumeAttributesClass GA

1.35

2025-12-17

In-place Pod resize GA; kube-proxy IPVS mode deprecated; kubelet refuses cgroup v1 by default

1.36

2026-04-22

User namespaces GA; externalIPs deprecated in the Service docs; MutatingAdmissionPolicy stable; image volumes stable

1.37

2026-08-26

Metrics API GA; Storage Version Migration GA; HPA scale to zero (beta); kubectl run --filename deprecated

Outdated in the books

Each row is a statement from one of the books, the version in which it stopped being true, and what to use instead. "Book 1" is Rensin, Scheduling the Future at Cloud Scale (2015) and "Book 2" is the sampler of Hightower, Burns and Beda, Kubernetes: Up and Running (2017).

Book (era) Changed Version and date Current approach

ReplicationController as the replication primitive (Book 1)

Superseded

Deployments GA in 1.9 (2017-12-15)

ReplicaSet, always managed by a Deployment (apps/v1). See ReplicaSets and Deployments.

kubectl rolling-update with two ReplicationControllers (Book 1)

Removed

1.18 (2020-03-25)

kubectl rollout status, history, undo, pause, restart on a Deployment. See Deployment Strategies.

extensions/v1beta1 Deployment and ReplicaSet, apps/v1beta1 StatefulSet (Book 2)

Removed

1.16 (2019-09-18)

apps/v1. See StatefulSets.

storage.k8s.io/v1beta1 StorageClass and the volume.beta.kubernetes.io/storage-class annotation (Book 2)

Replaced

storage.k8s.io/v1 since 1.6

storage.k8s.io/v1, spec.storageClassName, storageclass.kubernetes.io/is-default-class. See Persistent Volumes and Storage Classes.

In-tree gcePersistentDisk, azureDisk and nfs volume plugins and provisioners (both books)

Migrated to CSI; the cloud plugins were removed

CSI migration over 1.17 to 1.27

Container Storage Interface drivers (the cloud providers' drivers, or csi-driver-nfs for NFS).

kubectl run --restart=OnFailure creating a Job, Services selecting run: labels (Book 2)

Generators removed

1.18 (2020-03-25); --filename deprecated in 1.37

kubectl run creates only a Pod. Use kubectl create job and kubectl create deployment, and the recommended app.kubernetes.io/* labels. See kubectl Essentials.

kubectl get -a (--show-all) (Book 2)

Removed

Long ago; not in any recent release

Completed Pods are listed by default.

kubectl exec pod cmd without -- (Book 2)

Removed

Long-standing

kubectl exec pod — cmd.

DNS names such as mysql.svc.default.cluster (Book 2, erratum)

Was wrong

n/a

<service>.<namespace>.svc.cluster.local. See DNS and Service Discovery.

kubectl apply cm --from-file (Book 2, erratum)

Was wrong

n/a

kubectl create configmap <name> --from-file=<file>; apply has no --from-file flag. See Stateful Applications in Practice.

Portal IP and userspace kube-proxy round-robin (Book 1)

Replaced

nftables mode GA in 1.33 (2025-04-23); IPVS deprecated in 1.35 (2025-12-17)

ClusterIP with kube-proxy in nftables mode (iptables still supported). See Cluster Networking and CNI.

SkyDNS and kube2sky (Book 1)

Replaced

kube-dns, then CoreDNS default from 1.13

CoreDNS.

CreateExternalLoadBalancer: true (Book 1)

Replaced

Pre-1.0

type: LoadBalancer. See Services.

Pre-v1 livenessProbe fields (enabled, type: http) (Book 1)

Replaced

Pre-1.0

httpGet, tcpSocket, exec and grpc probes, plus readiness and startup probes. See Health Probes and Lifecycle.

Docker as the node runtime; standalone cAdvisor (Book 1)

dockershim removed

1.24 (2022-05-03)

containerd or CRI-O through the CRI; cAdvisor is embedded in the kubelet. Docker-built images run unchanged.

"Minions" (Book 1)

Renamed

Pre-1.0

Nodes.

"Ubernetes" and cluster federation (Book 1)

KubeFed archived

Archived project

GitOps, Cluster API or managed fleet tools. See GitOps and CI/CD.

Vagrant local clusters (Book 1)

Replaced

n/a

kind, minikube, Docker Desktop, k3d. See Getting Started.

Google Container Engine, Azure Container Service, "AWS has no managed Kubernetes" (both books)

Replaced

n/a

GKE, AKS, EKS. See Managed Kubernetes and Distributions.

Redis master and slave terminology (Book 2)

Renamed

n/a

Primary and replica. See Stateful Applications in Practice.

The 1.16, 1.18 and 1.9 rows predate the 1.24 to 1.37 range the rest of the page covers; their dates come from the corresponding Kubernetes changelogs and the deprecation guide rather than from the recent release pages.

New since the books

Feature Stage Version Covered in

Deployments in depth, DaemonSets, CronJobs

GA

CronJob batch/v1 in 1.21

ReplicaSets and Deployments, DaemonSets, Jobs and CronJobs

Ingress and Gateway API

GA

Ingress 1.19; Gateway API v1.0 on 2023-10-31

Ingress, Gateway API

HorizontalPodAutoscaler autoscaling/v2

GA

1.23

Autoscaling

HPA scale to zero

Beta

1.37

Autoscaling

In-place Pod resize

GA

1.35

Resource Management

Native sidecar containers

GA

1.33

Pods

Pod Security Admission and the Pod Security Standards

GA

1.25

Pod Security

User namespaces

GA

1.36

Pod Security

ServiceAccount tokens no longer auto-created as Secrets; TokenRequest

Default

1.24

Authentication, Authorization and RBAC

ValidatingAdmissionPolicy (CEL)

GA

1.30

Admission Control and Policy

MutatingAdmissionPolicy

Stable

1.36

Admission Control and Policy

EndpointSlices

GA

1.21

Services

cgroup v2

Stable

1.25

Resource Management

Image volumes

Stable

1.36

Volumes and Ephemeral Storage

Dynamic Resource Allocation; VolumeAttributesClass

GA

1.34

Dynamic Resource Allocation and Devices, Persistent Volumes and Storage Classes

Server-side apply, kubectl diff, kubectl debug with ephemeral containers

GA

1.22 and 1.25

kubectl Essentials, Debugging and Troubleshooting

Kustomize in kubectl; Helm 4

Current

Helm 4.3 and Kustomize 5.8

Kustomize, Helm

Storage Version Migration; Metrics API

GA

1.37

Observability: Logging and Metrics

Operators, custom resources and CRDs (ThirdPartyResources removed in 1.8)

GA

CRD v1 in 1.16

Custom Resources and Operators

Stage and version entries for features older than 1.24 (Ingress, EndpointSlice, CronJob, HPA v2, server-side apply) come from the changelogs of those releases; pod-level resources, PodGroup scheduling and the Workload API are newer still and change quickly, so their maturity is documented on the pages that use them rather than frozen here.

Deprecated API removals by version

The Deprecated API Migration Guide lists each removal; the ones still seen in old manifests are below. Since 1.32 nothing further has been removed from the guide, and 1.33 to 1.37 contain no new entries in it.

Removed in API Use instead

1.16

extensions/v1beta1 and apps/v1beta1, apps/v1beta2 Deployment, DaemonSet, ReplicaSet, StatefulSet

apps/v1

1.22

extensions/v1beta1 and networking.k8s.io/v1beta1 Ingress; apiextensions.k8s.io/v1beta1 CRD; admissionregistration.k8s.io/v1beta1 webhooks; rbac.authorization.k8s.io/v1beta1; certificates.k8s.io/v1beta1

The v1 versions

1.25

batch/v1beta1 CronJob; autoscaling/v2beta1 HPA; policy/v1beta1 PodDisruptionBudget; discovery.k8s.io/v1beta1 EndpointSlice; events.k8s.io/v1beta1 Event; node.k8s.io/v1beta1 RuntimeClass

batch/v1, autoscaling/v2, policy/v1, discovery.k8s.io/v1, events.k8s.io/v1, node.k8s.io/v1

1.25

policy/v1beta1 PodSecurityPolicy, removed entirely

Pod Security Admission, or a policy engine

1.26

autoscaling/v2beta2 HPA; flowcontrol.apiserver.k8s.io/v1beta1

autoscaling/v2; flowcontrol.apiserver.k8s.io/v1

1.27

storage.k8s.io/v1beta1 CSIStorageCapacity

storage.k8s.io/v1

1.29

flowcontrol.apiserver.k8s.io/v1beta2

flowcontrol.apiserver.k8s.io/v1

1.32

flowcontrol.apiserver.k8s.io/v1beta3

flowcontrol.apiserver.k8s.io/v1

Removals and deprecations worth knowing

  • Dockershim (removed in 1.24, 2022-05-03). The kubelet no longer speaks to Docker Engine directly. Images built with Docker are OCI images and run unchanged on containerd or CRI-O; only tools that mounted the Docker socket, or nodes that used docker commands to inspect containers, need to change to crictl. See Cluster Setup and Administration.

  • PodSecurityPolicy (removed in 1.25, 2022-08-23). Replaced by Pod Security Admission with the Pod Security Standards, or by ValidatingAdmissionPolicy and policy engines. See Pod Security and Admission Control and Policy.

  • Ingress-NGINX (best-effort maintenance ended March 2026). No further releases, bugfixes or security updates; existing installs keep running. The Ingress API is frozen, not removed. Migrate to Gateway API, for example with the ingress2gateway tool. See Ingress.

  • Endpoints API (deprecated in 1.33, 2025-04-23). The v1 Endpoints API still works and will not be removed, but new code should read EndpointSlices.

  • Service externalIPs (marked deprecated in the Service documentation at 1.36, 2026-04-22). The field has been discouraged since 1.21 because of CVE-2020-8554; use a load balancer or Gateway API instead, and consider the DenyServiceExternalIPs admission controller. The 1.36 announcement describes a planned removal, but the 1.37 changelog contains no removal, so the field still exists on 1.37.

  • cgroup v1 (maintenance mode in 1.31, deprecated in 1.35). The kubelet sets failCgroupV1 to true by default from 1.35, so nodes refuse to start on cgroup v1 unless it is set to false. Move nodes to cgroup v2.

  • kube-proxy IPVS mode (deprecated in 1.35, 2025-12-17). Migrate to nftables (GA in 1.33); iptables is still the default on Linux, and kube-proxy warns when no mode is set explicitly.

  • Legacy package repositories (apt.kubernetes.io and yum.kubernetes.io, frozen on 2023-09-13). Use the community pkgs.k8s.io repositories, which are versioned per minor release.

  • kubectl run generators (removed in 1.18, 2020-03-25). kubectl run creates a Pod; the ignored --filename flag was deprecated in 1.37.

Finding deprecated APIs

In a running cluster

The API server counts every request to a deprecated API in a metric, which is the authoritative view of what clients are doing right now:

kubectl get --raw /metrics | grep apiserver_requested_deprecated_apis
apiserver_requested_deprecated_apis{group="policy",removed_release="1.25",resource="podsecuritypolicies",subresource="",version="v1beta1"} 1

The metric names the removed_release, so sort on it before an upgrade. To learn which client sent the request, turn on audit logging, where each event carries an k8s.io/deprecated annotation. Third-party tools fill the rest of the picture: kubent scans the live cluster, and pluto scans manifests and Helm releases:

kubent
pluto detect-helm -o wide

In manifests

Scan Git before the cluster does: pluto detect-files -d k8s/, kubectl apply --dry-run=server -f (the server reports warnings about deprecated versions to the client) and kubectl convert rewrite old manifests. The API server also returns a Warning: header on any call to a deprecated API, which kubectl prints. In CI, validate against the target version’s schema with a tool such as kubeconform. Upgrade one minor release at a time and read the release notes first; see Cluster Setup and Administration for the upgrade sequence.