This is an automated email from the ASF dual-hosted git repository.

liuxun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/submarine.git


The following commit(s) were added to refs/heads/master by this push:
     new 7576a5e  SUBMARINE-330. Pack the k8s submitter libs into 
lib/submitter/k8s
7576a5e is described below

commit 7576a5e300b4659c3a8a36c035e125d7a5c7f44e
Author: Wanqiang Ji <[email protected]>
AuthorDate: Fri Jan 3 21:12:06 2020 +0800

    SUBMARINE-330. Pack the k8s submitter libs into lib/submitter/k8s
    
    ### What is this PR for?
    * add default configuration for k8s submitter
    * pack the k8s submitter and dependencies to lib/submitter/k8s
    * fix k8s submitter parser `JobSpec` used the error `plural` name
    * remove redundant `"` in travis caused CI/CD error
    
    ### What type of PR is it?
    Feature
    
    ### Todos
    
    ### What is the Jira issue?
    https://issues.apache.org/jira/browse/SUBMARINE-330
    
    ### How should this be tested?
    https://travis-ci.com/jiwq/submarine/builds/142970359
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the licenses files need update? No
    * Is there breaking changes for older versions? No
    * Does this needs documentation? No
    
    Author: Wanqiang Ji <[email protected]>
    
    Closes #141 from jiwq/SUBMARINE-330 and squashes the following commits:
    
    1657120 [Wanqiang Ji] SUBMARINE-330. Pack the k8s submitter libs into 
lib/submitter/k8s
---
 .travis.yml                                        |  2 +-
 conf/submarine-site.xml                            | 24 ++++++++++++++
 .../commons/utils/SubmarineConfiguration.java      | 11 ++++---
 submarine-dist/src/assembly/distribution.xml       |  9 +++++-
 submarine-server/server-api/pom.xml                |  7 ++++
 .../apache/submarine/server/api/JobSubmitter.java  |  4 ++-
 .../apache/submarine/server/SubmitterManager.java  | 10 +++---
 .../server-submitter/submitter-k8s/pom.xml         | 28 ++++++++++++++++
 .../server/submitter/k8s/K8sJobSubmitter.java      | 37 ++++++++++++++++------
 .../server/submitter/k8s/K8SJobSubmitterTest.java  |  1 +
 10 files changed, 111 insertions(+), 22 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 1c94b8d..75000b8 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -43,7 +43,7 @@ env:
     # If you need to compile Phadoop-3.1 or Phadoop-3.2, you need to add 
`!submarine-server/server-submitter/submitter-yarnservice` in EXCLUDE_SUBMARINE
     - 
EXCLUDE_SUBMARINE="!submarine-all,!submarine-client,!submarine-commons,!submarine-commons/commons-runtime,!submarine-dist,!submarine-server/server-submitter/submitter-yarn,!submarine-server/server-core,!submarine-server/server-rpc"
     - 
EXCLUDE_WORKBENCH="!submarine-workbench,!submarine-workbench/workbench-web,!submarine-workbench/workbench-web-ng"
-    - 
EXCLUDE_INTERPRETER="!submarine-workbench/interpreter,!submarine-workbench/interpreter/interpreter-engine,!submarine-workbench/interpreter/python-interpreter,!submarine-workbench/interpreter/spark-interpreter""
+    - 
EXCLUDE_INTERPRETER="!submarine-workbench/interpreter,!submarine-workbench/interpreter/interpreter-engine,!submarine-workbench/interpreter/python-interpreter,!submarine-workbench/interpreter/spark-interpreter"
     - 
EXCLUDE_SUBMODULE_TONY="!submodules/tony,!submodules/tony/tony-mini,!submodules/tony/tony-core,!submodules/tony/tony-proxy,!submodules/tony/tony-portal,!submodules/tony/tony-azkaban,!submodules/tony/tony-cli"
     - EXCLUDE_K8S="!submarine-server/server-submitter/submitter-k8s"
     - EXCLUDE_COMMON_RPC="!submarine-commons/commons-rpc"
diff --git a/conf/submarine-site.xml b/conf/submarine-site.xml
index f369659..da74af0 100755
--- a/conf/submarine-site.xml
+++ b/conf/submarine-site.xml
@@ -113,4 +113,28 @@
     <description>RuntimeFactory for Submarine jobs</description>
   </property>
 
