kubernetes/kops · critical

error registering kops control-plane cluster API: %v

Error message

error registering kops control-plane cluster API: %v

What it means

buildScheme conditionally registers the CAPI control-plane cluster API types when Cluster API is enabled; this wraps that AddToScheme call failing, an internal registration/build error rather than a runtime cluster problem.

Source

Thrown at cmd/kops-controller/main.go:306

func buildScheme(opt *config.Options) (*runtime.Scheme, error) {
	scheme := runtime.NewScheme()
	if err := corev1.AddToScheme(scheme); err != nil {
		return nil, fmt.Errorf("error registering corev1: %v", err)
	}
	if err := v1alpha2.AddToScheme(scheme); err != nil {
		return nil, fmt.Errorf("error registering kops/v1alpha2 API: %v", err)
	}
	// Needed so that the leader-election system can post events
	if err := coordinationv1.AddToScheme(scheme); err != nil {
		return nil, fmt.Errorf("error registering coordinationv1: %v", err)
	}
	if opt.CAPI.IsEnabled() {
		if err := bootstrapapi.AddToScheme(scheme); err != nil {
			return nil, fmt.Errorf("error registering kops bootstrap cluster API: %v", err)
		}
		if err := controlplaneapi.AddToScheme(scheme); err != nil {
			return nil, fmt.Errorf("error registering kops control-plane cluster API: %v", err)
		}
	}

	return scheme, nil
}

func addNodeController(ctx context.Context, mgr manager.Manager, opt *config.Options) error {
	var capiManager *capimanager.Manager
	if opt.CAPI.IsEnabled() {
		capiManager = capimanager.NewManager(mgr.GetClient())
	}

	var identifier nodeidentity.Identifier
	var err error
	switch opt.Cloud {
	case "aws":
		identifier, err = nodeidentityaws.New(ctx, opt.CacheNodeidentityInfo)
		if err != nil {

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Align cluster-api control-plane provider and core versions via `make gomod`
  2. Check go.mod for duplicate provider module versions
  3. Disable --cluster-api if CAPI support is not required
Defensive patterns

Strategy: validation

Validate before calling

if opt.CAPI.IsEnabled() {
	if err := controlplaneapi.AddToScheme(scheme); err != nil {
		return nil, err
	}
}

Prevention

When it happens

Trigger: opt.CAPI.IsEnabled() is true and controlplaneapi.AddToScheme(scheme) errors — duplicate registration or module version skew in the control-plane provider packages.

Common situations: CAPI control-plane provider version incompatible with the vendored sigs.k8s.io/cluster-api core version.

Related errors


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