如何在Kubernetes上运行spark-submit作业时配置安全上下文
问题1:存放在持久卷中的pod模板文件能否被正常访问?
不能,原因如下:
spark.kubernetes.driver.podTemplateFile配置的路径是执行spark-submit命令的节点的本地文件路径,Spark在提交阶段、创建Driver Pod之前就要读取该模板内容用来构造Pod定义,此时Driver Pod还未启动,你配置的PVC持久卷也尚未挂载,根本无法读取PVC内的模板文件。- 正确的做法是将pod模板文件放在执行spark-submit命令的机器本地,使用本地文件路径指定该参数,提交时Spark会自动解析模板内容。如果一定要用集群模式下的远程路径,可以提前将模板打入Spark镜像内部,指定镜像内的绝对路径即可。
问题2:模板文件的内容是否符合runAsUser参数的配置格式要求?
格式本身是合规的:
- 你配置的Pod级
securityContext的runAsUser参数格式符合Kubernetes API规范,Spark创建Pod时如果模板生效,会自动继承该配置,metadata中的name会被Spark自动替换为实际的Driver/Executor Pod名称,不需要额外修改。 - 额外注意:如果你的Spark镜像中单独配置了容器级
securityContext,优先级会高于Pod级配置,此时需要在模板中补充container层级的securityContext配置才能生效。
问题3:Spark 2.4.5版本是否支持pod模板功能?
支持,但属于实验性Alpha功能,默认未开启:
- Spark 2.4.x版本确实内置了pod模板功能,但由于还在实验阶段,默认不会启用,需要在spark-submit参数中额外添加配置
spark.kubernetes.podTemplate.enabled=true才会加载你指定的模板文件,这也是你目前日志中没有任何模板相关记录的核心原因。 - 该版本的pod模板功能仅支持基础的Pod字段配置,相比3.x版本的稳定版支持的配置项更少,你用到的
securityContext相关配置属于已支持的范围,可以正常使用。
调整建议
你可以按照以下步骤修改配置后重试:
- 将
spark_pod_template.yml放在执行spark-submit命令的本地目录下 - 在spark-submit参数中新增配置项
--conf spark.kubernetes.podTemplate.enabled=true - 将
spark.kubernetes.driver.podTemplateFile和spark.kubernetes.executor.podTemplateFile的参数值改为本地模板的绝对路径,比如/home/user/spark_pod_template.yml
内容的提问来源于stack exchange,提问作者Maaverik
相关产品推荐
相关产品推荐

