kubernetes/kops · error

apiserver nodes requires the APIServerNodes feature flag to

Error message

apiserver nodes requires the APIServerNodes feature flag to be enabled

What it means

The InstanceGroup uses the apiserver-only role, but the APIServerNodes feature flag is not enabled. Apiserver nodes are experimental; kops refuses to populate specs for them unless the flag is turned on via KOPS_FEATURE_FLAGS.

Source

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

		if ig.Spec.MaxSize == nil {
			ig.Spec.MaxSize = new(int32(1))
		}
	} else if ig.Spec.Role.HasBastion() {
		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 bastions: %v", err)
			}
		}
		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 {

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Enable the flag: KOPS_FEATURE_FLAGS=APIServerNodes
  2. Or change the instance group role to a supported non-experimental role
Defensive patterns

Strategy: validation

When it happens

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