Go-Smart Simulation Architecture - Docker Workflows¶
This workflow consists of a per-family Python module setting up configuration and a solver wrapped in a Docker image. Strictly, there are currently two Docker workflows: one entirely inside Docker and one using GSSF volumetric meshing prior to running a Docker instance.
Definition¶
Definitions for families in this workflow should include a start.py
file. This
will be called with Python in an environment containing the
Python container module.
Variants¶
Docker-only Workflow¶
Any volumetric meshing must take place inside the Docker instance. This means that the image must contain both a solver and a mesher (if meshing is required).
Docker+CGAL Workflow¶
This hybrid scheme configures the GSSF mesher as would be the
case in GSSF, but stops after the volumetric
(CGAL) meshing step. This MSH file is
provided as input to a simulation-only Docker instance. Combining these is
achieved by use of a family mixin, a module that generates only
mesher-cgal relevant parts of GSSF-XML,
gssa.families.mesher_gssf.MesherGSSFMixin.
This is included into, for instance, gssa.families.fenics.FenicsFamily
. (In
fact, the same mix-in is used by GSSF itself for meshing configuration).
Caveats¶
This workflow uses the dockerlaunch daemon to orchestrate
containers while minimizing exposure of control. It must be installed and running on the host
for simulation containers to be launched by the Glossia container.
While containerized Glossia is not essential, the exemplar setup
mounts the dockerlaunch
socket to a known location in the Glossia container and ensures that the
internal user is in the dockerlaunch
group necessary for socket access. This is in lieu of stable
user namespacing in Docker, and will be updated as this becomes standard.
Container pruning¶
The dockerlaunch
daemon only allows a Glossia server to kill containers with a known GUID, that
the current instance of dockerlaunch
has created.
To reduce the risk of denial-of-service attack on the simulation back-end, once dockerlaunch
sees a certain level
of running containers (default: 30), it will refuse to create more and return a Too many containers
error.
Moreover, while the Glossia server should protect against this by tidying up automatically, if bugs are present, or
dockerlaunch
is restarted, the number of redundant containers running creeps up without a critical number of
simultaneous simulations occuring. In this situation, manual intervention is required - an administrator should
check sudo docker ps
on the host for orphaned or unnecessary containers and remove them. No restart is required -
once the number is reduced, dockerlaunch
should be willing to start new simulation containers.