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

  1. Upgrade the cluster: kops upgrade cluster mycluster.example.com --yes (may need to step through intermediate versions)
  2. Set spec.kubernetesVersion to at least OldestSupportedKubernetesVersion, then apply
  3. Plan an in-place upgrade path: bump one minor at a time, running node rolling-updates between steps
  4. 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

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


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/9462b40e8db81208. Report an issue: GitHub.