+  <!-- Submarine Submitters Configuration  -->
+  <property>
+    <name>submarine.submitters</name>
+    <value>k8s</value>
+    <description>Submitter list for the server</description>
+  </property>
+  <property>
+    <name>submarine.submitters.k8s.class</name>
+    <value>org.apache.submarine.server.submitter.k8s.K8sJobSubmitter</value>
+    <description>The entry class for the specified submitter</description>
+  </property>
+  <property>
+    <name>submarine.submitters.k8s.classpath</name>
+    <value>../lib/submitter/k8s/</value>
+    <description>The libs for Kubernetes submitter</description>
+  </property>
+
+  <!-- K8s Configuration -->
+  <property>
+    <name>submarine.k8s.kube.config</name>
+    <value>../conf/k8s/config</value>
+    <description>Kube config for kubernetes, you should get the config from 
cluster</description>
+  </property>
+
 </configuration>
diff --git 
a/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfiguration.java
 
b/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfiguration.java
index 396f088..4e63a09 100644
--- 
a/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfiguration.java
+++ 
b/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfiguration.java
@@ -333,12 +333,12 @@ public class SubmarineConfiguration extends 
XMLConfiguration {
   }
 
   /**
-   * Get the entry class name by the specified name
+   * Get the submitter class name by the specified name
    * @param name the submitter's name
    * @return class name
    */
