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

已配置必要Edit权限RBAC,Spark-Submit提交本地K8s集群仍失败

问题描述

已创建指定的serviceaccount(sa-apache-spark),并完成与edit集群角色的clusterrolebinding绑定,但向本地K8s集群提交Spark任务时仍失败。

提交命令:

$ spark-submit --master k8s://https://127.0.0.1:16443 --conf spark.executor.instances=1 --conf spark.kubernetes.container.image=spark:python3 --conf spark.kubernetes.file.upload.path=/tmp --conf spark.kubernetes.authenticate.driver.serviceAccountName=sa-apache-spark --deploy-mode cluster TextFile.py 

核心错误日志:

25/03/07 16:21:39 ERROR Client: Please check "kubectl auth can-i create pod" first. It should be yes.
Exception in thread "main" io.fabric8.kubernetes.client.KubernetesClientException: An error has occurred.
...
Caused by: java.io.IOException: timeout
...
Caused by: java.net.SocketException: Socket closed

权限验证结果:

$ kubectl auth can-i create pod
yes
问题分析

虽然kubectl auth can-i返回权限正常,但错误栈显示问题根源是Spark客户端与K8s API服务器的网络连接超时/套接字关闭,而非权限不足。常见触发场景包括:

  • Spark客户端无法正确访问K8s API服务器(地址/端口错误、TLS证书不被信任)
  • K8s API服务器响应缓慢,超出Spark客户端默认超时阈值
  • 本地代理、防火墙拦截了Spark与API服务器的连接
  • ServiceAccount的命名空间与任务部署命名空间不匹配
解决方案
  1. 校验K8s API服务器地址正确性
    执行kubectl cluster-info获取集群API服务器的实际地址,确保--master参数中的https://127.0.0.1:16443与实际地址一致。

  2. 处理TLS证书信任问题
    如果K8s API服务器使用自签名证书,需在Spark提交命令中指定CA证书路径:

    --conf spark.kubernetes.authenticate.caCertFile=/path/to/your/ca.crt
    

    证书路径可从本地~/.kube/config文件的certificate-authority字段获取。

  3. 调整Spark客户端超时参数
    延长Spark与K8s API服务器的连接/请求超时时间:

    --conf spark.kubernetes.connection.timeout=60000
    --conf spark.kubernetes.request.timeout=60000
    

    单位为毫秒,上述配置设置为60秒。

  4. 排查网络拦截问题
    执行以下命令测试API服务器连通性:

    curl -k https://127.0.0.1:16443/api/v1/pods
    

    若请求失败,关闭本地防火墙或添加允许规则,同时检查是否存在代理拦截连接。

  5. 确认ServiceAccount命名空间匹配
    确保sa-apache-spark存在于Spark任务部署的目标命名空间(默认default),或在提交命令中显式指定命名空间:

    --conf spark.kubernetes.namespace=your-target-namespace
    

    同时验证ClusterRoleBinding是否正确绑定了该ServiceAccount(ClusterRoleBinding为集群级,但ServiceAccount属于特定命名空间,需确保绑定关系无遗漏)。

  6. 检查Spark镜像网络配置
    确认spark:python3镜像内部可正常解析并访问K8s API服务器,可进入镜像测试DNS解析和网络连通性。

内容的提问来源于stack exchange,提问作者khteh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:17:33