kubernetes/kops · error

unable to locate asset %q

Error message

unable to locate asset %q

What it means

After Find succeeds, a nil kubelet asset means no `kubelet` binary asset was registered for this cluster/version, so nodeup cannot place the kubelet binary at b.kubeletPath(). Mirrors error 680 but for the kubelet asset.

Source

Thrown at nodeup/pkg/model/kubelet.go:171

	{
		t, err := b.buildSystemdEnvironmentFile(c.Context(), kubeletConfig)
		if err != nil {
			return err
		}
		c.AddTask(t)
	}

	{
		// @TODO Extract to common function?
		assetName := "kubelet"
		assetPath := ""
		// @TODO make Find call to an interface, we cannot mock out this function because it finds a file on disk
		asset, err := b.Assets.Find(assetName, assetPath)
		if err != nil {
			return fmt.Errorf("trying to locate asset %q: %v", assetName, err)
		}
		if asset == nil {
			return fmt.Errorf("unable to locate asset %q", assetName)
		}

		c.AddTask(&nodetasks.File{
			Path:     b.kubeletPath(),
			Contents: asset,
			Type:     nodetasks.FileType_File,
			Mode:     s("0755"),
		})
	}
	{
		if kubeletConfig.PodManifestPath != "" {
			t, err := b.buildManifestDirectory(kubeletConfig)
			if err != nil {
				return err
			}
			c.EnsureTask(t)
		}
	}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Verify the kubelet asset exists in the asset store at the expected arch-specific URL.
  2. Correct the cluster's kubernetesVersion to a version with published kubelet binaries.
  3. Re-run kops update cluster to regenerate/refresh assets, then retry nodeup.
  4. For air-gapped setups, upload the exact kubelet binary matching the cluster version.

Example fix

// before
kubernetesVersion: v1.32.0-alpha.99
// after
kubernetesVersion: v1.32.0
Defensive patterns

Strategy: validation

Validate before calling

u := fmt.Sprintf("%s/%s/bin/linux/amd64/kubelet", baseURL, k8sVersion)
resp, err := http.Head(u)
if err != nil || resp.StatusCode != http.StatusOK {
    return fmt.Errorf("kubelet binary not published at %s", u)
}

Prevention

When it happens

Trigger: Assets.Find("kubelet", "") returns (nil, nil): the asset registry contains no kubelet asset — wrong kubernetesVersion, incomplete mirror, or assets not generated for the target arch.

Common situations: Air-gapped installs missing the kubelet binary in the mirror; unsupported/typo'd Kubernetes version; nodeup run before `kops update` uploaded assets.

Related errors


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