-  public String getSubmitterEntry(String name) {
-    return 
getStringValue(String.format(ConfVars.SUBMARINE_SUBMITTERS_ENTRY.getVarName(), 
name), "");
+  public String getSubmitterClass(String name) {
+    return 
getStringValue(String.format(ConfVars.SUBMARINE_SUBMITTERS_CLASS.getVarName(), 
name), "");
   }
 
   /**
@@ -526,8 +526,9 @@ public class SubmarineConfiguration extends 
XMLConfiguration {
     SUBMARINE_RUNTIME_CLASS("submarine.runtime.class",
         "org.apache.submarine.server.submitter.yarn.YarnRuntimeFactory"),
     SUBMARINE_SUBMITTERS("submarine.submitters", ""),
-    SUBMARINE_SUBMITTERS_ENTRY("submarine.submitters.%s.class", ""),
-    SUBMARINE_SUBMITTERS_CLASSPATH("submarine.submitters.%s.classpath", "");
+    SUBMARINE_SUBMITTERS_CLASS("submarine.submitters.%s.class", ""),
+    SUBMARINE_SUBMITTERS_CLASSPATH("submarine.submitters.%s.classpath", ""),
+    SUBMARINE_K8S_KUBE_CONFIG("submarine.k8s.kube.config", "");
 
     private String varName;
     @SuppressWarnings("rawtypes")
diff --git a/submarine-dist/src/assembly/distribution.xml 
b/submarine-dist/src/assembly/distribution.xml
index cd48f29..703ed5a 100644
--- a/submarine-dist/src/assembly/distribution.xml
+++ b/submarine-dist/src/assembly/distribution.xml
@@ -101,14 +101,21 @@
         <include>submarine-commons-rpc-${project.version}.jar</include>
       </includes>
     </fileSet>
+
+    <!--  Kubernetes Submitter  -->
     <fileSet>
       
<directory>../submarine-server/server-submitter/submitter-k8s/target</directory>
-      <outputDirectory>/lib/submitter</outputDirectory>
+      <outputDirectory>/lib/submitter/k8s</outputDirectory>
       <includes>
         <include>submarine-submitter-k8s-${project.version}.jar</include>
       </includes>
     </fileSet>
     <fileSet>
+      
<directory>../submarine-server/server-submitter/submitter-k8s/target/dependency</directory>
+      <outputDirectory>/lib/submitter/k8s</outputDirectory>
+    </fileSet>
+
+    <fileSet>
       
<directory>../submarine-server/server-submitter/submitter-yarn/target</directory>
       <outputDirectory>/lib/submitter</outputDirectory>
       <includes>
diff --git a/submarine-server/server-api/pom.xml 
b/submarine-server/server-api/pom.xml
index a786965..e4e2d94 100644
--- a/submarine-server/server-api/pom.xml
+++ b/submarine-server/server-api/pom.xml
@@ -31,4 +31,11 @@
   <artifactId>server-api</artifactId>
   <name>Submarine: Server API</name>
 
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.submarine</groupId>
+      <artifactId>commons-utils</artifactId>
+    </dependency>
+  </dependencies>
+
 </project>
diff --git 
a/submarine-server/server-api/src/main/java/org/apache/submarine/server/api/JobSubmitter.java
 
b/submarine-server/server-api/src/main/java/org/apache/submarine/server/api/JobSubmitter.java
index 87f90d4..0fd4563 100644
--- 
a/submarine-server/server-api/src/main/java/org/apache/submarine/server/api/JobSubmitter.java
+++ 
b/submarine-server/server-api/src/main/java/org/apache/submarine/server/api/JobSubmitter.java
@@ -19,6 +19,8 @@
 
 package org.apache.submarine.server.api;
 
+import org.apache.submarine.commons.utils.SubmarineConfiguration;
+
 /**
  * The submitter should implement this interface.
  */
@@ -27,7 +29,7 @@ public interface JobSubmitter extends JobHandler {
   /**
    * Initialize the submitter related code
    */
-  void initialize();
+  void initialize(SubmarineConfiguration conf);
 
   /**
    * Get the submitter type which is the unique identifier.
diff --git 
a/submarine-server/server-core/src/main/java/org/apache/submarine/server/SubmitterManager.java
 
b/submarine-server/server-core/src/main/java/org/apache/submarine/server/SubmitterManager.java
index 07069c8..36e3d6c 100644
--- 
a/submarine-server/server-core/src/main/java/org/apache/submarine/server/SubmitterManager.java
+++ 
b/submarine-server/server-core/src/main/java/org/apache/submarine/server/SubmitterManager.java
@@ -53,7 +53,7 @@ public class SubmitterManager {
     LOG.info("Start load submitter plugins...");
     List<String> list = conf.listSubmitter();
     for (String name : list) {
-      String clazzName = conf.getSubmitterEntry(name);
+      String clazzName = conf.getSubmitterClass(name);
       String classpath = conf.getSubmitterClassPath(name);
       try {
         ClassLoader classLoader = new 
URLClassLoader(constructUrlsFromClasspath(classpath));
@@ -61,7 +61,7 @@ public class SubmitterManager {
         Class<? extends JobSubmitter> sClass = 
clazz.asSubclass(JobSubmitter.class);
         Constructor<? extends JobSubmitter> method = 
sClass.getDeclaredConstructor();
         JobSubmitter submitter = method.newInstance();
-        submitter.initialize();
+        submitter.initialize(conf);
         submitterMap.put(submitter.getSubmitterType(), submitter);
       } catch (Exception e) {
         LOG.error(e.toString(), e);
@@ -79,10 +79,10 @@ public class SubmitterManager {
 
       File file = new File(path);
       if (file.isDirectory()) {
-        String[] items = file.list();
+        File[] items = file.listFiles();
         if (items != null) {
-          for (String item : items) {
-            urls.add(new File(item).toURI().toURL());
+          for (File item : items) {
+            urls.add(item.toURI().toURL());
           }
         }
       } else {
diff --git a/submarine-server/server-submitter/submitter-k8s/pom.xml 
b/submarine-server/server-submitter/submitter-k8s/pom.xml
index 96288b9..f79b5d9 100644
--- a/submarine-server/server-submitter/submitter-k8s/pom.xml
+++ b/submarine-server/server-submitter/submitter-k8s/pom.xml
@@ -78,6 +78,34 @@
       <plugin>
         <artifactId>maven-enforcer-plugin</artifactId>
       </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>copy-dependencies-runtime</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy-dependencies</goal>
+            </goals>
+            <configuration>
+              <includeScope>runtime</includeScope>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copy-dependencies-system</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy-dependencies</goal>
+            </goals>
+            <configuration>
+              <includeScope>system</includeScope>
+              <excludeTransitive>true</excludeTransitive>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
 </project>
diff --git 
a/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/K8sJobSubmitter.java
 
b/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/K8sJobSubmitter.java
index de946ff..afc187a 100644
--- 
a/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/K8sJobSubmitter.java
+++ 
b/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/K8sJobSubmitter.java
@@ -20,7 +20,6 @@
 package org.apache.submarine.server.submitter.k8s;
 
 import java.io.FileReader;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -34,6 +33,7 @@ import io.kubernetes.client.models.V1DeleteOptions;
 import io.kubernetes.client.models.V1DeleteOptionsBuilder;
 import io.kubernetes.client.util.ClientBuilder;
 import io.kubernetes.client.util.KubeConfig;
+import org.apache.submarine.commons.utils.SubmarineConfiguration;
 import org.apache.submarine.server.api.JobSubmitter;
 import org.apache.submarine.server.api.exception.UnsupportedJobTypeException;
 import org.apache.submarine.server.api.job.Job;
@@ -51,22 +51,41 @@ import org.slf4j.LoggerFactory;
 public class K8sJobSubmitter implements JobSubmitter {
   private final Logger LOG = LoggerFactory.getLogger(K8sJobSubmitter.class);
 
+  private String confPath;
+
   /**
    * Key: kind of CRD, such as TFJob/PyTorchJob
    * Value: the CRD api with version
    */
   private Map<String, String> supportedCRDMap;
 
-  public K8sJobSubmitter(String confPath) throws IOException {
-    ApiClient client =
-        ClientBuilder.kubeconfig(KubeConfig.loadKubeConfig(new 
FileReader(confPath))).build();
-    Configuration.setDefaultApiClient(client);
+  public K8sJobSubmitter() {
+
+  }
+
+  public K8sJobSubmitter(String confPath) {
+    this.confPath = confPath;
   }
 
   @Override
-  public void initialize() {
+  public void initialize(SubmarineConfiguration conf) {
     supportedCRDMap = new HashMap<>();
-    supportedCRDMap.put("TFJob", "kubeflow.org/v1");
+    supportedCRDMap.put("TFJob", "tfjobs");
+
+    if (confPath == null || confPath.trim().isEmpty()) {
+      confPath = 
conf.getString(SubmarineConfiguration.ConfVars.SUBMARINE_K8S_KUBE_CONFIG);
+    }
+    loadClientConfiguration(confPath);
+  }
+
+  private void loadClientConfiguration(String path) {
+    try {
+      KubeConfig config = KubeConfig.loadKubeConfig(new FileReader(path));
+      ApiClient client = ClientBuilder.kubeconfig(config).build();
+      Configuration.setDefaultApiClient(client);
+    } catch (Exception e){
+      LOG.error("Load the K8s client conf failed: " + e.getMessage(), e);
+    }
   }
 
   @Override
@@ -76,7 +95,7 @@ public class K8sJobSubmitter implements JobSubmitter {
 
   @Override
   public Job submitJob(JobSpec jobSpec) throws UnsupportedJobTypeException {
-    if (!supportedCRDMap.containsKey(jobSpec.getSubmitterSpec().getType())) {
+    if (!supportedCRDMap.containsKey(jobSpec.getSubmitterSpec().getKind())) {
       throw new UnsupportedJobTypeException();
     }
 
@@ -91,7 +110,7 @@ public class K8sJobSubmitter implements JobSubmitter {
     try {
       CustomObjectsApi api = new CustomObjectsApi();
       api.createNamespacedCustomObject(job.getGroup(), job.getVersion(),
-          job.getMetadata().getNamespace(), job.getMetadata().getName(), job, 
"true");
+          job.getMetadata().getNamespace(), 
supportedCRDMap.get(job.getKind()), job, "true");
     } catch (ApiException e) {
       LOG.error("Create {} job: " + e.getMessage(), e);
     }
diff --git 
a/submarine-server/server-submitter/submitter-k8s/src/test/java/org/apache/submarine/server/submitter/k8s/K8SJobSubmitterTest.java
 
b/submarine-server/server-submitter/submitter-k8s/src/test/java/org/apache/submarine/server/submitter/k8s/K8SJobSubmitterTest.java
index 136d30c..163a552 100644
--- 
a/submarine-server/server-submitter/submitter-k8s/src/test/java/org/apache/submarine/server/submitter/k8s/K8SJobSubmitterTest.java
+++ 
b/submarine-server/server-submitter/submitter-k8s/src/test/java/org/apache/submarine/server/submitter/k8s/K8SJobSubmitterTest.java
@@ -50,6 +50,7 @@ public class K8SJobSubmitterTest {
     }
 
     submitter = new K8sJobSubmitter(confPath);
+    submitter.initialize(null);
     path = new K8sJobRequest.Path("kubeflow.org", "v1", "kubeflow", "tfjobs");
   }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to