运行spark-client snap时特定节点Executor Pod无法启动问题排查
问题排查:MicroK8s集群中Spark Executor在新Ubuntu节点启动失败
环境与问题概述
- 集群部署:通过
snap install microk8s --classic搭建本地多节点MicroK8s集群,搭配snap install spark-client --edge部署spark-client - 节点构成:2个基于Windows 11 WSL2的Ubuntu节点,新增1台物理Ubuntu笔记本节点
- 核心问题:执行
spark-client.spark-shell ...时,WSL节点的Spark Executor可正常启动,新Ubuntu节点的Executor启动失败;新节点可正常运行HDFS Pod,具备基础Pod运行能力 - 关键错误日志:Executor Pod失败时仅捕获到一行日志:
error: unknown command "executor", see 'pebble help'
已知线索
- Pod配置包含
executor参数,推测问题与该参数相关 - 使用镜像为
ghcr.io/canonical/charmed-spark:3.4.0-22.04_edge,本地可直接运行该镜像 - 不同节点上该镜像的sha256值存在差异
解决与进一步排查思路
- 统一节点镜像版本:在新节点手动拉取指定镜像,执行
docker pull ghcr.io/canonical/charmed-spark:3.4.0-22.04_edge,拉取完成后对比WSL节点的镜像sha256值,确保所有节点使用完全一致的镜像版本,避免镜像差异导致的命令不兼容 - 保留失败Pod以排查细节:修改Spark提交配置,添加
spark.kubernetes.executor.deleteOnTermination=false参数,执行spark-client.spark-shell --conf spark.kubernetes.executor.deleteOnTermination=false ...,让失败的Executor Pod保留,通过kubectl logs <Pod名称>查看完整日志,或kubectl get pod <Pod名称> -o yaml检查Pod的启动命令与参数配置 - 本地验证镜像命令兼容性:在新节点直接运行镜像并尝试执行
executor命令,执行docker run --rm ghcr.io/canonical/charmed-spark:3.4.0-22.04_edge executor,确认镜像本身是否支持该命令,排查是否是镜像本地运行环境的问题 - 对比节点MicroK8s版本:在所有节点执行
microk8s version,确认新节点与WSL节点的MicroK8s版本是否一致,避免因版本差异导致Pod调度后的运行逻辑不同 - 检查Pebble配置与版本:进入新节点的镜像容器,查看Pebble的配置目录(通常为
/var/lib/pebble/default/),确认是否存在executor命令的定义;同时对比WSL节点与新节点中镜像内的Pebble版本,排查是否因Pebble版本差异导致命令不识别
内容的提问来源于stack exchange,提问作者mentics
相关产品推荐
相关产品推荐

