Skip to content

ci(e2e): preload Calico images into kind through the runner mirror - #5178

Open
matthewgrossman wants to merge 2 commits into
mainfrom
ci/kind-calico-preload/matthewgrossman
Open

matthewgrossman wants to merge 2 commits into
mainfrom
ci/kind-calico-preload/matthewgrossman

Conversation

@matthewgrossman

@matthewgrossman matthewgrossman commented Nov 3, 2026 •

Copy link
Copy Markdown
Member

Summary

The Kubernetes app-listener lanes fail in "Set up kind cluster" when Docker Hub rate-limits the Calico image pulls. This preloads the Calico images through the runner's Docker Hub mirror, so the kind node never pulls from Docker Hub itself.

Related Issue

No issue: this fixes flaky CI (see CONTRIBUTING.md). The failure:

All four kubernetes-app-listener-e2e jobs fail before any test runs, with:

Failed to pull image "docker.io/calico/cni:v3.30.3": ... unexpected status from HEAD request to https://registry-1.docker.io/v2/calico/cni/manifests/v3.30.3: 429 Too Many Requests

Seen on the #5078 run 41542126954 (attempt 1). #4936's own run 41516710979 also needed a second attempt for these four lanes.

The runners' Docker daemon pulls Docker Hub through the nv-gha-runners mirror (https://dc.local.gha-runners.nvidia.com), which is why host-side pulls such as the python:3.12-slim fixture don't fail. Calico's images are pulled by containerd inside the kind node, which doesn't use the host's mirror or credentials, so those pulls go to Docker Hub anonymously. The repo has no Docker Hub credential to log in with.

Changes

  • setup-e2e-kind: before applying the Calico manifest, pull Calico's three images (cni, node, kube-controllers) on the host and load them into kind, the same way the action already loads the OpenShell images. Calico uses imagePullPolicy: IfNotPresent, so the node uses the loaded copies.
  • The Calico version is defined once (CALICO_VERSION) and used for both the manifest URL and the image tags, so a version bump updates both.

Testing

  • Ran the new step against a local kind cluster with the default CNI disabled (arm64 images, since the test machine is arm64). Calico rolled out and the node went Ready. All five Calico containers reported already present on machine, so the node pulled nothing.
  • shellcheck on the step script; YAML parses
  • The app-listener lanes pass in this PR's Branch E2E run
  • Unit tests added/updated (if applicable)
  • E2E tests added/updated (if applicable)

Checklist

  • Follows Conventional Commits
  • Commits are signed off (DCO)

The app-listener lanes install Calico into kind. The kind node's
containerd pulled the Calico images from Docker Hub anonymously and
hit 429 Too Many Requests, failing all four lanes in kind setup.

Pull the images on the host instead, where the runner's Docker daemon
uses the nv-gha-runners Docker Hub mirror, and load them into kind
before applying the manifest. The image list comes from the manifest,
so a Calico upgrade cannot add an image that bypasses the preload.

Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
@matthewgrossman matthewgrossman added the test:e2e Requires end-to-end coverage label Nov 3, 2026
@matthewgrossman

Copy link
Copy Markdown
Member Author

/ok to test 1501e07

@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown

Label test:e2e applied for 1501e07. Open the existing run and click Re-run all jobs to execute with the label set. The run will execute the standard E2E suite after building the required gateway, sandbox, and supervisor images once. The matching required CI gate status on this PR will flip green automatically once the run finishes.

TaylorMutch
TaylorMutch previously approved these changes Nov 3, 2026
Name the three Calico images instead of extracting them from the
manifest, and define the Calico version once for both the manifest URL
and the image tags.

Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
@matthewgrossman

Copy link
Copy Markdown
Member Author

/ok to test b074fc5

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

test:e2e Requires end-to-end coverage

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants