kubernetes/kops · error

unable to determine default image for cloud provider %q and

Error message

unable to determine default image for cloud provider %q and architecture %q

What it means

defaultImage falls through all known cloud providers and architectures without finding a default image, so it returns this error. It means kops has no built-in default AMI/image mapping for the given cloud provider and CPU architecture combination.

Source

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

		if image != nil {
			return image.Name, nil
		}
	}

	switch cluster.GetCloudProvider() {
	case api.CloudProviderDO:
		return defaultDOImageNoble, nil
	case api.CloudProviderHetzner:
		return defaultHetznerImageNoble, nil
	case api.CloudProviderScaleway:
		return defaultScalewayImageNoble, nil
	case api.CloudProviderLinode:
		return defaultLinodeImageNoble, nil
	case api.CloudProviderMetal:
		return "dummy-metal-image", nil
	}

	return "", fmt.Errorf("unable to determine default image for cloud provider %q and architecture %q", cluster.GetCloudProvider(), architecture)
}

func MachineArchitecture(cloud fi.Cloud, machineType string) (architectures.Architecture, error) {
	if machineType == "" {
		return architectures.ArchitectureAmd64, nil
	}

	// Some calls only have AWS initialised at this point and in other cases pass in nil as cloud.
	if cloud == nil {
		return architectures.ArchitectureAmd64, nil
	}

	switch cloud.ProviderID() {
	case api.CloudProviderAWS:
		info, err := cloud.(awsup.AWSCloud).DescribeInstanceType(machineType)
		if err != nil {
			return "", fmt.Errorf("error finding instance info for instance type %q: %w", machineType, err)
		}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Specify --image explicitly so the default lookup is skipped
  2. Use a supported architecture (amd64) for the provider
  3. Upgrade kops — newer releases add default images for more providers/architectures

Example fix

// before
kops create cluster --cloud linode --arch arm64 ...
// after
kops create cluster --cloud linode --image linode/debian12 ...
Defensive patterns

Strategy: validation

Validate before calling

if image == "" {
    // explicitly pass an image instead of relying on defaults
    cmd = append(cmd, "--image", requestedImage)
}

Prevention

When it happens

Trigger: `kops create cluster` (or cluster creation path) reaching defaultImage with a cloud provider that has no case in the switch for the requested architecture, or a provider/architecture combination not covered (e.g. a newly added provider before image defaults exist).

Common situations: Using a newer/exotic cloud provider without an image default; requesting arm64 on a provider where only amd64 defaults are defined; custom builds where the provider switch was not extended.

Related errors


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