- The source for the cyberdojo/puller Docker image.
- A docker-containerized micro-service for https://cyber-dojo.org.
- A Rack based http server for pulling docker images onto cyberdojo/runner nodes.
When run_cyber_dojo_sh(id,files,manifest) reaches a runner
daemonSet pod we want the language-test-framework image named in manifest
(eg cyberdojofoundation/gcc_assert:93eefc6
) to already be on the node, otherwise the likely result will be a 'false' timeout if the docker run is allowed (which will implicitly pull the image).
Worse, it will always timeout if the image contains a layer that never finishes downloading (eg because it is very large and/or the network is low bandwidth) before the docker-run is stopped. Hence we want the docker image to be on all nodes. However, Kubernetes provides no way to call all pods in a daemonSet :(
A long-lived server such as https://cyber-dojo.org can work around this, eg by
making the start-point services daemonSets which pull all images when deployed (typically
the number of new images in a start-point deployment is quite small). However, even for
long-lived servers this approach is not ideal, and it is hopeless for short-lived
servers, which are often on low bandwidth networks. A better approach is to pull a session's
image (eg cyberdojofoundation/csharp_nunit:1452bb7
) on all nodes when a session is created.