我使用Spark2.4.5在kubernetes上通过submit命令运行Spark应用程序。应用程序试图将输出写入详细的这里时失败,这可能是由于安全上下文不正确造成的。因此,我尝试设置一个安全上下文并运行应用程序。我这样做是通过像前面提到的这里那样创建一个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上的持久卷中。我要问的问题是:
任何帮助都将不胜感激。谢谢。
发布于 2022-11-14 16:19:42
你可以在https://spark.apache.org/docs/latest/running-on-kubernetes.html#pod-template上读到
spark.kubernetes.executor.podTemplateFile指向火花提交过程可访问的文件.
因此,在这里,没有任何关于PVC,但当地的FS,火花提交发送。顺便说一句,您可以通过检查生成的吊舱来检查它是否有效。
良好的吊舱和集装箱安全-上下文:
securityContext:
fsGroup: 1000
runAsGroup: 1000
runAsNonRoot: true
runAsUser: 1000
containers:
- name: spark
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
https://stackoverflow.com/questions/70071849
复制相似问题