Use Nomad jobs as runners instead of allocations

As we can't control which allocations are destroyed when downscaling a job, we decided
to use Nomad jobs as our runners. Thus for each runner we prewarm for an environment,
a corresponding job is created in Nomad. We create a default job that serves as a template
for the runners. Using this, already existing execution environments can easily be restored,
once Poseidon is restarted.
This commit is contained in:
sirkrypt0
2021-06-08 14:42:35 +02:00
committed by Maximilian Paß
parent 8de489929e
commit c7d59810e5
20 changed files with 333 additions and 266 deletions

View File

@@ -50,18 +50,23 @@ func (m *NomadEnvironmentManager) CreateOrUpdate(
}
exists := m.runnerManager.EnvironmentExists(runner.EnvironmentID(idInt))
err = m.registerJob(id,
err = m.registerDefaultJob(id,
request.PrewarmingPoolSize, request.CPULimit, request.MemoryLimit,
request.Image, request.NetworkAccess, request.ExposedPorts)
if err == nil {
if !exists {
m.runnerManager.RegisterEnvironment(
runner.EnvironmentID(idInt), runner.NomadJobID(id), request.PrewarmingPoolSize)
}
return !exists, nil
if err != nil {
return false, err
}
return false, err
// TODO: If already exists, make sure to update all existing runners as well
if !exists {
err = m.runnerManager.RegisterEnvironment(
runner.EnvironmentID(idInt), request.PrewarmingPoolSize)
if err != nil {
return false, err
}
}
return !exists, nil
}
func (m *NomadEnvironmentManager) Delete(id string) {
@@ -70,5 +75,8 @@ func (m *NomadEnvironmentManager) Delete(id string) {
func (m *NomadEnvironmentManager) Load() {
// ToDo: remove create default execution environment for debugging purposes
m.runnerManager.RegisterEnvironment(runner.EnvironmentID(0), "python", 5)
err := m.runnerManager.RegisterEnvironment(runner.EnvironmentID(0), 5)
if err != nil {
return
}
}