You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: kwok/README.md
+18Lines changed: 18 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -231,6 +231,24 @@ Manual trigger:
231
231
gh workflow run kwok-recipes.yaml -f recipe=your-recipe-name
232
232
```
233
233
234
+
### Public image cache
235
+
236
+
The lanes need two images from public registries — the in-cluster OCI registry and, for the `*-git` deployers, Gitea. Both are pinned in `.settings.yaml` under `testing_tools`.
237
+
238
+
A full Tier 3 run fans out to well over a hundred concurrent jobs, and a job that pulls these itself competes with every sibling for the same per-IP quota at the registry: 127 jobs pulling at once reliably gets one or two shed, which reddens the run with nothing wrong in the repo (#2483). So CI pulls each image exactly once, in the `prime-images` job, and carries it to the matrix as a tarball in `actions/cache`. Each test job loads from that tarball, and `preload_image` then finds the image already in the host Docker cache and never contacts the registry.
239
+
240
+
`kwok/scripts/lib/image-cache.sh` owns both ends, so the priming job and the test jobs derive the cache key from the same code:
bash kwok/scripts/lib/image-cache.sh save <dir> <image> # pull once, write the tarball
245
+
bash kwok/scripts/lib/image-cache.sh load <dir> <image> # restore it into Docker
246
+
```
247
+
248
+
Priming is a hard gate: if an image is genuinely unreachable, the run fails there rather than in every lane. Loading is best effort — a cache miss falls back to `preload_image`'s pull, and the kubelet pull behind that, so a cold cache degrades to the old behavior instead of failing.
249
+
250
+
Local runs (`make kwok-test-all`) do not use the cache; they pull through `preload_image` as before.
251
+
234
252
## Troubleshooting
235
253
236
254
**Pods stuck Pending** — check tolerations and node selectors:
0 commit comments