Skip to content

Commit 3099fd9

Browse files
stijndehaesdongjoon-hyun
authored andcommitted
[SPARK-32067][K8S] Use unique ConfigMap name for executor pod template
### What changes were proposed in this pull request? The pod template configmap always had the same name. This PR makes it unique. ### Why are the changes needed? If you scheduled 2 spark jobs they will both use the same configmap name this will result in conflicts. This PR fixes that **BEFORE** ``` $ kubectl get cm --all-namespaces -w | grep podspec podspec-configmap 1 65s ``` **AFTER** ``` $ kubectl get cm --all-namespaces -w | grep podspec aaece65ef82e4a30b7b7800aad600d4f spark-test-app-aac9f37502b2ca55-driver-podspec-conf-map 1 0s ``` This can be seen when running the integration tests ### Does this PR introduce _any_ user-facing change? No ### How was this patch tested? Unit tests and the integration tests test if this works Closes #29934 from stijndehaes/bugfix/SPARK-32067-unique-name-for-template-configmap. Authored-by: Stijn De Haes <stijndehaes@gmail.com> Signed-off-by: Dongjoon Hyun <dhyun@apple.com>
1 parent 94d648d commit 3099fd9

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

resource-managers/kubernetes/core/src/main/scala/org/apache/spark/deploy/k8s/Constants.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ private[spark] object Constants {
7777
val EXECUTOR_POD_SPEC_TEMPLATE_FILE_NAME = "pod-spec-template.yml"
7878
val EXECUTOR_POD_SPEC_TEMPLATE_MOUNTPATH = "/opt/spark/pod-template"
7979
val POD_TEMPLATE_VOLUME = "pod-template-volume"
80-
val POD_TEMPLATE_CONFIGMAP = "podspec-configmap"
80+
val POD_TEMPLATE_CONFIGMAP = "driver-podspec-conf-map"
8181
val POD_TEMPLATE_KEY = "podspec-configmap-key"
8282

8383
// Miscellaneous

resource-managers/kubernetes/core/src/main/scala/org/apache/spark/deploy/k8s/features/PodTemplateConfigMapStep.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,16 @@ private[spark] class PodTemplateConfigMapStep(conf: KubernetesConf)
3131

3232
private val hasTemplate = conf.contains(KUBERNETES_EXECUTOR_PODTEMPLATE_FILE)
3333

34+
private val configmapName = s"${conf.resourceNamePrefix}-$POD_TEMPLATE_CONFIGMAP"
35+
3436
def configurePod(pod: SparkPod): SparkPod = {
3537
if (hasTemplate) {
3638
val podWithVolume = new PodBuilder(pod.pod)
3739
.editSpec()
3840
.addNewVolume()
3941
.withName(POD_TEMPLATE_VOLUME)
4042
.withNewConfigMap()
41-
.withName(POD_TEMPLATE_CONFIGMAP)
43+
.withName(configmapName)
4244
.addNewItem()
4345
.withKey(POD_TEMPLATE_KEY)
4446
.withPath(EXECUTOR_POD_SPEC_TEMPLATE_FILE_NAME)
@@ -76,7 +78,7 @@ private[spark] class PodTemplateConfigMapStep(conf: KubernetesConf)
7678
val podTemplateString = Files.toString(new File(podTemplateFile), StandardCharsets.UTF_8)
7779
Seq(new ConfigMapBuilder()
7880
.withNewMetadata()
79-
.withName(POD_TEMPLATE_CONFIGMAP)
81+
.withName(configmapName)
8082
.endMetadata()
8183
.addToData(POD_TEMPLATE_KEY, podTemplateString)
8284
.build())

resource-managers/kubernetes/core/src/test/scala/org/apache/spark/deploy/k8s/features/PodTemplateConfigMapStepSuite.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@
1616
*/
1717
package org.apache.spark.deploy.k8s.features
1818

19-
import java.io.{File, PrintWriter}
19+
import java.io.PrintWriter
2020
import java.nio.file.Files
2121

2222
import io.fabric8.kubernetes.api.model.ConfigMap
2323

2424
import org.apache.spark.{SparkConf, SparkFunSuite}
2525
import org.apache.spark.deploy.k8s._
26+
import org.apache.spark.deploy.k8s.Constants._
2627
import org.apache.spark.util.Utils
2728

2829
class PodTemplateConfigMapStepSuite extends SparkFunSuite {
@@ -56,8 +57,9 @@ class PodTemplateConfigMapStepSuite extends SparkFunSuite {
5657

5758
assert(configuredPod.pod.getSpec.getVolumes.size() === 1)
5859
val volume = configuredPod.pod.getSpec.getVolumes.get(0)
60+
val generatedResourceName = s"${kubernetesConf.resourceNamePrefix}-$POD_TEMPLATE_CONFIGMAP"
5961
assert(volume.getName === Constants.POD_TEMPLATE_VOLUME)
60-
assert(volume.getConfigMap.getName === Constants.POD_TEMPLATE_CONFIGMAP)
62+
assert(volume.getConfigMap.getName === generatedResourceName)
6163
assert(volume.getConfigMap.getItems.size() === 1)
6264
assert(volume.getConfigMap.getItems.get(0).getKey === Constants.POD_TEMPLATE_KEY)
6365
assert(volume.getConfigMap.getItems.get(0).getPath ===
@@ -70,7 +72,7 @@ class PodTemplateConfigMapStepSuite extends SparkFunSuite {
7072

7173
val resources = step.getAdditionalKubernetesResources()
7274
assert(resources.size === 1)
73-
assert(resources.head.getMetadata.getName === Constants.POD_TEMPLATE_CONFIGMAP)
75+
assert(resources.head.getMetadata.getName === generatedResourceName)
7476
assert(resources.head.isInstanceOf[ConfigMap])
7577
val configMap = resources.head.asInstanceOf[ConfigMap]
7678
assert(configMap.getData.size() === 1)

0 commit comments

Comments
 (0)