kubernetes/kops · error

Akamai (Linode) support is currently alpha, and is feature-g

Error message

Akamai (Linode) support is currently alpha, and is feature-gated. Please export KOPS_FEATURE_FLAGS=Linode

What it means

Akamai (Linode) support in kOps is alpha and feature-gated. apply_cluster.go Run rejects any apply with cloudProvider=linode unless the 'Linode' feature flag is enabled, failing fast before contacting the Linode API.

Source

Thrown at upup/pkg/fi/cloudup/apply_cluster.go:505

			if !featureflag.Scaleway.Enabled() {
				return nil, fmt.Errorf("Scaleway support is currently alpha, and is feature-gated.  export KOPS_FEATURE_FLAGS=Scaleway")
			}

			if len(sshPublicKeys) == 0 {
				return nil, fmt.Errorf("SSH public key must be specified when running with Scaleway (create with `kops create secret --name %s sshpublickey admin -i ~/.ssh/id_rsa.pub`)", cluster.ObjectMeta.Name)
			}
			if len(sshPublicKeys) != 1 {
				return nil, fmt.Errorf("exactly one 'admin' SSH public key can be specified when running with Scaleway; please delete a key using `kops delete secret`")
			}

			scwCloud := cloud.(scaleway.ScwCloud)
			scwZone = scwCloud.Zone()
		}

	case kops.CloudProviderLinode:
		{
			if !featureflag.Linode.Enabled() {
				return nil, fmt.Errorf("Akamai (Linode) support is currently alpha, and is feature-gated. Please export KOPS_FEATURE_FLAGS=Linode")
			}
		}

	case kops.CloudProviderMetal:
		// Metal is a special case, we don't need to do anything here (yet)

	default:
		return nil, fmt.Errorf("unknown CloudProvider %q", cluster.GetCloudProvider())
	}

	modelContext.SSHPublicKeys = sshPublicKeys
	modelContext.Region = cloud.Region()

	if cluster.PublishesDNSRecords() {
		err = validateDNS(cluster, cloud)
		if err != nil {
			return nil, err
		}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Export the flag: `export KOPS_FEATURE_FLAGS=Linode` and rerun
  2. Combine with other flags comma-separated if needed: `export KOPS_FEATURE_FLAGS=Linode,Scaleway`
  3. Confirm the flag name is exactly 'Linode' (case-sensitive)

Example fix

// before
kops update cluster --name lin.example.com
// after
export KOPS_FEATURE_FLAGS=Linode
kops update cluster --name lin.example.com
Defensive patterns

Strategy: validation

Validate before calling

case "$KOPS_FEATURE_FLAGS" in *Linode*) echo ok;; *) export KOPS_FEATURE_FLAGS="${KOPS_FEATURE_FLAGS:+$KOPS_FEATURE_FLAGS,}Linode";; esac

Try / catch

if err := run(); err != nil { if strings.Contains(err.Error(), "feature-gated") { return fmt.Errorf("export KOPS_FEATURE_FLAGS=Linode required: %w", err) } return err }

Prevention

When it happens

Trigger: `kops update cluster` (or other apply paths) on a cluster with cloudProvider=linode while KOPS_FEATURE_FLAGS lacks 'Linode'.

Common situations: Users testing Linode support without the env var set; CI runners missing the flag; stale shells where the export wasn't applied.

Related errors


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