kubernetes/kops · error

cannot parse kubernetes version %q: %v

Error message

cannot parse kubernetes version %q: %v

What it means

Wraps a failure of apisutil.ParseKubernetesVersion in checkControlPlaneRunningVersion: the configured Kubernetes version string (e.g. from the cluster spec/channel) is not a parseable semver version, so node versions cannot be compared against it.

Source

Thrown at cmd/kops/update_cluster.go:650

// checkControlPlaneRunningVersion returns the minimum control plane running version
func checkControlPlaneRunningVersion(ctx context.Context, clusterName string, version string) (string, error) {
	configLoadingRules := clientcmd.NewDefaultClientConfigLoadingRules()
	config, err := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
		configLoadingRules,
		&clientcmd.ConfigOverrides{CurrentContext: clusterName}).ClientConfig()
	if err != nil {
		return version, fmt.Errorf("cannot load kubecfg settings for %q: %v", clusterName, err)
	}

	k8sClient, err := kubernetes.NewForConfig(config)
	if err != nil {
		return version, fmt.Errorf("cannot build kubernetes api client for %q: %v", clusterName, err)
	}

	parsedVersion, err := apisutil.ParseKubernetesVersion(version)
	if err != nil {
		return version, fmt.Errorf("cannot parse kubernetes version %q: %v", clusterName, err)
	}
	nodeList, err := k8sClient.CoreV1().Nodes().List(ctx, metav1.ListOptions{
		LabelSelector: "node-role.kubernetes.io/control-plane",
	})
	if err != nil {
		return version, fmt.Errorf("cannot list nodes in cluster %q: %v", clusterName, err)
	}
	for _, node := range nodeList.Items {
		if apisutil.IsKubernetesGTE(node.Status.NodeInfo.KubeletVersion, *parsedVersion) {
			version = node.Status.NodeInfo.KubeletVersion
			parsedVersion, _ = apisutil.ParseKubernetesVersion(version)
		}

	}
	return strings.TrimPrefix(version, "v"), nil
}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Check kops.spec.kubernetesVersion in the cluster spec
  2. Use a full semver string like v1.28.5
  3. Update the channel or pin a valid version
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at cmd/kops/update_cluster.go:650 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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