{"record":{"id":"854456c217c805d4","repo":"kubernetes/kops","slug":"scheduler-nodes-requires-the-experimentalroles-fea","errorCode":null,"errorMessage":"scheduler nodes requires the ExperimentalRoles feature flag to be enabled","messagePattern":"scheduler nodes requires the ExperimentalRoles feature flag to be enabled","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/new_cluster.go","lineNumber":548,"sourceCode":"\n\t\t\t}\n\t\t} else if g.Spec.Role.HasBastion() {\n\t\t\tif g.Spec.MachineType == \"\" {\n\t\t\t\tg.Spec.MachineType, err = defaultMachineType(cloud, cluster, g)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"error assigning default machine type for bastions: %v\", err)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif g.IsAPIServerOnly() && !featureflag.APIServerNodes.Enabled() {\n\t\t\t\treturn nil, fmt.Errorf(\"apiserver nodes requires the APIServerNodes feature flag to be enabled\")\n\t\t\t}\n\t\t\tif !featureflag.ExperimentalRoles.Enabled() {\n\t\t\t\tswitch {\n\t\t\t\tcase g.Spec.Role.HasEtcd():\n\t\t\t\t\treturn nil, fmt.Errorf(\"etcd nodes requires the ExperimentalRoles feature flag to be enabled\")\n\t\t\t\tcase g.Spec.Role.HasScheduler():\n\t\t\t\t\treturn nil, fmt.Errorf(\"scheduler nodes requires the ExperimentalRoles feature flag to be enabled\")\n\t\t\t\tcase g.Spec.Role.HasKubeControllerManager():\n\t\t\t\t\treturn nil, fmt.Errorf(\"kube-controller-manager nodes requires the ExperimentalRoles feature flag to be enabled\")\n\t\t\t\t}\n\t\t\t}\n\t\t\tif g.Spec.MachineType == \"\" {\n\t\t\t\tg.Spec.MachineType, err = defaultMachineType(cloud, cluster, g)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"error assigning default machine type for nodes: %v\", err)\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ig.Spec.Tenancy != \"\" && ig.Spec.Tenancy != \"default\" {\n\t\t\tswitch cluster.GetCloudProvider() {\n\t\t\tcase api.CloudProviderAWS:\n\t\t\t\tif _, ok := awsDedicatedInstanceExceptions[g.Spec.MachineType]; ok {\n\t\t\t\t\treturn nil, fmt.Errorf(\"invalid dedicated instance type: %s\", g.Spec.MachineType)","sourceCodeStart":530,"sourceCodeEnd":566,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/new_cluster.go#L530-L566","documentation":"Dedicated scheduler node groups are part of the experimental role split and are rejected unless the ExperimentalRoles feature flag is enabled. The check occurs while validating instance-group roles in NewCluster.","triggerScenarios":"An instance group whose role includes the scheduler component is present at `kops create cluster` time without ExperimentalRoles enabled.","commonSituations":"Custom cluster specs splitting control-plane components onto separate machines; inherited specs from teams that ran with the flag; flag lost when moving between environments/CI.","solutions":["Enable the flag: `export KOPS_FEATURE_FLAGS=ExperimentalRoles`.","Merge the scheduler role back into a standard control-plane instance group.","Upgrade kops if the role split is supported natively in newer versions."],"exampleFix":"// before\nexport KOPS_FEATURE_FLAGS=\"\"\nkops create cluster --name=example.com   # scheduler-only IG\n// after\nexport KOPS_FEATURE_FLAGS=ExperimentalRoles\nkops create cluster --name=example.com","handlingStrategy":"validation","validationCode":"if hasRole(igGroups, \"scheduler\") && !featureFlagEnabled(\"ExperimentalRoles\") {\n    return errors.New(\"ExperimentalRoles flag required for dedicated scheduler IGs\")\n}","typeGuard":null,"tryCatchPattern":"_, err := NewCluster(opt, cluster, zoneMap)\nif err != nil {\n    if strings.Contains(err.Error(), \"scheduler nodes requires\") {\n        return fmt.Errorf(\"enable ExperimentalRoles or merge scheduler role into control-plane IG: %w\", err)\n    }\n    return err\n}","preventionTips":["Audit IG role specs against enabled feature flags before create","Set KOPS_FEATURE_FLAGS consistently across environments","Pin cluster templates to supported, non-experimental topologies"],"tags":["feature-flag","scheduler","instance-group","kops"],"backgroundTag":"feature-flag-not-enabled","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}