+Property Name | Default | Meaning |
+
+ spark.kubernetes.namespace |
+ default |
+
+ The namespace that will be used for running the driver and executor pods. When using
+ spark-submit in cluster mode, this can also be passed to spark-submit via the
+ --kubernetes-namespace command line argument.
+ |
+
+
+ spark.kubernetes.driver.docker.image |
+ spark-driver:2.2.0 |
+
+ Docker image to use for the driver. Specify this using the standard
+ Docker tag format.
+ |
+
+
+ spark.kubernetes.executor.docker.image |
+ spark-executor:2.2.0 |
+
+ Docker image to use for the executors. Specify this using the standard
+ Docker tag format.
+ |
+
+
+ spark.kubernetes.submit.caCertFile |
+ (none) |
+
+ CA cert file for connecting to Kubernetes over SSL. This file should be located on the submitting machine's disk.
+ |
+
+
+ spark.kubernetes.submit.clientKeyFile |
+ (none) |
+
+ Client key file for authenticating against the Kubernetes API server. This file should be located on the submitting
+ machine's disk.
+ |
+
+
+ spark.kubernetes.submit.clientCertFile |
+ (none) |
+
+ Client cert file for authenticating against the Kubernetes API server. This file should be located on the submitting
+ machine's disk.
+ |
+
+
+ spark.kubernetes.submit.oauthToken |
+ (none) |
+
+ OAuth token to use when authenticating against the against the Kubernetes API server. Note that unlike the other
+ authentication options, this should be the exact string value of the token to use for the authentication.
+ |
+
+
+ spark.kubernetes.submit.serviceAccountName |
+ default |
+
+ Service account that is used when running the driver pod. The driver pod uses this service account when requesting
+ executor pods from the API server.
+ |
+
+
+ spark.kubernetes.executor.memoryOverhead |
+ executorMemory * 0.10, with minimum of 384 |
+
+ The amount of off-heap memory (in megabytes) to be allocated per executor. This is memory that accounts for things
+ like VM overheads, interned strings, other native overheads, etc. This tends to grow with the executor size
+ (typically 6-10%).
+ |
+
+
+ spark.kubernetes.driver.submissionServerMemory |
+ 256m |
+
+ The amount of memory to allocate for the driver submission server.
+ |
+
+
+ spark.kubernetes.driver.memoryOverhead |
+ (driverMemory + driverSubmissionServerMemory) * 0.10, with minimum of 384 |
+
+ The amount of off-heap memory (in megabytes) to be allocated for the driver and the driver submission server. This
+ is memory that accounts for things like VM overheads, interned strings, other native overheads, etc. This tends to
+ grow with the driver size (typically 6-10%).
+ |
+
+
+ spark.kubernetes.driver.labels |
+ (none) |
+
+ Custom labels that will be added to the driver pod. This should be a comma-separated list of label key-value pairs,
+ where each label is in the format key=value . Note that Spark also adds its own labels to the driver pod
+ for bookkeeping purposes.
+ |
+
+
+ spark.kubernetes.driver.annotations |
+ (none) |
+
+ Custom annotations that will be added to the driver pod. This should be a comma-separated list of label key-value
+ pairs, where each annotation is in the format key=value .
+ |
+
+
+ spark.kubernetes.driverSubmitTimeout |
+ 60s |
+
+ Time to wait for the driver pod to start running before aborting its execution.
+ |
+
+
+ spark.kubernetes.driver.service.exposeUiPort |
+ false |
+
+ Whether to expose the driver Web UI port as a service NodePort. Turned off by default because NodePort is a limited
+ resource.
+ |
+
+
+ spark.kubernetes.submit.waitAppCompletion |
+ true |
+
+ In cluster mode, whether to wait for the application to finish before exiting the launcher process. When changed to
+ false, the launcher has a "fire-and-forget" behavior when launching the Spark job.
+ |
+
+
+ spark.kubernetes.report.interval |
+ 1s |
+
+ Interval between reports of the current Spark job status in cluster mode.
+ |
+
+
+ spark.kubernetes.driver.serviceManagerType |
+ NodePort |
+
+ A tag indicating which class to use for creating the Kubernetes service and determining its URI for the submission
+ client. Valid values are currently NodePort and ExternalAnnotation . By default, a service
+ is created with the NodePort type, and the driver will be contacted at one of the nodes at the port
+ that the nodes expose for the service. If the nodes cannot be contacted from the submitter's machine, consider
+ setting this to ExternalAnnotation as described in "Determining the Driver Base URI" above. One may
+ also include a custom implementation of org.apache.spark.deploy.rest.kubernetes.DriverServiceManager on
+ the submitter's classpath - spark-submit service loads an instance of that class. To use the custom
+ implementation, set this value to the custom implementation's return value of
+ DriverServiceManager#getServiceManagerType() . This method should only be done as a last resort.
+ |
+
+
+
+## Current Limitations
+
+Running Spark on Kubernetes is currently an experimental feature. Some restrictions on the current implementation that
+should be lifted in the future include:
+* Applications can only use a fixed number of executors. Dynamic allocation is not supported.
+* Applications can only run in cluster mode.
+* Only Scala and Java applications can be run.
diff --git a/examples/pom.xml b/examples/pom.xml
index 2fb42413aca81..e3f7529ecbcec 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -21,7 +21,7 @@