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
- Specify --image explicitly so the default lookup is skipped
- Use a supported architecture (amd64) for the provider
- 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
- Always pass --image for non-mainstream providers/architectures
- Pin an image per provider/arch in your tooling
- Keep kops updated for new provider defaults
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
- unable to determine machine architecture for InstanceGroup %
- DNS not implemented on azureCloud
- error identifying node %q: %v
- error building node identifier: %w
- unsupported cloud provider for authenticator %q
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/addb0fd8ea6f4a6f.
Report an issue: GitHub.