GODOCKER
Welcome to GoDocker project
GoDocker is a batch scheduler for computing tasks, based on Docker. It acts as a frontend above several Docker scheduler/management tools (Docker Swarm, Kubernetes, Apache Mesos) for end users in a multi user system (ldap, ...).
With GoDocker, end user can submit some jobs (basically a script) to execute on a remote node, accoding to its requirements (cpu, mem, ports, gpu, ..). The software will mount required and authorized directories (home directory, some shared resources) in the container, directories being limited and controlled by GoDocker.
It also manages the scheduling of the tasks according to user/projects priorities and quotas.
At last, user can connect to the container for interactive sessions via SSH.
All components are scalable and can be set in HA or distributed mode, and all components can be monitored (Prometheus metrics, Consul or etcd checks, ...).
Most of the features are available via plugins, meaning that new systems or features can be added to extend the software.
GoDocker will give the power of Docker images (reproductibility, easy tool usage, ...) to users not having Docker priviledges on your system, it will control and limit the resources a user can use.
From a end-user perspective, user jobs will be run in containers meaning they are isolated from other jobs (cpu and mem reservation). He can also execute his job in a container specific to his tasks with all the software he needs, and using different Linux operating systems (Debian, CentOS, ...).
Look at feature for more details.
Releases
Features
Setup
If not using Mesos, and not willing to install mesos python libraries, it is possible to delete plugins/mesos.* files.
Docker swarm
Swarm must listen on a tcp port, no specific requirement
2 plugins are available: swarm for the standalone swarm manager, and dockerswarm for the docker integrated swarm mode.
Kubernetes
No specific requirement
Apache Mesos
Mesos is the favorite framework for GoDocker as it provides deeper control on tasks and provides more feature.
Depending on Mesos release, one may need to install python eggs on scheduler node. Recent releases of Mesos install them with their packages, but some older releases provide them separately. From go-docker 1.3.2 (included), HTTP API of mesos is used and software does not need anymore mesos python libs installation.
Increase executor timeout for image pulls:
echo '5mins' > /etc/mesos-slave/executor_registration_timeout
typical slave config for GoDocker (/etc/mesos-slave directory):
[mesos-slave]# ls attributes containerizers executor_registration_timeout isolation [mesos-slave] cat attributes hostname:192.168.1.37 <= IP of the slave node, optional from go-docker >= 1.3.2 [mesos-slave] cat containerizers docker,mesos [mesos-slave] cat executor_registration_timeout 5mins [mesos-slave] cat isolation filesystem/linux,docker/runtime,cgroups/cpu,cgroups/mem,network/cni
filesystem
/linux
,docker
/runtime isolation params are needed for Mesos unified containerizer.
cgroups/cpu,cgroups/mem,network/cni are needed for CNI support with Docker images.
From go-docker 1.3.2, hostname in attributes is not needed anymore as long as slave is declared with a routable hostname in the network. If not the case, then hostname attribute still need to bne declared.
For CNI support, one need additional files network_cni_config_dir and network_cni_plugins_dir (see Mesos configuration/setup guide)
For unified containerize, an other file is needed, image_providers, with content docker
More info on Mesos: http://mesos.apache.org/documentation/latest/container-image/, http://mesos.apache.org/documentation/latest/mesos-containerizer/
Installation
see README.md and INSTALL.md
cAdvisor must be deployed on all nodes for monitoring (global cpu/ram/io usage).
docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor:latest
Or one can use bubble-chamber project (https://github.com/osallou/sysdig-analyser) in place of cadvisor.
Bubble-chamber records containers usage with details of what occurs in the container (cpu/ram/io per process within the container), based on sysdig. With bubble-chamber, user and/or admin can view, during and after job completion, what are the precise resource usage per process, which files were accessed (read/write but also system files access). Stats are recorded for a defined amount of time, with details per minutes/hour/day.
Configuration
see README.md and go-d.ini.sample
Important fields:
- plugins_dir
- shared_dir
- allow_root
- allow_user_image
- volumes
- mongo_url
- redis_host
- scheduler_policy
- executors
- mesos/kube_server/docker (depending on executor)
- auth_policy
- web_endpoint
- ldap_XXX
Sub projects
GoDocker Web: Web UI and REST API interface
GoDocker Live: Node.js server application to get live logs of a job
GoDocker CLI: Command line interface
docker-plugin-zfs: Docker plugin to get local node temporary storage with quotas
Integration
GoDocker DRMAA: Partial DRMAA support library
go-docker-fireworks: examples and lib to work with Fireworks workflows
go-docker-airflow: examples and lib to work with Airflow workflows
Deployment
godocker-chef: Chef recipes
godocker-vagrant: Creates a vagrant machine (VirtualBox) with a GoDocker base install (using Docker swarm), for test setup.
godocker-ec2: EC2 deployment scripts
docker container: https://hub.docker.com/r/osallou/go-docker/
- To use docker-compose, see https://bitbucket.org/osallou/go-docker/src/8117d5b82b75ae755d3c0603d36cf7ef30a5e8f0/docker-files/compose/?at=master
vagrant test box (test only): https://atlas.hashicorp.com/osallou/boxes/godocker