如何在Kubernetes上运行spark-submit作业时包含安全上下文

3
我正在使用Spark 2.4.5通过spark-submit命令在Kubernetes上运行Spark应用程序。该应用程序在尝试写入输出时失败,详见这里,可能是由于安全上下文设置不正确的问题。因此,我尝试设置一个安全上下文并运行应用程序。我创建了一个Pod模板,如这里所述,但我无法验证该Pod模板是否已正确设置(因为我找不到合适的示例),或者它是否可以从驱动程序和执行器Pod中访问(因为我在驱动程序或Kubernetes日志中找不到与模板相关的内容)。这是我用来设置安全上下文的Pod模板的内容。
apiVersion: v1
kind: Pod
metadata:
 name: spark-pod-template
spec:
  securityContext:
    runAsUser: 1000

这是我使用的命令。
 <SPARK_PATH>/bin/spark-submit --master k8s://https://dssparkcluster-dns-fa326f6a.hcp.southcentralus.azmk8s.io:443 \
 --deploy-mode cluster  --name spark-pi3 --conf spark.executor.instances=2 \
 --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
 --conf spark.kubernetes.container.image=docker.io/datamechanics/spark:2.4.5-hadoop-3.1.0-java-8-scala-2.11-python-3.7-dm14 \
 --conf spark.kubernetes.driver.volumes.persistentVolumeClaim.azure-fileshare-pvc.options.claimName=azure-fileshare-pvc \
 --conf spark.kubernetes.driver.volumes.persistentVolumeClaim.azure-fileshare-pvc.mount.path=/opt/spark/work-dir \
 --conf spark.kubernetes.executor.volumes.persistentVolumeClaim.azure-fileshare-pvc.options.claimName=azure-fileshare-pvc \
 --conf spark.kubernetes.executor.volumes.persistentVolumeClaim.azure-fileshare-pvc.mount.path=/opt/spark/work-dir \
 --conf spark.kubernetes.driver.podTemplateFile=/opt/spark/work-dir/spark_pod_template.yml \
 --conf spark.kubernetes.executor.podTemplateFile=/opt/spark/work-dir/spark_pod_template.yml \
 --verbose /opt/spark/work-dir/wordcount2.py

我已经将Pod模板文件放置在挂载在/opt/spark/work-dir的持久卷中。我有以下几个问题:
  1. Pod模板文件是否可以从持久卷中访问?
  2. 文件内容是否适合设置runAsUser?
  3. Spark 2.4.5是否支持Pod模板功能?虽然在2.4.5 docs中提到可以使用Pod模板实现安全上下文,但没有像3.2.0 docs中那样的Pod模板部分。
任何帮助都将不胜感激。谢谢。
1个回答

0

正如您可以在https://spark.apache.org/docs/latest/running-on-kubernetes.html#pod-template中阅读到的:

spark.kubernetes.executor.podTemplateFile指向对spark-submit进程可访问的文件。

因此,在这里,没有关于PVC的内容,而是关于发送spark-submit的本地FS。顺便说一句,您可以通过检查生成的Pod来检查是否有效。

一个良好的Pod和容器安全上下文:

      securityContext:
        fsGroup: 1000
        runAsGroup: 1000
        runAsNonRoot: true
        runAsUser: 1000
      containers:
        - name: spark
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop:
              - ALL
            readOnlyRootFilesystem: true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接