kubernetes/kops · critical
kubernetes upgrade is required
Error message
kubernetes upgrade is required
What it means
validateKubernetesVersion hard-fails when the cluster's spec.kubernetesVersion is OLDER than OldestSupportedKubernetesVersion — that Kubernetes version is no longer supported by kops, so the apply is refused with 'kubernetes upgrade is required'. Unlike the channel-based checks, there is no env bypass for this branch.
Source
Thrown at upup/pkg/fi/cloudup/apply_cluster.go:1018
fmt.Printf("(you can bypass this check by exporting KOPS_RUN_TOO_NEW_VERSION)\n")
}
fmt.Printf("\n")
fmt.Printf("%s\n", starline)
fmt.Printf("\n")
if !bypassCheck {
return fmt.Errorf("kops upgrade is required")
}
}
}
if !util.IsKubernetesGTE(OldestSupportedKubernetesVersion, *parsed) {
fmt.Printf("This version of Kubernetes is no longer supported; upgrading Kubernetes is required\n")
fmt.Printf("\n")
fmt.Printf("More information: %s\n", buildPermalink("upgrade_k8s", OldestRecommendedKubernetesVersion))
fmt.Printf("\n")
fmt.Printf("%s\n", starline)
fmt.Printf("\n")
return fmt.Errorf("kubernetes upgrade is required")
}
if !util.IsKubernetesGTE(OldestRecommendedKubernetesVersion, *parsed) && !c.GetAssets {
fmt.Printf("\n")
fmt.Printf("%s\n", starline)
fmt.Printf("\n")
fmt.Printf("Kops support for this Kubernetes version is deprecated and will be removed in a future release.\n")
fmt.Printf("\n")
fmt.Printf("Upgrading Kubernetes is recommended\n")
fmt.Printf("More information: %s\n", buildPermalink("upgrade_k8s", OldestRecommendedKubernetesVersion))
fmt.Printf("\n")
fmt.Printf("%s\n", starline)
fmt.Printf("\n")
}
// TODO: make util.ParseKubernetesVersion not return a pointer
kubernetesVersion := *parsed
View on GitHub (pinned to 4c8573c808)
Solutions
- Upgrade the cluster: kops upgrade cluster mycluster.example.com --yes (may need to step through intermediate versions)
- Set spec.kubernetesVersion to at least OldestSupportedKubernetesVersion, then apply
- Plan an in-place upgrade path: bump one minor at a time, running node rolling-updates between steps
- Read the permalink printed above the error (upgrade_k8s) for supported-version guidance
Example fix
// before spec: kubernetesVersion: 1.24.17 // after kops upgrade cluster mycluster.example.com --yes # resulting spec spec: kubernetesVersion: 1.29.4
Defensive patterns
Strategy: validation
Validate before calling
if !isK8sGTE(OldestSupportedKubernetesVersion, cluster.Spec.KubernetesVersion) {
return fmt.Errorf("kubernetesVersion %s is below %s; run kops upgrade cluster first",
cluster.Spec.KubernetesVersion, OldestSupportedKubernetesVersion)
} Prevention
- Run kops upgrade cluster regularly; never let clusters fall below the supported floor
- Upgrade one Kubernetes minor at a time with rolling updates between steps
- Track kops release notes for upcoming version retirements
- Automate version-compliance checks on cluster specs in CI
When it happens
Trigger: Applying a cluster whose spec.kubernetesVersion is below the OldestSupportedKubernetesVersion constant of the running kops binary (e.g. kops 1.30+ applying a cluster still on Kubernetes 1.24).
Common situations: Long-lived clusters left un-upgraded for many releases; teams skipping required `kops upgrade cluster` runs; forks pinned to deprecated Kubernetes versions; resuming kops maintenance after a long gap.
Related errors
- kops upgrade is required
- error adding needs-update label: %v
- error applying annotation to record addon installation: %v
- error patching needs-update label: %v
- error parsing version spec %q
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/9462b40e8db81208.
Report an issue: GitHub.