in spark-submission-worker/src/main/java/org/apache/spark/k8s/operator/SparkClusterResourceSpec.java [163:226]
private static StatefulSet buildMasterStatefulSet(
String scheduler,
String name,
String namespace,
String version,
String image,
String options,
ObjectMeta objectMeta,
StatefulSetSpec statefulSetSpec) {
var partialStatefulSet =
new StatefulSetBuilder()
.withNewMetadataLike(objectMeta)
.withName(name + "-master")
.addToLabels(LABEL_SPARK_ROLE_NAME, LABEL_SPARK_ROLE_MASTER_VALUE)
.addToLabels(LABEL_SPARK_VERSION_NAME, version)
.withNamespace(namespace)
.endMetadata()
.withNewSpecLike(statefulSetSpec)
.withPodManagementPolicy("Parallel")
.withReplicas(1)
.editOrNewSelector()
.addToMatchLabels(LABEL_SPARK_ROLE_NAME, LABEL_SPARK_ROLE_MASTER_VALUE)
.endSelector()
.editOrNewTemplate()
.editOrNewMetadata()
.addToLabels(LABEL_SPARK_ROLE_NAME, LABEL_SPARK_ROLE_MASTER_VALUE)
.addToLabels(LABEL_SPARK_VERSION_NAME, version)
.endMetadata()
.editOrNewSpec()
.withSchedulerName(scheduler)
.withTerminationGracePeriodSeconds(0L);
if (!partialStatefulSet.hasMatchingContainer(p -> "master".equals(p.getName()))) {
partialStatefulSet = partialStatefulSet.addNewContainer().withName("master").endContainer();
}
return partialStatefulSet
.editMatchingContainer(p -> "master".equals(p.getName()))
.withImage(image)
.addNewEnv()
.withName("SPARK_MASTER_OPTS")
.withValue(options)
.endEnv()
.addToCommand("bash")
.addToArgs(
"-c",
"/opt/spark/sbin/start-master.sh && while /opt/spark/sbin/spark-daemon.sh status "
+ "org.apache.spark.deploy.master.Master 1; do sleep 1; done")
.addNewPort()
.withName("web")
.withContainerPort(8080)
.endPort()
.addNewPort()
.withName("spark")
.withContainerPort(7070)
.endPort()
.addNewPort()
.withName("rest")
.withContainerPort(6066)
.endPort()
.endContainer()
.endSpec()
.endTemplate()
.endSpec()
.build();
}