kubectl version skew: The kubectl client is too far from the cluster's version
kubectl is supported within one minor version of the API server in either direction. Outside that window, commands may fail or behave incorrectly, sometimes without any warning.
Applies to: All Kubernetes versions
What it means
Kubernetes supports a kubectl client within one minor version above or below the API server it talks to. Beyond that, behaviour is undefined rather than blocked: some commands work, some fail with confusing errors, and some silently do the wrong thing because a field the client sends has changed meaning or no longer exists. The failures this produces are hard to attribute precisely because they do not identify themselves as version problems — a field that is quietly dropped or an API version that has been removed produces an error about the resource, not about the client.
Most common causes
- A kubectl installed long ago and never updated while clusters moved on.
- Working against several clusters at different versions with a single client.
- A CI image pinning an old kubectl.
- A cluster upgraded across several minor versions at once.
- A package manager holding kubectl at a distribution version much older than the cluster.
How to diagnose it
- Compare the two versions:
kubectl versionreports client and server. - Check the difference in minor versions — more than one in either direction is outside support.
- Check whether the failing operation involves an API that changed between those versions.
- Test the same command with a matching client version to confirm the diagnosis.
How to fix it
- Update kubectl to within one minor version of the cluster.
- Use a version manager or per-cluster wrapper when working across clusters at different versions.
- Pin the kubectl version in CI images to match the target cluster, and update both together.
- Upgrade clusters incrementally rather than skipping minor versions, which keeps every client and controller inside its supported window.
Notes
The failure mode that matters is the silent one. A version-skewed client can send a manifest that the server accepts while dropping a field the client did not know to serialise correctly, producing an object that differs from what was written with no error at all.
Related
- no matches for kind — The cluster does not recognise this resource type
- error validating data — The manifest does not match the schema
Sources
- Kubernetes documentation — Version Skew Policy
- Kubernetes documentation — Install and Set Up kubectl
- Kubernetes documentation — Deprecation Policy