kubernetes/kops · error

unsupported runc version: %q

Error message

unsupported runc version: %q

What it means

findRuncVersionUrl validates the requested runc version against the minimum supported version. runc download URLs on GitHub changed layout at 1.1.0, so versions older than 1.1.0 cannot be resolved to a known asset URL. The error is thrown when the parsed semver is strictly less than 1.1.0.

Source

Thrown at pkg/nodemodel/wellknownassets/runc.go:81

			return nil, fmt.Errorf("unable to find runc version")
		}
		u, err := findRuncVersionUrl(arch, version)
		if err != nil {
			return nil, err
		}
		canonicalURL = u
	}

	return buildFileAsset(assetBuilder, canonicalURL, knownHash)
}

func findRuncVersionUrl(arch architectures.Architecture, version string) (string, error) {
	sv, err := semver.ParseTolerant(version)
	if err != nil {
		return "", fmt.Errorf("unable to parse version string: %q", version)
	}
	if sv.LT(semver.MustParse("1.1.0")) {
		return "", fmt.Errorf("unsupported runc version: %q", version)
	}

	var u string
	switch arch {
	case architectures.ArchitectureAmd64:
		u = fmt.Sprintf(runcVersionUrlAmd64, version)
	case architectures.ArchitectureArm64:
		u = fmt.Sprintf(runcVersionUrlArm64, version)
	default:
		return "", fmt.Errorf("unknown arch: %q", arch)
	}

	if u == "" {
		return "", fmt.Errorf("unknown url for runc version: %s - %s", arch, version)
	}

	return u, nil
}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Bump the runc version in the cluster spec to >= 1.1.0 (e.g. 1.1.12 or newer).
  2. Remove any explicit runc version override so the kOps default for your kOps version is used.
  3. If the old version is truly required, use a kOps release that still supports pre-1.1.0 runc.

Example fix

// before (ClusterSpec)
runc:
  version: 1.0.2
// after
runc:
  version: 1.1.12
Defensive patterns

Strategy: validation

Validate before calling

sv, err := semver.ParseTolerant(runcVersion)
if err != nil || sv.LT(semver.MustParse("1.1.0")) {
    return fmt.Errorf("runc version %q must be >= 1.1.0", runcVersion)
}

Try / catch

if err := findRuncVersionUrl(arch, version); err != nil {
    if strings.Contains(err.Error(), "unsupported runc version") {
        // fall back to a known-good default version
    }
}

Prevention

When it happens

Trigger: Calling FindRuncAsset (directly or via nodeup/WellKnownAssets) with a runc version string that parses as semver but is < 1.1.0, e.g. "1.0.2" or "1.0.0-rc95".

Common situations: Pinning an old runc version in cluster spec (runc.version) for a legacy cluster; upgrading kOps while keeping an old containerd/runc pin; copying a version from an outdated cluster template.

Related errors


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