kubernetes/kops · error

bare-metal support requires the Metal feature flag to be ena

Error message

bare-metal support requires the Metal feature flag to be enabled

What it means

The Metal (bare-metal) cloud provider is gated behind the experimental `Metal` feature flag. Selecting CloudProviderMetal without enabling that flag returns this error, since bare-metal support is not considered stable.

Source

Thrown at upup/pkg/fi/cloudup/new_cluster.go:389

			Monitor: &api.OpenstackMonitor{
				Delay:      new("15s"),
				Timeout:    new("10s"),
				MaxRetries: new(3),
			},
		}
		initializeOpenstack(opt, cluster)
		osCloud, err := openstack.NewOpenstackCloud(cluster, "openstackmodel")
		if err != nil {
			return nil, err
		}
		cloud = osCloud
	case api.CloudProviderScaleway:
		cluster.Spec.CloudProvider.Scaleway = &api.ScalewaySpec{}
	case api.CloudProviderLinode:
		cluster.Spec.CloudProvider.Linode = &api.LinodeSpec{}
	case api.CloudProviderMetal:
		if !featureflag.Metal.Enabled() {
			return nil, fmt.Errorf("bare-metal support requires the Metal feature flag to be enabled")
		}
		if cluster.Labels == nil {
			cluster.Labels = make(map[string]string)
		}
		cluster.Labels[api.AlphaLabelCloudProvider] = string(api.CloudProviderMetal)
	default:
		return nil, fmt.Errorf("unsupported cloud provider %s", opt.CloudProvider)
	}

	if opt.DiscoveryStore != "" {
		discoveryPath, err := clientset.VFSContext().BuildVfsPath(opt.DiscoveryStore)
		if err != nil {
			return nil, fmt.Errorf("error building DiscoveryStore for cluster: %v", err)
		}
		cluster.Spec.ServiceAccountIssuerDiscovery = &api.ServiceAccountIssuerDiscoveryConfig{
			DiscoveryStore: discoveryPath.Join(cluster.Name).Path(),
		}
		if cluster.GetCloudProvider() == api.CloudProviderAWS {

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Enable the flag: export KOPS_FEATURE_FLAGS=Metal (or add to existing feature flags)
  2. Choose a supported stable cloud provider instead
  3. Upgrade kOps if a newer release has graduated Metal support

Example fix

// before
kops create cluster --cloud metal --name c.example.com
// after
export KOPS_FEATURE_FLAGS=Metal
kops create cluster --cloud metal --name c.example.com
Defensive patterns

Strategy: validation

Validate before calling

if opt.CloudProvider == string(api.CloudProviderMetal) && !featureflag.Metal.Enabled() {
    return fmt.Errorf("set KOPS_FEATURE_FLAGS=Metal before using --cloud metal")
}

Prevention

When it happens

Trigger: `kops create cluster --cloud metal` (or opt.CloudProvider == "metal") while the KOPS_FEATURE_FLAGS environment variable or featureflag.Metal is not enabled.

Common situations: Trying bare-metal on a stock kOps install; CI environments that enable metal only in some jobs; users following experimental docs without setting the flag.

Related errors


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