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

Minikube中Spark集群模式提交任务失败:找不到指定ConfigMap

解决Spark on Kubernetes集群模式下ConfigMap缺失导致的启动失败问题

问题诊断

错误MountVolume.SetUp failed for volume "spark-conf-volume-driver" : configmap "spark-drv-27c9b887c306cb9c-conf-map" not found说明Spark提交任务时,自动创建的Driver配置ConfigMap未成功生成,或Pod无权限访问它。结合你的操作步骤和日志,核心问题集中在权限配置、Spark版本兼容、PVC参数错误这几个方面。

具体修复步骤

1. 修正ServiceAccount的RoleBinding拼写错误

你创建RoleBinding时打错了名称(spark-edito-role少了一个r),这会导致ServiceAccount没有足够权限创建ConfigMap等K8s资源:

# 删除错误的RoleBinding
kubectl delete rolebinding spark-edito-role --namespace=spark-kubernetes-concepts-demo
# 创建正确的RoleBinding
kubectl create rolebinding spark-editor-role --clusterrole=cluster-admin --serviceaccount=spark-kubernetes-concepts-demo:spark-editor

2. 修正Spark提交命令中的PVC配置错误

你的PVC配置存在两处错误:

  • claimName=OnDemand应该改为你预先创建的PVC名称spark-claim
  • 预先绑定好的PVC不需要指定sizeLimit和storageClass参数

修正后的PVC相关配置:

--conf spark.kubernetes.executor.volumes.persistentVolumeClaim.spark-local-dir-pv.options.claimName=spark-claim\
--conf spark.kubernetes.executor.volumes.persistentVolumeClaim.spark-local-dir-pv.mount.path=/mnt/data\
--conf spark.kubernetes.executor.volumes.persistentVolumeClaim.spark-local-dir-pv.mount.readOnly=false\

3. 移除Spark版本不兼容的配置

你使用的是Spark 2.4.6,而spark.dynamicAllocation.shuffleTracking.enabled是Spark 3.0+才引入的特性,配置不兼容会导致启动流程异常,进而引发ConfigMap创建失败,直接移除这两个配置:

# 删掉这两行配置
# --conf spark.dynamicAllocation.enabled=true \
# --conf spark.dynamicAllocation.shuffleTracking.enabled=true \

4. 确保Minikube能访问本地构建的镜像

如果你是在本地构建的镜像,需要让Minikube的Docker环境能识别到它,否则会拉取失败导致流程中断:

# 切换到Minikube的Docker环境
eval $(minikube docker-env)
# 重新构建镜像
docker build -t spark_kubernetes_concepts_demo:latest .

5. 修正Jar包路径的多余斜杠

你的Jar包路径多了一个斜杠,改为正确路径:local:///opt/application/DisDPMM_2_13-1.0-jar-with-dependencies.jar

完整修正后的spark-submit命令

spark-submit \
    --master k8s://$KUBERNETES_MASTER\
    --deploy-mode cluster \
    --name DisDPMM \
    --class my_code.DisDPMM\
    --conf spark.executor.instances=1 \
    --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark-editor \
    --conf spark.kubernetes.namespace=spark-kubernetes-concepts-demo\
    --conf spark.kubernetes.container.image=spark_kubernetes_concepts_demo:latest \
    --conf spark.kubernetes.executor.volumes.persistentVolumeClaim.spark-local-dir-pv.options.claimName=spark-claim\
    --conf spark.kubernetes.executor.volumes.persistentVolumeClaim.spark-local-dir-pv.mount.path=/mnt/data\
    --conf spark.kubernetes.executor.volumes.persistentVolumeClaim.spark-local-dir-pv.mount.readOnly=false\
    --conf spark.kubernetes.context=minikube\
    local:///opt/application/DisDPMM_2_13-1.0-jar-with-dependencies.jar

额外验证步骤

  • 检查PV/PVC绑定状态:kubectl get pvc spark-claim --namespace=spark-kubernetes-concepts-demo,确保STATUS为Bound
  • 验证ServiceAccount权限:kubectl auth can-i create configmap --namespace=spark-kubernetes-concepts-demo --as=system:serviceaccount:spark-kubernetes-concepts-demo:spark-editor,输出应为yes
  • 查看Minikube状态:minikube status,确保集群正常运行

内容的提问来源于stack exchange,提问作者My coding Way

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:40:05