{"record":{"id":"4397f7f2f5b2de15","repo":"kubernetes/kops","slug":"karpenter-requires-discovery-store","errorCode":null,"errorMessage":"karpenter requires --discovery-store","messagePattern":"karpenter requires --discovery-store","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/new_cluster.go","lineNumber":472,"sourceCode":"\t\tdiscoveryServiceURL += universeID + \"/\"\n\n\t\tcluster.Spec.ServiceAccountIssuerDiscovery = &api.ServiceAccountIssuerDiscoveryConfig{\n\t\t\tDiscoveryService: &api.DiscoveryServiceOptions{\n\t\t\t\tURL: discoveryServiceURL,\n\t\t\t},\n\t\t}\n\t\tif cluster.GetCloudProvider() == api.CloudProviderAWS {\n\t\t\tcluster.Spec.ServiceAccountIssuerDiscovery.EnableAWSOIDCProvider = true\n\t\t\tcluster.Spec.IAM.UseServiceAccountExternalPermissions = new(true)\n\t\t}\n\t}\n\n\tvar nodes []*api.InstanceGroup\n\n\tswitch opt.InstanceManager {\n\tcase \"karpenter\":\n\t\tif opt.DiscoveryStore == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"karpenter requires --discovery-store\")\n\t\t}\n\t\tcluster.Spec.Karpenter = &api.KarpenterConfig{\n\t\t\tEnabled: true,\n\t\t}\n\t\tnodes, err = setupKarpenterNodes(opt)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase \"cloudgroups\":\n\t\tnodes, err = setupNodes(opt, cluster, zoneToSubnetsMap)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"invalid value %q for --instance-manager\", opt.InstanceManager)\n\t}\n\n\tapiservers, err := setupAPIServers(opt, cluster, zoneToSubnetsMap)","sourceCodeStart":454,"sourceCodeEnd":490,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/new_cluster.go#L454-L490","documentation":"Karpenter-managed clusters require an OIDC discovery store so service-account token issuers can be verified. If opt.InstanceManager == \"karpenter\" but opt.DiscoveryStore is empty, NewCluster returns this error before calling setupKarpenterNodes.","triggerScenarios":"`kops create cluster --instance-manager karpenter` without --discovery-store, or NewClusterOptions with InstanceManager:\"karpenter\" and DiscoveryStore:\"\".","commonSituations":"Users opting into karpenter on AWS but not configuring OIDC discovery; scripts copied from non-karpenter examples; forgetting that karpenter imposes this extra requirement.","solutions":["Add --discovery-store, e.g. --discovery-store s3://my-bucket/discovery","Set opt.DiscoveryStore in NewClusterOptions when InstanceManager is karpenter","Use the default cloudGroup instance manager if you don't need discovery"],"exampleFix":"// before\nkops create cluster --instance-manager karpenter --name c.example.com --cloud aws\n// after\nkops create cluster --instance-manager karpenter --discovery-store s3://my-bucket/discovery --name c.example.com --cloud aws","handlingStrategy":"validation","validationCode":"if opt.InstanceManager == \"karpenter\" && opt.DiscoveryStore == \"\" {\n    return fmt.Errorf(\"--discovery-store is required with --instance-manager karpenter\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always pair --instance-manager karpenter with --discovery-store","Set DiscoveryStore whenever InstanceManager is set to karpenter in code","Document the dependency in provisioning scripts"],"tags":["karpenter","discovery-store","prerequisite"],"backgroundTag":"missing-required-argument","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"}