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

  1. Add --discovery-store, e.g. --discovery-store s3://my-bucket/discovery
  2. Set opt.DiscoveryStore in NewClusterOptions when InstanceManager is karpenter
  3. 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

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


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/4397f7f2f5b2de15. Report an issue: GitHub.