kubernetes/kops · error
error deleting Akamai (Linode) instance %s(%s): %w
Error message
error deleting Akamai (Linode) instance %s(%s): %w
What it means
deleteInstance deletes a Linode compute instance belonging to the cluster. Failures other than not-found (treated as success) are wrapped with the instance name and ID. This aborts cleanup of that instance.
Source
Thrown at pkg/resources/linode/resources.go:341
return fmt.Errorf("error deleting Akamai (Linode) subnet %s(%s): %w", tracker.Name, tracker.ID, err)
}
return nil
}
// deleteInstance deletes an Akamai (Linode) instance.
func deleteInstance(cloud fi.Cloud, tracker *resources.Resource) error {
c := cloud.(cloudlinode.LinodeCloud)
instanceID, err := parseTrackerIntID(tracker)
if err != nil {
return err
}
if err := c.Client().DeleteInstance(context.Background(), instanceID); err != nil {
if linodego.IsNotFound(err) {
return nil
}
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)View on GitHub (pinned to 4c8573c808)
Solutions
- Retry 'kops delete cluster'; not-found instances are skipped
- Detach and delete attached volumes before the instance
- Use a full read/write API token
- Check for Linode API 429s and back off
- Manually delete the Linode from Cloud Manager if the API keeps refusing, then re-run kops delete
Defensive patterns
Strategy: retry
Validate before calling
inst, err := c.Client().GetInstance(ctx, instanceID) // if err is nil, detach volumes / confirm instance state before DeleteInstance
Type guard
func isNotFound(err error) bool { return linodego.IsNotFound(err) } Try / catch
if err := c.Client().DeleteInstance(ctx, instanceID); err != nil {
if linodego.IsNotFound(err) { return nil }
if linodego.ErrCode(err) == 429 { /* backoff and retry */ }
return fmt.Errorf("error deleting Akamai (Linode) instance %s(%s): %w", tracker.Name, tracker.ID, err)
} Prevention
- Detach/delete block storage volumes before deleting instances
- Use write-scoped tokens for deletion
- Back off on 429s during bulk teardown
- Re-run kops delete to converge; missing instances are tolerated
When it happens
Trigger: c.Client().DeleteInstance(ctx, instanceID) fails: token lacks write scopes, instance has protected resources (e.g., attached volumes with deletion protection), network error, or rate limit during bulk deletion.
Common situations: Shutting down an instance with attached block storage volumes first is required; read-only token during delete; API rate limiting when deleting many instances; instance already being deleted by another process (may surface as conflict).
Related errors
- error deleting Akamai (Linode) SSH key %s(%s): %w
- error deleting Akamai (Linode) VPC %s(%s): %w
- error listing Akamai (Linode) SSH keys: %w
- error listing Akamai (Linode) VPC subnets for VPC %s(%d): %w
- error deleting Akamai (Linode) subnet %s(%s): %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/c2d9d086a692f324.
Report an issue: GitHub.