kubernetes/kops · error
found group with unexpected name: %v
Error message
found group with unexpected name: %v
What it means
After GetCloudGroups returns, DeleteInstanceGroup sanity-checks that every returned cloud group maps back to the requested InstanceGroup name. A mismatch (nil InstanceGroup link or different name) means the cloud enumerator returned something unexpected, so it aborts rather than deleting the wrong resources.
Source
Thrown at pkg/instancegroups/delete.go:48
// DeleteInstanceGroup removes the cloud resources for an InstanceGroup
type DeleteInstanceGroup struct {
Cluster *api.Cluster
Cloud fi.Cloud
Clientset simple.Clientset
}
// DeleteInstanceGroup deletes a cloud instance group
func (d *DeleteInstanceGroup) DeleteInstanceGroup(group *api.InstanceGroup) error {
ctx := context.TODO()
groups, err := d.Cloud.GetCloudGroups(d.Cluster, []*api.InstanceGroup{group}, false, nil)
if err != nil {
return fmt.Errorf("error finding CloudInstanceGroups: %v", err)
}
for _, g := range groups {
if g.InstanceGroup == nil || g.InstanceGroup.Name != group.Name {
return fmt.Errorf("found group with unexpected name: %v", g)
}
}
// TODO should we drain nodes and validate the cluster?
for _, g := range groups {
klog.Infof("Deleting %q", group.ObjectMeta.Name)
err = d.Cloud.DeleteGroup(g)
if err != nil {
return fmt.Errorf("error deleting cloud resources for InstanceGroup: %v", err)
}
}
err = d.Clientset.InstanceGroupsFor(d.Cluster).Delete(ctx, group.ObjectMeta.Name, metav1.DeleteOptions{})
if err != nil {
return err
}
View on GitHub (pinned to 4c8573c808)
Solutions
- Compare the printed group name with the requested instance group name to find the mismatch
- Delete or reconcile the orphaned/mismatched cloud group manually, then retry
- Check the cloud provider's GetCloudGroups implementation if it mis-links groups
Defensive patterns
Strategy: validation
Validate before calling
// Pre-check that the requested group name is consistent with the cloud state
_, err := cloud.GetCloudGroups(cluster, []*api.InstanceGroup{group}, false, nil)
if err == nil {
log.Printf("verified cloud group matches instance group %q before delete", group.Name)
} Try / catch
err := d.DeleteInstanceGroup(group)
if err != nil && strings.Contains(err.Error(), "found group with unexpected name") {
log.Fatalf("cloud state out of sync with instance group %q: %v", group.Name, err)
} Prevention
- Never rename kops instance groups without reconciling cloud resources
- Investigate stale/orphaned cloud groups via the cloud console
- Keep provider GetCloudGroups mapping logic in sync with kOps versions
When it happens
Trigger: GetCloudGroups returns groups whose .InstanceGroup is nil or whose name differs from the api.InstanceGroup passed in — e.g. a stale/mismatched cloud group or a provider bug in group-to-IG matching.
Common situations: Renaming an instance group in kOps while the old cloud group still exists, cloud provider returning related autoscaling groups, or provider mapping code failing to back-fill the InstanceGroup pointer.
Related errors
- error finding CloudInstanceGroups: %v
- error deleting cloud resources for InstanceGroup: %v
- DeleteGroup not implemented on azureCloud
- failed to delete %s: %w
- reading from stdin: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/248422cc411aec9d.
Report an issue: GitHub.