kubernetes/kops · error
not making progress deleting resources; giving up
Error message
not making progress deleting resources; giving up
What it means
DeleteResources tracks how many consecutive iterations pass without any resource transitioning to Done. After `count` no-progress iterations (when count != 0), it concludes deletion is stuck and returns this error instead of looping forever. Unlike the timeout error, this indicates active failures, not just slowness.
Source
Thrown at pkg/resources/ops/delete.go:176
wg.Wait()
}
if len(resourceMap) == len(done) {
return nil
}
fmt.Printf("Not all resources deleted; waiting before reattempting deletion\n")
for k := range resourceMap {
if _, d := done[k]; d {
continue
}
fmt.Printf("\t%s\n", k)
}
iterationsWithNoProgress++
if iterationsWithNoProgress > count && count != 0 {
return fmt.Errorf("not making progress deleting resources; giving up")
}
time.Sleep(interval)
}
}
View on GitHub (pinned to 4c8573c808)
Solutions
- Inspect the per-resource failure messages printed during the loop (the failed resources are listed) and fix root causes (IAM, dependency, region)
- Remove or resolve the blocking resource manually in the cloud, then re-run deletion
- Increase the count parameter to allow more retry iterations if failures are transient
- Verify credentials/region match the cluster; fix API errors causing every delete to fail
- Run with -v (klog verbosity) to see dependency skip messages and identify the stuck dependency chain
Example fix
// before: persistent auth failure on DeleteSnapshot
// IAM policy missing ec2:DeleteSnapshot → same resources fail every pass
// after: grant the permission, then re-run
// {"Effect":"Allow","Action":["ec2:DeleteSnapshot"],"Resource":"*"} Defensive patterns
Strategy: try-catch
Validate before calling
// Pre-validate IAM permissions for resource types in the set before deleting
types := map[string]bool{}
for _, r := range resourceMap { types[r.Type] = true }
klog.Infof("resource types to delete: %v", types) // ensure credentials cover them all Try / catch
err := ops.DeleteResources(cloud, resourceMap, count, interval, wait)
if err != nil && strings.Contains(err.Error(), "not making progress") {
klog.Errorf("deletion stuck; inspect failed resources above and fix IAM/dependencies before retrying")
// do not blind-retry; diagnose the repeatedly failing resource first
return err
} Prevention
- Read the listed failed resource keys in output before retrying
- Verify IAM permissions for every resource type being deleted
- Use klog -v=4 to see which dependencies never complete
- Remove blocking cloud-side dependencies (targets, attachments) manually
When it happens
Trigger: DeleteResources (pkg/resources/ops/delete.go:176) reaches iterationsWithNoProgress > count because every pass the same resources fail to delete — e.g. an API returns a persistent error (auth failure, dependency conflict, resource not actually removable) so `failed` never drains.
Common situations: IAM permissions missing for deleting a specific resource type (e.g. ec2:DeleteVolume); a resource with a cloud-side dependency not modeled in depMap; API rate limits; region mismatch making deletes 404 repeatedly; deleting only a subset of a cluster where an unselected resource blocks others.
Related errors
- wait time exceeded during resources deletion
- error deleting instance %q, node %q: %v
- error deleting instance %q: %v
- error deleting volume: %v
- DeleteGroup not implemented on azureCloud
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/a06d84d3f21bfe71.
Report an issue: GitHub.