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

  1. Ensure the volume is detached (instances deleted/unmounted) before deleting
  2. Retry the delete — it is idempotent
  3. Use an API token with write access
  4. Check the wrapped error status for 'volume is attached' style messages
  5. 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

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


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/efeb3e510f5c57cb. Report an issue: GitHub.