You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s环境下Spark driver pod配置restartPolicy: Always后不重启问题

Spark on Kubernetes Pod无法自动重启解决方案

问题根因定位

  • Pod模板类型配置错误
    你当前使用的模板kind为Deployment,不符合Spark对Pod模板的要求,Spark驱动、执行器的Pod模板必须为Pod类型定义,Deployment是K8s的工作负载资源,无法被Spark识别为Pod模板使用。
  • 缺少Spark驱动重启专属配置
    Spark cluster模式下,驱动是任务的核心控制节点,默认驱动退出后整个Application会被标记为终止,即便Pod模板配置了restartPolicy: Always,也不会触发自动重建,需要额外配置Spark专属的重启参数。
  • 主动删除Pod不属于故障重启触发范围
    kubectl delete pod属于用户主动发起的受控删除操作,不属于Pod异常退出场景,默认不会触发自动重启逻辑,测试时需要模拟进程异常退出的场景。

修复步骤

步骤1:修正Pod模板

将模板改为Pod类型,示例如下:

apiVersion: v1
kind: Pod
metadata:
  name: spark-common-template
spec:
  restartPolicy: Always
  # 可追加其他Pod配置,如资源限制、存储挂载、节点亲和性等

步骤2:添加Spark重启相关配置参数

提交任务时新增以下配置:

# 驱动侧重启配置
--conf spark.kubernetes.driver.restartPolicy=Always
--conf spark.kubernetes.driver.maxFailures=10 # 最大允许驱动重启次数,可按需调整
--conf spark.kubernetes.driver.reusePersistentVolumeClaim=true # 若任务需要持久化状态需开启,避免重启后数据丢失
# 执行器侧重启配置
--conf spark.kubernetes.executor.restartPolicy=Always
--conf spark.task.maxFailures=10 # 单个任务最大失败次数,可按需调整

步骤3:验证配置生效

测试自动重启能力时,不要使用kubectl delete pod,改为进入目标Pod手动kill掉Spark进程:

kubectl exec -it <your-spark-pod-name> -- kill 1 # 1号进程通常是Spark驱动/执行器主进程

此时观察Pod是否会自动重建。

注意:你测试使用的SparkPi是单次计算完成就主动退出的任务,若配置了Always重启策略,会出现任务反复执行的情况,属于正常现象,测试长驻任务时可观察到符合预期的故障自愈效果。

完整提交命令示例

/usr/local/lib/python3.9/site-packages/pyspark/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master k8s://https://kubernetes.docker.internal:6443 \
--deploy-mode cluster \
--conf spark.kubernetes.container.image=com/synchronoss/sip/<mySparkImage> \
--conf spark.kubernetes.file.upload.path=file:///tmp \
--conf spark.kubernetes.driver.podTemplateFile=./driver-template.yaml \
--conf spark.kubernetes.executor.podTemplateFile=./executor-template.yaml \
--conf spark.kubernetes.driver.restartPolicy=Always \
--conf spark.kubernetes.driver.maxFailures=10 \
--conf spark.kubernetes.driver.reusePersistentVolumeClaim=true \
--conf spark.kubernetes.executor.restartPolicy=Always \
--conf spark.task.maxFailures=10 \
local:///opt/sip/spark/examples/jars/spark-examples_2.12-3.1.2.jar

内容的提问来源于stack exchange,提问作者Naresh G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:48:01