kubernetes/kops · error

error reading cluster configuration: %v

Error message

error reading cluster configuration: %v

What it means

This error is returned by kops' GetCluster helper when the clientset call to read the cluster's configuration from the state store fails. It wraps the underlying error (state store connection issues, permissions, network problems, or cluster simply not existing in the state store). It is thrown because kops requires the full cluster spec before performing subcommands like creating instance groups or secrets.

Source

Thrown at cmd/kops/root.go:350

		}
	}

	return c.clusterName
}

func GetCluster(ctx context.Context, factory commandutils.Factory, clusterName string) (*kopsapi.Cluster, error) {
	if clusterName == "" {
		return nil, field.Required(field.NewPath("clusterName"), "Cluster name is required")
	}

	clientset, err := factory.KopsClient()
	if err != nil {
		return nil, err
	}

	cluster, err := clientset.GetCluster(ctx, clusterName)
	if err != nil {
		return nil, fmt.Errorf("error reading cluster configuration: %v", err)
	}
	if cluster == nil {
		return nil, fmt.Errorf("cluster %q not found", clusterName)
	}

	if clusterName != cluster.ObjectMeta.Name {
		return nil, fmt.Errorf("cluster name did not match expected name: %v vs %v", clusterName, cluster.ObjectMeta.Name)
	}
	return cluster, nil
}

func GetClusterNameForCompletionNoKubeconfig(clusterArgs []string) (clusterName string, completions []string, directive cobra.ShellCompDirective) {
	if len(clusterArgs) > 0 {
		return clusterArgs[0], nil, 0
	}

	if rootCommand.clusterName != "" {
		return rootCommand.clusterName, nil, 0

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Verify the cluster exists: kops get clusters (check the exact name and that KOPS_STATE_STORE points at the right store).
  2. Export the correct state store: export KOPS_STATE_STORE=s3://<bucket> (or set --state flag).
  3. Run with -v=10 to see the wrapped underlying error and fix that (auth, networking, permissions).
  4. If the cluster is gone, recreate it with kops create cluster before running the subcommand.

Example fix

// before
kops create ig nodes --name wrong-cluster-name
// after
export KOPS_STATE_STORE=s3://my-state-bucket
kops get clusters  # confirm exact name
kops create ig nodes --name cluster.k8s.local
Defensive patterns

Strategy: validation

Validate before calling

export KOPS_STATE_STORE=s3://my-state-bucket
kops get clusters | grep -Fx "$CLUSTER_NAME" || { echo "cluster $CLUSTER_NAME not in state store"; exit 1; }

Try / catch

cluster, err := GetCluster(ctx, clusterName)
if err != nil {
    return fmt.Errorf("could not load cluster %q from state store %q: %w", clusterName, os.Getenv("KOPS_STATE_STORE"), err)
}

Prevention

When it happens

Trigger: Any caller (RunCreateInstanceGroup, RunCreateKeypair, RunCreateSecret*, RunCreateSSHPublicKey) invokes clientset.GetCluster and the underlying registry returns a non-nil error — e.g. the state store is unreachable, the cluster object does not exist (ErrNotFound), or VFS credentials are invalid.

Common situations: Typo in --name or KOPS_CLUSTER_NAME; KOPS_STATE_STORE env var unset, wrong, or the bucket not existing; cluster never created so no config exists in the state store; expired/missing cloud credentials preventing VFS/S3 access.

Related errors


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