kubernetes/kops · error

kube-controller-manager nodes requires the ExperimentalNodes

Error message

kube-controller-manager nodes requires the ExperimentalNodes feature flag to be enabled

What it means

The InstanceGroup uses the kube-controller-manager role while the ExperimentalRoles feature flag is disabled. Control-component node roles are experimental; spec population is refused until the flag is enabled.

Source

Thrown at upup/pkg/fi/cloudup/populate_instancegroup_spec.go:130

		}
		if ig.Spec.MinSize == nil {
			ig.Spec.MinSize = new(int32(1))
		}
		if ig.Spec.MaxSize == nil {
			ig.Spec.MaxSize = new(int32(1))
		}
	} else {
		if ig.IsAPIServerOnly() && !featureflag.APIServerNodes.Enabled() {
			return nil, fmt.Errorf("apiserver nodes requires the APIServerNodes feature flag to be enabled")
		}
		if !featureflag.ExperimentalRoles.Enabled() {
			switch {
			case ig.Spec.Role.HasEtcd():
				return nil, fmt.Errorf("etcd nodes requires the ExperimentalNodes feature flag to be enabled")
			case ig.Spec.Role.HasScheduler():
				return nil, fmt.Errorf("scheduler nodes requires the ExperimentalNodes feature flag to be enabled")
			case ig.Spec.Role.HasKubeControllerManager():
				return nil, fmt.Errorf("kube-controller-manager nodes requires the ExperimentalNodes feature flag to be enabled")
			}
		}
		if ig.Spec.MachineType == "" {
			ig.Spec.MachineType, err = defaultMachineType(cloud, cluster, ig)
			if err != nil {
				return nil, fmt.Errorf("error assigning default machine type for nodes: %v", err)
			}
		}
		if ig.Spec.Manager != kops.InstanceManagerKarpenter {
			if ig.Spec.MinSize == nil {
				ig.Spec.MinSize = new(int32(2))
			}
			if ig.Spec.MaxSize == nil {
				ig.Spec.MaxSize = new(int32(2))
			}
		}
	}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Enable the flag: KOPS_FEATURE_FLAGS=ExperimentalRoles
  2. Or remove the kube-controller-manager role from the instance group
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at upup/pkg/fi/cloudup/populate_instancegroup_spec.go:130 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/d1c1cd1296ffe3a9. Report an issue: GitHub.