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 |
|
1.27 |
2023-04-11 |
|
1.28 |
2023-08-15 |
Native sidecar containers arrive as alpha |
1.29 |
2023-12-13 |
|
1.30 |
2024-04-17 |
ValidatingAdmissionPolicy GA |
1.31 |
2024-08-13 |
cgroup v1 moved into maintenance mode |
1.32 |
2024-12-11 |
|
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; |
1.37 |
2026-08-26 |
Metrics API GA; Storage Version Migration GA; HPA scale to zero (beta); |
Source: Kubernetes Docs — Releases
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 ( |
|
Removed |
1.18 (2020-03-25) |
|
|
Removed |
1.16 (2019-09-18) |
|
|
Replaced |
|
|
In-tree |
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 |
|
Generators removed |
1.18 (2020-03-25); |
|
|
Removed |
Long ago; not in any recent release |
Completed Pods are listed by default. |
|
Removed |
Long-standing |
|
DNS names such as |
Was wrong |
n/a |
|
|
Was wrong |
n/a |
|
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. |
|
Replaced |
Pre-1.0 |
|
Pre-v1 |
Replaced |
Pre-1.0 |
|
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 |
|
Ingress and Gateway API |
GA |
Ingress 1.19; Gateway API v1.0 on 2023-10-31 |
|
HorizontalPodAutoscaler |
GA |
1.23 |
|
HPA scale to zero |
Beta |
1.37 |
|
In-place Pod resize |
GA |
1.35 |
|
Native sidecar containers |
GA |
1.33 |
|
Pod Security Admission and the Pod Security Standards |
GA |
1.25 |
|
User namespaces |
GA |
1.36 |
|
ServiceAccount tokens no longer auto-created as Secrets; TokenRequest |
Default |
1.24 |
|
ValidatingAdmissionPolicy (CEL) |
GA |
1.30 |
|
MutatingAdmissionPolicy |
Stable |
1.36 |
|
EndpointSlices |
GA |
1.21 |
|
cgroup v2 |
Stable |
1.25 |
|
Image volumes |
Stable |
1.36 |
|
Dynamic Resource Allocation; VolumeAttributesClass |
GA |
1.34 |
Dynamic Resource Allocation and Devices, Persistent Volumes and Storage Classes |
Server-side apply, |
GA |
1.22 and 1.25 |
|
Kustomize in kubectl; Helm 4 |
Current |
Helm 4.3 and Kustomize 5.8 |
|
Storage Version Migration; Metrics API |
GA |
1.37 |
|
Operators, custom resources and CRDs (ThirdPartyResources removed in 1.8) |
GA |
CRD |
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 |
|
|
1.22 |
|
The |
1.25 |
|
|
1.25 |
|
Pod Security Admission, or a policy engine |
1.26 |
|
|
1.27 |
|
|
1.29 |
|
|
1.32 |
|
|
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
dockercommands to inspect containers, need to change tocrictl. 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
ingress2gatewaytool. 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 theDenyServiceExternalIPsadmission 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
failCgroupV1to 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.ioandyum.kubernetes.io, frozen on 2023-09-13). Use the communitypkgs.k8s.iorepositories, which are versioned per minor release. -
kubectl rungenerators (removed in 1.18, 2020-03-25).kubectl runcreates a Pod; the ignored--filenameflag 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.
References
-
Kubernetes Blog — Deprecation and Removal of Service ExternalIPs
-
Rensin, D. (2015). Kubernetes: Scheduling the Future at Cloud Scale. O’Reilly.
-
Hightower, K., Burns, B. and Beda, J. (2017). Kubernetes: Up and Running. O’Reilly.