kubernetes/kops · error
error deleting Akamai (Linode) volume %s(%s): %w
Error message
error deleting Akamai (Linode) volume %s(%s): %w
What it means
deleteVolume deletes a Linode block storage volume. Failures other than not-found (treated as success) are wrapped with the volume name and ID. It means the Linode API refused or failed the volume deletion.
Source
Thrown at pkg/resources/linode/resources.go:359
return fmt.Errorf("error deleting Akamai (Linode) instance %s(%s): %w", tracker.Name, tracker.ID, err)
}
return nil
}
// deleteVolume deletes an Akamai (Linode) block storage volume.
func deleteVolume(cloud fi.Cloud, tracker *resources.Resource) error {
c := cloud.(cloudlinode.LinodeCloud)
volumeID, err := parseTrackerIntID(tracker)
if err != nil {
return err
}
if err := c.Client().DeleteVolume(context.Background(), volumeID); err != nil {
if linodego.IsNotFound(err) {
return nil
}
return fmt.Errorf("error deleting Akamai (Linode) volume %s(%s): %w", tracker.Name, tracker.ID, err)
}
return nil
}
View on GitHub (pinned to 4c8573c808)
Solutions
- Ensure the volume is detached (instances deleted/unmounted) before deleting
- Retry the delete — it is idempotent
- Use an API token with write access
- Check the wrapped error status for 'volume is attached' style messages
- Delete the volume manually from Linode Cloud Manager as a last resort, then re-run kops delete
Defensive patterns
Strategy: retry
Validate before calling
vol, err := c.Client().GetVolume(ctx, volumeID) // if err == nil && vol.LinodeID != nil -> volume attached; detach before delete
Type guard
func isVolumeAttached(vol *linodego.Volume) bool { return vol != nil && vol.LinodeID != nil } Try / catch
if err := c.Client().DeleteVolume(ctx, volumeID); err != nil {
if linodego.IsNotFound(err) { return nil }
if isAttachedMsg(err) { /* detach volume, then retry */ }
return fmt.Errorf("error deleting Akamai (Linode) volume %s(%s): %w", tracker.Name, tracker.ID, err)
} Prevention
- Ensure instances holding PVs are deleted or volumes detached first
- Check volume attachment state before deletion
- Use write-scoped API tokens
- Retry kops delete after transient storage API errors
When it happens
Trigger: c.Client().DeleteVolume(ctx, volumeID) fails: volume still attached to a running Linode, token lacks write scopes, network error, or rate limit.
Common situations: PV-backed volumes still attached to nodes at delete time; read-only API token; rate limiting during large cluster teardown; region-wide storage API issues.
Related errors
- error deleting Akamai (Linode) SSH key %s(%s): %w
- error deleting Akamai (Linode) VPC %s(%s): %w
- error deleting Akamai (Linode) subnet %s(%s): %w
- error deleting Akamai (Linode) instance %s(%s): %w
- error parsing Akamai (Linode) %s ID %q: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/efeb3e510f5c57cb.
Report an issue: GitHub.