kubernetes/kops · error
unable to determine machine architecture for InstanceGroup %
Error message
unable to determine machine architecture for InstanceGroup %q: %v
What it means
When ig.Spec.Image is empty, kOps must pick a default image matching the machine's CPU architecture. It calls MachineArchitecture(cloud, ig.Spec.MachineType); if that lookup fails (unsupported machine type string or cloud API error), this error is returned.
Source
Thrown at upup/pkg/fi/cloudup/populate_instancegroup_spec.go:152
ig.Spec.MachineType, err = defaultMachineType(cloud, cluster, ig)
if err != nil {
return nil, fmt.Errorf("error assigning default machine type for nodes: %v", err)
}
}
if ig.Spec.Manager != kops.InstanceManagerKarpenter {
if ig.Spec.MinSize == nil {
ig.Spec.MinSize = new(int32(2))
}
if ig.Spec.MaxSize == nil {
ig.Spec.MaxSize = new(int32(2))
}
}
}
if ig.Spec.Image == "" {
architecture, err := MachineArchitecture(cloud, ig.Spec.MachineType)
if err != nil {
return nil, fmt.Errorf("unable to determine machine architecture for InstanceGroup %q: %v", ig.ObjectMeta.Name, err)
}
ig.Spec.Image, err = defaultImage(cluster, channel, architecture)
if err != nil {
return nil, fmt.Errorf("unable to determine default image for instance group %q: %v", ig.ObjectMeta.Name, err)
}
}
if ig.Spec.Tenancy != "" && ig.Spec.Tenancy != "default" {
switch cluster.GetCloudProvider() {
case kops.CloudProviderAWS:
if _, ok := awsDedicatedInstanceExceptions[ig.Spec.MachineType]; ok {
return nil, fmt.Errorf("invalid dedicated instance type: %s", ig.Spec.MachineType)
}
default:
klog.Warning("Trying to set tenancy on non-AWS environment")
}
}
View on GitHub (pinned to 4c8573c808)
Solutions
- Set spec.image explicitly so architecture inference is skipped
- Correct the spec.machineType value (verify it exists for your cloud/region)
- Upgrade kOps to gain support for newer instance families/architectures
- Inspect the wrapped error for the underlying cloud API failure (credentials, region)
Example fix
// before spec: machineType: t3.medium // after spec: machineType: t3.medium image: ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*
Defensive patterns
Strategy: validation
Validate before calling
// Validate machine type + image pair before populating
if ig.Spec.Image == "" {
// only omit image when machineType is a known, supported family
known := []string{"t3.", "m5.", "c5.", "n1-", "Standard_D"}
ok := false
for _, p := range known {
if strings.HasPrefix(ig.Spec.MachineType, p) { ok = true; break }
}
if !ok { return fmt.Errorf("set spec.image explicitly for machineType %q", ig.Spec.MachineType) }
} Prevention
- Pin spec.image so architecture inference never runs
- Use `kops toolbox instance-selector` to get valid machineType/image combos
- Keep kOps current for new instance families
When it happens
Trigger: Creating/updating an InstanceGroup with no spec.image set and a machine type whose architecture cannot be resolved — e.g. unknown/typo'd instance type, or cloud (GCE/Azure/etc.) whose MachineArchitecture implementation cannot parse or query the type.
Common situations: Typo in machineType; machine type not valid for the cloud provider; custom machine types the architecture mapper doesn't recognize; older kOps versions lacking support for new instance families (e.g. ARM Graviton types).
Related errors
- did not find owner for node %q
- invalid InstanceGroup name: %v
- error building InstanceGroup from CAPI Machine: %w
- must specify %q label with cluster name to create instanceGr
- cluster %q not found
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/0898b5b59c61cf94.
Report an issue: GitHub.