abiosoft/colima · error

update not supported for the %s runtime

Error message

update not supported for the %s runtime

What it means

kubernetesRuntime.Update is intentionally not implemented: it unconditionally returns (false, fmt.Errorf("update not supported for the %s runtime", Name)) where Name is the k3s-based runtime. Colima's update flow only supports updating the container runtimes (docker/containerd); the embedded Kubernetes cluster must be recreated rather than upgraded in place.

Source

Thrown at environment/container/kubernetes/kubernetes.go:277

	// cleanup is manual
	a.Add(c.deleteAllContainers)

	c.teardownKubeconfig(a)

	return a.Exec()
}

func (c kubernetesRuntime) Dependencies() []string {
	return []string{"kubectl"}
}

func (c kubernetesRuntime) Version(context.Context) string {
	version, _ := c.host.RunOutput("kubectl", "--context", config.CurrentProfile().ID, "version", "--short")
	return version
}

func (c *kubernetesRuntime) Update(ctx context.Context) (bool, error) {
	return false, fmt.Errorf("update not supported for the %s runtime", Name)
}

View on GitHub (pinned to c3a5f9184d)

Solutions

  1. Update the VM and container runtime only ('colima update') and recreate the cluster to change Kubernetes version: 'colima delete profile --data kubernetes' (or delete the profile with --data) then 'colima start --kubernetes --kubernetes-version <new>'.
  2. Pin the version explicitly on start: 'colima start --kubernetes --kubernetes-version v1.31.2+k3s1' after recreating.
  3. If you hit this programmatically, check runtime identity first and skip Update for the kubernetes runtime (see defense strategy).
  4. Track upstream colima: in-place k3s upgrades are a known gap; watch release notes for 'colima update' kubernetes support.

Example fix

// before
updated, err := runtime.Update(ctx) // errors for kubernetes runtime
// after
if runtime.Name() == kubernetes.Name {
    log.Println("kubernetes runtime must be recreated to update; skipping")
} else {
    updated, err := runtime.Update(ctx)
}
Defensive patterns

Strategy: type-guard

Validate before calling

// skip the call for runtimes that do not support update
if runtime.Name() == kubernetes.Name { // "kubernetes"
    return errors.New("kubernetes runtime cannot be updated in place; recreate the cluster")
}

Type guard

func isUpdatableRuntime(name string) bool {
    switch name {
    case docker.Name, containerd.Name:
        return true
    default: // kubernetes and none
        return false
    }
}

Try / catch

updated, err := runtime.Update(ctx)
if err != nil && strings.Contains(err.Error(), "update not supported") {
    updated, err = false, nil // expected for the kubernetes runtime
}

Prevention

When it happens

Trigger: Any code path or CLI flow that calls Update() on the kubernetes runtime — most visibly 'colima update' on a profile that has Kubernetes enabled, or an external consumer of the environment package calling runtime.Update(ctx).

Common situations: Users run 'colima update' expecting both docker and k3s to be upgraded; scripts automating 'colima update' after a brew upgrade; CI pipelines trying to keep the cluster current.

Related errors


AI-assisted analysis of abiosoft/colima@c3a5f9184d (2026-08-15). Data as JSON: /api/errors/9554297237cf00cf. Report an issue: GitHub.