Spark 3.4.0基于K8s运行时,如何保存Executor Pod日志?
Spark 3.4.0 on K8s: 保留Executor Pod或日志的实用方案
一、阻止Executor Pod在应用结束后被删除
- 提交Spark应用时添加配置:
--conf spark.kubernetes.executor.deleteOnTermination=false,应用运行结束后,Executor Pod会保持Completed状态不会被自动删除,你可以随时用kubectl logs命令查看日志。 - 注意:长期堆积Completed状态的Pod会占用K8s集群资源,建议配合K8s的TTL自动清理机制。可通过自定义Executor Pod模板(比如
executor-template.yaml),在模板的metadata.annotations中添加kubernetes.io/ttlSecondsAfterFinished: "86400"(设置1天后自动删除),提交应用时指定模板:--conf spark.kubernetes.executor.podTemplateFile=executor-template.yaml。
二、持久化保存Executor日志(无需保留Pod)
如果不想保留Pod,更推荐直接把日志持久化到外部存储或日志系统:
- 集群级日志收集:在K8s集群部署Fluentd、Loki、ELK等日志采集工具,实时抓取所有Pod的日志并存储到持久化平台。这种方式无需修改Spark配置,只要集群配置好日志采集,即使Pod被删除,日志依然能在日志平台中检索查看。
- 挂载持久化存储保存日志:通过Spark配置指定Executor日志写入持久化PVC:
- 提交应用时添加以下配置:
--conf spark.kubernetes.executor.logs.path=/mnt/spark-executor-logs \ --conf spark.kubernetes.executor.volumes.persistentVolumeClaim.executor-logs.mount.path=/mnt/spark-executor-logs \ --conf spark.kubernetes.executor.volumes.persistentVolumeClaim.executor-logs.claimName=spark-executor-logs-pvc - 提前在K8s中创建对应的PVC(
spark-executor-logs-pvc),确保存储为持久化类型(如NFS、云存储卷)。Executor的日志会直接写入PVC,Pod删除后日志依然保留在存储中。
- 提交应用时添加以下配置:
- 临时抓取日志:如果只是临时排查问题,可在应用运行时用
kubectl cp命令把Executor Pod内的日志文件拷贝到本地,示例:kubectl cp <executor-pod-name>:/opt/spark/logs/ /local/path/to/save/logs。
内容的提问来源于stack exchange,提问作者Yu Qian
相关产品推荐
相关产品推荐

