Hi,
I've working on a prototype Mesos framework to launch docker containers.
I'm getting as far as seeing my container start up but after one minute if
gets killed due to:
Terminating executor default of framework
20140929-155916-16777343-5050-2708-0004 because it did not register within
1mins
Here is the code I am using in my scheduler, which was based on one of the
examples:
@Override
public void resourceOffers(SchedulerDriver schedulerDriver,
List<Protos.Offer> offers) {
logger.info("resourceOffers() with {} offers", offers.size());
for (Protos.Offer offer : offers) {
List<Protos.TaskInfo> tasks = new ArrayList<Protos.TaskInfo>();
if (launchedTasks < totalTasks) {
Protos.TaskID taskId = Protos.TaskID.newBuilder()
.setValue(Integer.toString(launchedTasks++)).build();
logger.info("Launching task " + taskId.getValue());
// docker image info
Protos.ContainerInfo.DockerInfo.Builder dockerInfoBuilder =
Protos.ContainerInfo.DockerInfo.newBuilder();
dockerInfoBuilder.setImage("codefutures/dbshards_zookeeper");
// container info
Protos.ContainerInfo.Builder containerInfoBuilder =
Protos.ContainerInfo.newBuilder();
containerInfoBuilder.setType(Protos.ContainerInfo.Type.DOCKER);
containerInfoBuilder.setDocker(dockerInfoBuilder.build());
// create executor for the container
Protos.ExecutorInfo executor = Protos.ExecutorInfo.newBuilder()
.setExecutorId(Protos.ExecutorID.newBuilder().setValue("default"))
.setCommand(Protos.CommandInfo.newBuilder().setShell(false))
.setContainer(containerInfoBuilder)
.setName("Test Executor (Docker)")
.setSource("docker_test")
.build();
// create task to run
Protos.TaskInfo task = Protos.TaskInfo.newBuilder()
.setName("task " + taskId.getValue())
.setTaskId(taskId)
.setSlaveId(offer.getSlaveId())
.addResources(Protos.Resource.newBuilder()
.setName("cpus")
.setType(Protos.Value.Type.SCALAR)
.setScalar(Protos.Value.Scalar.newBuilder().setValue(1)))
.addResources(Protos.Resource.newBuilder()
.setName("mem")
.setType(Protos.Value.Type.SCALAR)
.setScalar(Protos.Value.Scalar.newBuilder().setValue(128)))
.setExecutor(Protos.ExecutorInfo.newBuilder(executor))
.build();
tasks.add(task);
}
Protos.Filters filters =
Protos.Filters.newBuilder().setRefuseSeconds(1).build();
schedulerDriver.launchTasks(offer.getId(), tasks, filters);
}
}
Am I missing some steps with this approach?
Thanks,
Andy.
--
Andy Grove
VP Engineering
CodeFutures Corporation