You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by mx...@apache.org on 2016/11/23 16:43:50 UTC

flink git commit: [FLINK-4900] flink-master: Allow to deploy TM with container

Repository: flink
Updated Branches:
  refs/heads/master 4656350fc -> e8318d6f4


[FLINK-4900] flink-master: Allow to deploy TM with container

Allows via a setting to deploy a base image on that a task manager
runs.

This closes #2703.


Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/e8318d6f
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/e8318d6f
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/e8318d6f

Branch: refs/heads/master
Commit: e8318d6f449b0b4720ca2377eae4f98c59f5e494
Parents: 4656350
Author: Makman2 <ma...@alice.de>
Authored: Thu Oct 27 15:18:37 2016 +0200
Committer: Maximilian Michels <mx...@apache.org>
Committed: Wed Nov 23 17:44:00 2016 +0100

----------------------------------------------------------------------
 .../flink/configuration/ConfigConstants.java    | 25 +++++++++++
 .../MesosApplicationMasterRunner.java           | 47 ++++++++++++++++++++
 2 files changed, 72 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flink/blob/e8318d6f/flink-core/src/main/java/org/apache/flink/configuration/ConfigConstants.java
----------------------------------------------------------------------
diff --git a/flink-core/src/main/java/org/apache/flink/configuration/ConfigConstants.java b/flink-core/src/main/java/org/apache/flink/configuration/ConfigConstants.java
index fb5a760..dd17f00 100644
--- a/flink-core/src/main/java/org/apache/flink/configuration/ConfigConstants.java
+++ b/flink-core/src/main/java/org/apache/flink/configuration/ConfigConstants.java
@@ -491,6 +491,29 @@ public final class ConfigConstants {
 	 */
 	public static final String MESOS_RESOURCEMANAGER_TASKS_CPUS = "mesos.resourcemanager.tasks.cpus";
 
+	/**
+	 * The container image to use for task managers.
+	 */
+	public static final String MESOS_RESOURCEMANAGER_TASKS_CONTAINER_IMAGE_NAME =
+		"mesos.resourcemanager.tasks.container.image.name";
+
+	/**
+	 * The type of container to use for task managers. Valid values are
+	 * {@code MESOS_RESOURCEMANAGER_TASKS_CONTAINER_TYPE_MESOS} or
+	 * {@code MESOS_RESOURCEMANAGER_TASKS_CONTAINER_TYPE_DOCKER}.
+	 */
+	public static final String MESOS_RESOURCEMANAGER_TASKS_CONTAINER_TYPE =
+		"mesos.resourcemanager.tasks.container.type";
+
+	/**
+	 * Value for {@code MESOS_RESOURCEMANAGER_TASKS_CONTAINER_TYPE} setting. Tells to use the Mesos containerizer.
+	 */
+	public static final String MESOS_RESOURCEMANAGER_TASKS_CONTAINER_TYPE_MESOS = "mesos";
+	/**
+	 * Value for {@code MESOS_RESOURCEMANAGER_TASKS_CONTAINER_TYPE} setting. Tells to use the Docker containerizer.
+	 */
+	public static final String MESOS_RESOURCEMANAGER_TASKS_CONTAINER_TYPE_DOCKER = "docker";
+
 	// ------------------------ Hadoop Configuration ------------------------
 
 	/**
@@ -1158,6 +1181,8 @@ public final class ConfigConstants {
 
 	public static final String DEFAULT_MESOS_RESOURCEMANAGER_FRAMEWORK_ROLE = "*";
 
+	public static final String DEFAULT_MESOS_RESOURCEMANAGER_TASKS_CONTAINER_IMAGE_TYPE = "mesos";
+
 	// ------------------------ File System Behavior ------------------------
 
 	/**

http://git-wip-us.apache.org/repos/asf/flink/blob/e8318d6f/flink-mesos/src/main/java/org/apache/flink/mesos/runtime/clusterframework/MesosApplicationMasterRunner.java
----------------------------------------------------------------------
diff --git a/flink-mesos/src/main/java/org/apache/flink/mesos/runtime/clusterframework/MesosApplicationMasterRunner.java b/flink-mesos/src/main/java/org/apache/flink/mesos/runtime/clusterframework/MesosApplicationMasterRunner.java
index 3695578..c35fa82 100644
--- a/flink-mesos/src/main/java/org/apache/flink/mesos/runtime/clusterframework/MesosApplicationMasterRunner.java
+++ b/flink-mesos/src/main/java/org/apache/flink/mesos/runtime/clusterframework/MesosApplicationMasterRunner.java
@@ -636,6 +636,53 @@ public class MesosApplicationMasterRunner {
 
 		info.setCommand(cmd);
 
+		// Set container for task manager if specified in configs.
+		String tmImageName = flinkConfig.getString(
+			ConfigConstants.MESOS_RESOURCEMANAGER_TASKS_CONTAINER_IMAGE_NAME, "");
+
+		if (tmImageName.length() > 0) {
+			String taskManagerContainerType = flinkConfig.getString(
+				ConfigConstants.MESOS_RESOURCEMANAGER_TASKS_CONTAINER_TYPE,
+				ConfigConstants.DEFAULT_MESOS_RESOURCEMANAGER_TASKS_CONTAINER_IMAGE_TYPE);
+
+			Protos.ContainerInfo.Builder containerInfo;
+
+			switch (taskManagerContainerType) {
+				case ConfigConstants.MESOS_RESOURCEMANAGER_TASKS_CONTAINER_TYPE_MESOS:
+					containerInfo = Protos.ContainerInfo.newBuilder()
+						.setType(Protos.ContainerInfo.Type.MESOS)
+						.setMesos(Protos.ContainerInfo.MesosInfo.newBuilder()
+							.setImage(Protos.Image.newBuilder()
+								.setType(Protos.Image.Type.DOCKER)
+								.setDocker(Protos.Image.Docker.newBuilder()
+									.setName(tmImageName))));
+					break;
+				case ConfigConstants.MESOS_RESOURCEMANAGER_TASKS_CONTAINER_TYPE_DOCKER:
+					containerInfo = Protos.ContainerInfo.newBuilder()
+						.setType(Protos.ContainerInfo.Type.DOCKER)
+						.setDocker(Protos.ContainerInfo.DockerInfo.newBuilder()
+							.setNetwork(Protos.ContainerInfo.DockerInfo.Network.HOST)
+							.setImage(tmImageName));
+					break;
+				default:
+					LOG.warn(
+						"Invalid container type '{}' provided for setting {}. Valid values are '{}' or '{}'. " +
+							"Starting task managers now without container.",
+						taskManagerContainerType,
+						ConfigConstants.MESOS_RESOURCEMANAGER_TASKS_CONTAINER_TYPE,
+						ConfigConstants.MESOS_RESOURCEMANAGER_TASKS_CONTAINER_TYPE_MESOS,
+						ConfigConstants.MESOS_RESOURCEMANAGER_TASKS_CONTAINER_TYPE_DOCKER);
+
+					containerInfo = null;
+
+					break;
+			}
+
+			if (containerInfo != null) {
+				info.setContainer(containerInfo);
+			}
+		}
+
 		return info;
 	}
 }