This repository was archived by the owner on Jan 9, 2020. It is now read-only.
File tree Expand file tree Collapse file tree 8 files changed +26
-5
lines changed
resource-managers/kubernetes/core/src
main/scala/org/apache/spark
scheduler/cluster/kubernetes
test/scala/org/apache/spark/deploy/kubernetes Expand file tree Collapse file tree 8 files changed +26
-5
lines changed Original file line number Diff line number Diff line change @@ -661,6 +661,13 @@ from the other deployment modes. See the [configuration page](configuration.html
661661 Interval between reports of the current Spark job status in cluster mode.
662662 </td >
663663</tr >
664+ <tr >
665+ <td ><code >spark.kubernetes.docker.image.pullPolicy</code ></td >
666+ <td ><code >IfNotPresent</code ></td >
667+ <td >
668+ Docker image pull policy used when pulling Docker images with Kubernetes.
669+ </td >
670+ </tr >
664671</table >
665672
666673
Original file line number Diff line number Diff line change @@ -36,6 +36,7 @@ private[spark] trait SparkPodInitContainerBootstrap {
3636
3737private [spark] class SparkPodInitContainerBootstrapImpl (
3838 initContainerImage : String ,
39+ dockerImagePullPolicy : String ,
3940 jarsDownloadPath : String ,
4041 filesDownloadPath : String ,
4142 downloadTimeoutMinutes : Long ,
@@ -60,7 +61,7 @@ private[spark] class SparkPodInitContainerBootstrapImpl(
6061 val initContainer = new ContainerBuilder ()
6162 .withName(s " spark-init " )
6263 .withImage(initContainerImage)
63- .withImagePullPolicy(" IfNotPresent " )
64+ .withImagePullPolicy(dockerImagePullPolicy )
6465 .addNewVolumeMount()
6566 .withName(INIT_CONTAINER_PROPERTIES_FILE_VOLUME )
6667 .withMountPath(INIT_CONTAINER_PROPERTIES_FILE_DIR )
Original file line number Diff line number Diff line change @@ -47,6 +47,12 @@ package object config extends Logging {
4747 .stringConf
4848 .createWithDefault(s " spark-executor: $sparkVersion" )
4949
50+ private [spark] val DOCKER_IMAGE_PULL_POLICY =
51+ ConfigBuilder (" spark.kubernetes.docker.image.pullPolicy" )
52+ .doc(" Docker image pull policy when pulling any docker image in Kubernetes integration" )
53+ .stringConf
54+ .createWithDefault(" IfNotPresent" )
55+
5056 private [spark] val APISERVER_AUTH_SUBMISSION_CONF_PREFIX =
5157 " spark.kubernetes.authenticate.submission"
5258 private [spark] val APISERVER_AUTH_DRIVER_CONF_PREFIX =
Original file line number Diff line number Diff line change @@ -60,6 +60,7 @@ private[spark] class Client(
6060 private val kubernetesDriverPodName = sparkConf.get(KUBERNETES_DRIVER_POD_NAME )
6161 .getOrElse(kubernetesAppId)
6262 private val driverDockerImage = sparkConf.get(DRIVER_DOCKER_IMAGE )
63+ private val dockerImagePullPolicy = sparkConf.get(DOCKER_IMAGE_PULL_POLICY )
6364 private val driverMemoryMb = sparkConf.get(org.apache.spark.internal.config.DRIVER_MEMORY )
6465 private val memoryOverheadMb = sparkConf
6566 .get(KUBERNETES_DRIVER_MEMORY_OVERHEAD )
@@ -99,7 +100,7 @@ private[spark] class Client(
99100 val driverContainer = new ContainerBuilder ()
100101 .withName(DRIVER_CONTAINER_NAME )
101102 .withImage(driverDockerImage)
102- .withImagePullPolicy(" IfNotPresent " )
103+ .withImagePullPolicy(dockerImagePullPolicy )
103104 .addToEnv(driverExtraClasspathEnv.toSeq: _* )
104105 .addNewEnv()
105106 .withName(ENV_DRIVER_MEMORY )
Original file line number Diff line number Diff line change @@ -104,6 +104,7 @@ private[spark] class DriverInitContainerComponentsProviderImpl(
104104 private val configMapName = s " $kubernetesAppId-init-config "
105105 private val configMapKey = s " $kubernetesAppId-init-config-key "
106106 private val initContainerImage = sparkConf.get(INIT_CONTAINER_DOCKER_IMAGE )
107+ private val dockerImagePullPolicy = sparkConf.get(DOCKER_IMAGE_PULL_POLICY )
107108 private val downloadTimeoutMinutes = sparkConf.get(INIT_CONTAINER_MOUNT_TIMEOUT )
108109
109110 override def provideInitContainerConfigMapBuilder (
@@ -196,6 +197,7 @@ private[spark] class DriverInitContainerComponentsProviderImpl(
196197 }
197198 new SparkPodInitContainerBootstrapImpl (
198199 initContainerImage,
200+ dockerImagePullPolicy,
199201 jarsDownloadPath,
200202 filesDownloadPath,
201203 downloadTimeoutMinutes,
Original file line number Diff line number Diff line change @@ -46,7 +46,7 @@ private[spark] class KubernetesClusterManager extends ExternalClusterManager wit
4646 val maybeExecutorInitContainerSecretName =
4747 sparkConf.get(EXECUTOR_INIT_CONTAINER_SECRET )
4848 val maybeExecutorInitContainerSecretMount =
49- sparkConf.get(EXECUTOR_INIT_CONTAINER_SECRET_MOUNT_DIR )
49+ sparkConf.get(EXECUTOR_INIT_CONTAINER_SECRET_MOUNT_DIR )
5050 val executorInitContainerSecretVolumePlugin = for {
5151 initContainerSecretName <- maybeExecutorInitContainerSecretName
5252 initContainerSecretMountPath <- maybeExecutorInitContainerSecretMount
@@ -65,6 +65,7 @@ private[spark] class KubernetesClusterManager extends ExternalClusterManager wit
6565 } yield {
6666 new SparkPodInitContainerBootstrapImpl (
6767 sparkConf.get(INIT_CONTAINER_DOCKER_IMAGE ),
68+ sparkConf.get(DOCKER_IMAGE_PULL_POLICY ),
6869 sparkConf.get(INIT_CONTAINER_JARS_DOWNLOAD_LOCATION ),
6970 sparkConf.get(INIT_CONTAINER_FILES_DOWNLOAD_LOCATION ),
7071 sparkConf.get(INIT_CONTAINER_MOUNT_TIMEOUT ),
@@ -95,4 +96,3 @@ private[spark] class KubernetesClusterManager extends ExternalClusterManager wit
9596 scheduler.asInstanceOf [TaskSchedulerImpl ].initialize(backend)
9697 }
9798}
98-
Original file line number Diff line number Diff line change @@ -77,6 +77,7 @@ private[spark] class KubernetesClusterSchedulerBackend(
7777
7878 private var shufflePodCache : Option [ShufflePodCache ] = None
7979 private val executorDockerImage = conf.get(EXECUTOR_DOCKER_IMAGE )
80+ private val dockerImagePullPolicy = conf.get(DOCKER_IMAGE_PULL_POLICY )
8081 private val kubernetesNamespace = conf.get(KUBERNETES_NAMESPACE )
8182 private val executorPort = conf.getInt(" spark.executor.port" , DEFAULT_STATIC_PORT )
8283 private val blockmanagerPort = conf
@@ -354,7 +355,7 @@ private[spark] class KubernetesClusterSchedulerBackend(
354355 .addNewContainer()
355356 .withName(s " executor " )
356357 .withImage(executorDockerImage)
357- .withImagePullPolicy(" IfNotPresent " )
358+ .withImagePullPolicy(dockerImagePullPolicy )
358359 .withNewResources()
359360 .addToRequests(" memory" , executorMemoryQuantity)
360361 .addToLimits(" memory" , executorMemoryLimitQuantity)
Original file line number Diff line number Diff line change @@ -27,6 +27,7 @@ import org.apache.spark.deploy.kubernetes.constants._
2727class SparkPodInitContainerBootstrapSuite extends SparkFunSuite with BeforeAndAfter {
2828 private val OBJECT_MAPPER = new ObjectMapper ()
2929 private val INIT_CONTAINER_IMAGE = " spark-init:latest"
30+ private val DOCKER_IMAGE_PULL_POLICY = " IfNotPresent"
3031 private val JARS_DOWNLOAD_PATH = " /var/data/spark-jars"
3132 private val FILES_DOWNLOAD_PATH = " /var/data/spark-files"
3233 private val DOWNLOAD_TIMEOUT_MINUTES = 5
@@ -137,6 +138,7 @@ class SparkPodInitContainerBootstrapSuite extends SparkFunSuite with BeforeAndAf
137138 private def bootstrapPodWithoutSubmittedDependencies (): Pod = {
138139 val bootstrapUnderTest = new SparkPodInitContainerBootstrapImpl (
139140 INIT_CONTAINER_IMAGE ,
141+ DOCKER_IMAGE_PULL_POLICY ,
140142 JARS_DOWNLOAD_PATH ,
141143 FILES_DOWNLOAD_PATH ,
142144 DOWNLOAD_TIMEOUT_MINUTES ,
@@ -150,6 +152,7 @@ class SparkPodInitContainerBootstrapSuite extends SparkFunSuite with BeforeAndAf
150152 private def bootstrapPodWithSubmittedDependencies (): Pod = {
151153 val bootstrapUnderTest = new SparkPodInitContainerBootstrapImpl (
152154 INIT_CONTAINER_IMAGE ,
155+ DOCKER_IMAGE_PULL_POLICY ,
153156 JARS_DOWNLOAD_PATH ,
154157 FILES_DOWNLOAD_PATH ,
155158 DOWNLOAD_TIMEOUT_MINUTES ,
You can’t perform that action at this time.
0 commit comments