{"record":{"id":"fd9891586a263685","repo":"kubernetes/kops","slug":"etcd-nodes-requires-the-experimentalnodes-feature","errorCode":null,"errorMessage":"etcd nodes requires the ExperimentalNodes feature flag to be enabled","messagePattern":"etcd nodes requires the ExperimentalNodes feature flag to be enabled","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/populate_instancegroup_spec.go","lineNumber":126,"sourceCode":"\t\t\tig.Spec.MachineType, err = defaultMachineType(cloud, cluster, ig)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"error assigning default machine type for bastions: %v\", err)\n\t\t\t}\n\t\t}\n\t\tif ig.Spec.MinSize == nil {\n\t\t\tig.Spec.MinSize = new(int32(1))\n\t\t}\n\t\tif ig.Spec.MaxSize == nil {\n\t\t\tig.Spec.MaxSize = new(int32(1))\n\t\t}\n\t} else {\n\t\tif ig.IsAPIServerOnly() && !featureflag.APIServerNodes.Enabled() {\n\t\t\treturn nil, fmt.Errorf(\"apiserver nodes requires the APIServerNodes feature flag to be enabled\")\n\t\t}\n\t\tif !featureflag.ExperimentalRoles.Enabled() {\n\t\t\tswitch {\n\t\t\tcase ig.Spec.Role.HasEtcd():\n\t\t\t\treturn nil, fmt.Errorf(\"etcd nodes requires the ExperimentalNodes feature flag to be enabled\")\n\t\t\tcase ig.Spec.Role.HasScheduler():\n\t\t\t\treturn nil, fmt.Errorf(\"scheduler nodes requires the ExperimentalNodes feature flag to be enabled\")\n\t\t\tcase ig.Spec.Role.HasKubeControllerManager():\n\t\t\t\treturn nil, fmt.Errorf(\"kube-controller-manager nodes requires the ExperimentalNodes feature flag to be enabled\")\n\t\t\t}\n\t\t}\n\t\tif ig.Spec.MachineType == \"\" {\n\t\t\tig.Spec.MachineType, err = defaultMachineType(cloud, cluster, ig)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"error assigning default machine type for nodes: %v\", err)\n\t\t\t}\n\t\t}\n\t\tif ig.Spec.Manager != kops.InstanceManagerKarpenter {\n\t\t\tif ig.Spec.MinSize == nil {\n\t\t\t\tig.Spec.MinSize = new(int32(2))\n\t\t\t}\n\t\t\tif ig.Spec.MaxSize == nil {\n\t\t\t\tig.Spec.MaxSize = new(int32(2))","sourceCodeStart":108,"sourceCodeEnd":144,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/populate_instancegroup_spec.go#L108-L144","documentation":"The InstanceGroup uses the etcd role while the ExperimentalRoles feature flag is disabled. Etcd-only node roles are experimental; spec population is refused until the flag is enabled.","triggerScenarios":"Thrown at upup/pkg/fi/cloudup/populate_instancegroup_spec.go:126 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Enable the flag: KOPS_FEATURE_FLAGS=ExperimentalRoles","Or remove the etcd role from the instance group"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}