apache-spark - 用户“system:anonymous”无法在命名空间“default”的 API 组“”中创建资源“pods”
问题描述
我正在尝试在 EKS 上运行 Spark。创建了一个 EKS 集群,添加了节点,然后尝试从 EC2 实例提交 Spark 作业。
运行以下命令进行访问:
kubectl create serviceaccount spark
kubectl create clusterrolebinding spark-role --clusterrole=admin --serviceaccount=default:spark --namespace=default
使用的 spark-submit 命令:
bin/spark-submit \
--master k8s://https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.us-east-1.eks.amazonaws.com \
--deploy-mode cluster \
--name spark-pi \
--class org.apache.spark.examples.SparkPi \
--conf spark.executor.instances=2 \
--conf spark.app.name=spark-pi \
--conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
--conf spark.kubernetes.container.image=k8sspark:latest \
--conf spark.kubernetes.authenticate.submission.caCertFile=ca.pem \
local:////usr/spark-2.4.3-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.4.3.jar 100000
它返回:
log4j:WARN 找不到记录器 (io.fabric8.kubernetes.client.Config) 的附加程序。log4j:WARN 请正确初始化 log4j 系统。log4j:WARN 有关详细信息,请参阅http://logging.apache.org/log4j/1.2/faq.html#noconfig。使用 Spark 的默认 log4j 配置文件:org/apache/spark/log4j-defaults.properties 19/06/06 16:03:50 警告 WatchConnectionManager:执行程序在关闭()中关闭后没有及时终止,将其杀死:io。 fabric8.kubernetes.client.dsl.internal.WatchConnectionManager@5b43fbf6 线程“主”io.fabric8.kubernetes.client.KubernetesClientException 中的异常:执行失败:POST 在:https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.us-east-1.eks.amazonaws .com/api/v1/namespaces/default/pods. 消息:pods 被禁止:用户“system:anonymous”无法在命名空间“default”中的 API 组“”中创建资源“pods”。收到状态:Status(apiVersion=v1, code=403, details=StatusDetails(causes=[], group=null, kind=pods, name=null, retryAfterSeconds=null, uid=null, additionalProperties={}), kind=状态,message=pods 被禁止:用户“system:anonymous”无法在命名空间“default”中的 API 组“”中创建资源“pods”,metadata=ListMeta(_continue=null, resourceVersion=null, selfLink=null, additionalProperties= {}),原因=禁止,状态=失败,附加属性={})。在 io.fabric8.kubernetes.client.dsl.base.OperationSupport.requestFailure(OperationSupport.java:478) 在 io.fabric8.kubernetes.client.dsl.base.OperationSupport。
尝试使用管理员权限创建不同的集群角色。但它没有用。
知道如何解决这个问题吗?
解决方案
我在 GKE 上遇到了类似的问题,我解决它的方法是:
删除 $HOME/.kube 文件夹:
rm -rvf ~/.kube
要获取新的 k8 凭据,应创建一个新文件夹
~/.kube
在运行 spark-submit 之前,请确保先运行以下命令:
kubectl get pods
如果kubectl get
操作成功完成,您将拥有一个~/.kube/config
目录。
推荐阅读
- sql - 无法使用左连接编写更新语句
- python - Seaborn 子图未显示 IPython
- python - 在 tkinter 中构建了一个简单的 GUI 提示用户输入值之后,您如何实际使用他们输入的值?
- javascript - 从 obervablehq 迁移到 html 的径向树示例在左上角居中呈现
- python - 我在这种复杂的 numpy 用法中的错误在哪里?
- sockets - 通过 TCP 连接到 Socket 但服务器没有接收到它
- node.js - 向 MS Teams 发送主动消息时出错
- spring - 在 Spring Cloud Stream 中应用 functionRouting 时发生 NullPointerException
- firebase - Firestore 安全规则:检查地图列表的值
- reactjs - Next.js 在本地目录中搜索图像,而不是在 AWS 上