kubernetes/kops · error
karpenter requires --discovery-store
Error message
karpenter requires --discovery-store
What it means
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.
Source
Thrown at upup/pkg/fi/cloudup/new_cluster.go:472
discoveryServiceURL += universeID + "/"
cluster.Spec.ServiceAccountIssuerDiscovery = &api.ServiceAccountIssuerDiscoveryConfig{
DiscoveryService: &api.DiscoveryServiceOptions{
URL: discoveryServiceURL,
},
}
if cluster.GetCloudProvider() == api.CloudProviderAWS {
cluster.Spec.ServiceAccountIssuerDiscovery.EnableAWSOIDCProvider = true
cluster.Spec.IAM.UseServiceAccountExternalPermissions = new(true)
}
}
var nodes []*api.InstanceGroup
switch opt.InstanceManager {
case "karpenter":
if opt.DiscoveryStore == "" {
return nil, fmt.Errorf("karpenter requires --discovery-store")
}
cluster.Spec.Karpenter = &api.KarpenterConfig{
Enabled: true,
}
nodes, err = setupKarpenterNodes(opt)
if err != nil {
return nil, err
}
case "cloudgroups":
nodes, err = setupNodes(opt, cluster, zoneToSubnetsMap)
if err != nil {
return nil, err
}
default:
return nil, fmt.Errorf("invalid value %q for --instance-manager", opt.InstanceManager)
}
apiservers, err := setupAPIServers(opt, cluster, zoneToSubnetsMap)View on GitHub (pinned to 4c8573c808)
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
Example fix
// before kops create cluster --instance-manager karpenter --name c.example.com --cloud aws // after kops create cluster --instance-manager karpenter --discovery-store s3://my-bucket/discovery --name c.example.com --cloud aws
Defensive patterns
Strategy: validation
Validate before calling
if opt.InstanceManager == "karpenter" && opt.DiscoveryStore == "" {
return fmt.Errorf("--discovery-store is required with --instance-manager karpenter")
} Prevention
- Always pair --instance-manager karpenter with --discovery-store
- Set DiscoveryStore whenever InstanceManager is set to karpenter in code
- Document the dependency in provisioning scripts
When it happens
Trigger: `kops create cluster --instance-manager karpenter` without --discovery-store, or NewClusterOptions with InstanceManager:"karpenter" and DiscoveryStore:"".
Common situations: Users opting into karpenter on AWS but not configuring OIDC discovery; scripts copied from non-karpenter examples; forgetting that karpenter imposes this extra requirement.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- error building DiscoveryStore for cluster: %v
- marshaling Karpenter resource for %q: %w
- building amiSelectorTerms for %q: %w
- building instance profile for %q: %w
- building tags for %q: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/4397f7f2f5b2de15.
Report an issue: GitHub.