kubernetes/kops · critical

error finding runc asset

Error message

error finding runc asset

What it means

installContainerd searches the nodeup assets for exactly one file matching /runc.(amd64|arm64)$ (the runc binary downloaded from the opencontainers/runc release). The code requires exactly one match; if the count is not 1 — zero (missing asset) or more than one (ambiguous/duplicate assets) — it returns this error at nodeup/pkg/model/containerd.go:143.

Source

Thrown at nodeup/pkg/model/containerd.go:143

	f := b.Assets.FindMatches(regexp.MustCompile(`^bin/(containerd|ctr)`))
	if len(f) == 0 {
		return fmt.Errorf("unable to find any containerd binaries in assets")
	}
	for k, v := range f {
		fileTask := &nodetasks.File{
			Path:     filepath.Join("/usr/bin", k),
			Contents: v,
			Type:     nodetasks.FileType_File,
			Mode:     new("0755"),
		}
		c.AddTask(fileTask)
	}

	// Add runc binary from https://github.com/opencontainers/runc
	// https://github.com/containerd/containerd/issues/6541
	f = b.Assets.FindMatches(regexp.MustCompile(`/runc\.(amd64|arm64)$`))
	if len(f) != 1 {
		return fmt.Errorf("error finding runc asset")
	}
	for _, v := range f {
		fileTask := &nodetasks.File{
			Path:     "/usr/sbin/runc",
			Contents: v,
			Type:     nodetasks.FileType_File,
			Mode:     new("0755"),
		}
		c.AddTask(fileTask)
	}

	// Add configuration file for easier use of crictl
	b.addCrictlConfig(c)

	var containerdVersion string
	if b.NodeupConfig.ContainerdConfig != nil {
		containerdVersion = fi.ValueOf(b.NodeupConfig.ContainerdConfig.Version)
	} else {

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Ensure the nodeup assets include exactly one runc.<arch> file for the node's architecture (amd64 or arm64)
  2. Align the node's OS/arch with the assets actually bundled by `kops create/update cluster`
  3. If mirroring assets, verify the runc release asset (https://github.com/opencontainers/runc) was included and named as expected (runc.amd64 / runc.arm64)
  4. Remove duplicate/conflicting runc asset entries if FindMatches yields more than one

Example fix

// asset archive before
bin/containerd
// asset archive after
bin/containerd
runc.arm64   # runc binary for the node arch, exactly one
Defensive patterns

Strategy: validation

Validate before calling

tar -tf nodeup-assets.tar.gz | grep -E '/runc\.(amd64|arm64)$' | wc -l
# must output exactly 1 before running nodeup

Prevention

When it happens

Trigger: The asset archive lacks a runc binary for the node architecture (regex /runc\.(amd64|arm64)$ matches 0 files), or contains multiple runc files so FindMatches returns >1 entries. Triggered during node bootstrap whenever containerd installation is enabled.

Common situations: Arm64 nodes provisioned with amd64-only assets, mirrored asset stores missing the runc release download, kOps version mismatch where newer nodeup expects runc assets the older cluster config does not carry, or custom asset overrides that add a second runc file.

Related errors


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