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
相关产品推荐
相关产品推荐

