Spark 3.0.3基于Kubernetes运行任务后Completed状态Driver Pod清理问题
Spark on Kubernetes Driver Pod 完成后自动清理方案
提交任务时添加自动删除配置
Spark 3.0 及以上版本原生支持 Driver 进程终止后自动删除对应 Pod,提交任务时添加如下参数即可生效:--conf spark.kubernetes.driver.deleteOnTermination=true
完整 spark-submit 示例参考:./bin/spark-submit \ --master k8s://https://<Kubernetes APIServer 地址>:6443 \ --deploy-mode cluster \ --name spark-test-task \ --class org.apache.spark.examples.SparkPi \ --conf spark.executor.instances=2 \ --conf spark.kubernetes.container.image=spark:3.0.3 \ --conf spark.kubernetes.driver.deleteOnTermination=true \ local:///opt/spark/examples/jars/spark-examples_2.12-3.0.3.jar注意:该配置仅对 cluster 提交模式生效,client 模式下 Driver 运行在提交任务的本地节点,不会在 Kubernetes 集群内生成独立的 Driver Pod。
确认 Service Account 权限配置
如果添加上述参数后 Driver Pod 仍未自动删除,需要检查 Spark 任务使用的 Kubernetes Service Account 是否具备 Pod 删除权限,对应 Role 规则需要至少包含以下权限:- apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch", "create", "delete"]可选:配置 TTL 兜底删除规则
若需要额外的兜底清理机制,可以通过注解配置 Kubernetes 原生 TTL 控制器,指定 Driver Pod 进入 Completed 状态后的保留时长,到期自动删除:--conf spark.kubernetes.driver.annotation.kubernetes.io/ttl=300
上述配置表示 Pod 完成后保留 5 分钟后自动清理,时长可根据业务需求调整。
内容的提问来源于stack exchange,提问作者Mandar Ghodke
相关产品推荐
相关产品推荐

