【问题标题】:User "system:anonymous" cannot create resource "pods" in API group "" in the namespace "default"用户“system:anonymous”无法在命名空间“default”的 API 组“”中创建资源“pods”
【发布时间】:2019-10-22 09:27:14
【问题描述】:

我正在尝试在 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 WARN WatchConnectionManager:在 close() 中关闭后,执行程序没有及时终止,将其杀死: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.assertResponseCode(OperationSupport.java:417) 在 io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:381) 在 io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:344) 在 io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleCreate(OperationSupport.java:227) 在 io.fabric8.kubernetes.client.dsl.base.BaseOperation.handleCreate(BaseOperation.java:787) 在 io.fabric8.kubernetes.client.dsl.base.BaseOperation.create(BaseOperation.java:357) 在 org.apache.spark.deploy.k8s.submit.Client$$anonfun$run$2.apply(KubernetesClientApplication.scala:141) 在 org.apache.spark.deploy.k8s.submit.Client$$anonfun$run$2.apply(KubernetesClientApplication.scala:140) 在 org.apache.spark.util.Utils$.tryWithResource(Utils.scala:2543) 在 org.apache.spark.deploy.k8s.submit.Client.run(KubernetesClientApplication.scala:140) 在 org.apache.spark.deploy.k8s.submit.KubernetesClientApplication$$anonfun$run$5.apply(KubernetesClientApplication.scala:250) 在 org.apache.spark.deploy.k8s.submit.KubernetesClientApplication$$anonfun$run$5.apply(KubernetesClientApplication.scala:241) 在 org.apache.spark.util.Utils$.tryWithResource(Utils.scala:2543) 在 org.apache.spark.deploy.k8s.submit.KubernetesClientApplication.run(KubernetesClientApplication.scala:241) 在 org.apache.spark.deploy.k8s.submit.KubernetesClientApplication.start(KubernetesClientApplication.scala:204) 在 org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:849) 在 org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:167) 在 org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:195) 在 org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86) 在 org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:924) 在 org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:933) 在 org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 19/06/06 16:03:50 信息 ShutdownHookManager:调用了关闭挂钩 19/06/06 16:03:50 INFO ShutdownHookManager:删除目录 /tmp/spark-0060fe01-33eb-4cb4-b96b-d5be687016bc

尝试使用管理员权限创建不同的集群角色。但它没有用。

知道如何解决这个问题吗?

【问题讨论】:

  • 你是如何创建 pod 的?您是否将服务帐户附加到它?您的 pod 似乎没有被分配您创建的服务帐户。
  • 对我来说这更像是身份验证问题,因为您与 k8s 集群的连接转向 system:anonymous,可能建议还添加 --conf spark.kubernetes.authenticate.submission.oauthToken 属性并提供适当的令牌。
  • sudo ./bin/spark-submit 对你有用吗?
  • 您好,您找到问题了吗?我也被困在同一点上。

标签: apache-spark kubernetes amazon-eks


【解决方案1】:

我在 GKE 上遇到了类似的问题,我解决它的方法是:

  1. 删除 $HOME/.kube 文件夹:
    rm -rvf ~/.kube

  2. 要获取新的 k8 凭据,应创建一个新文件夹 ~/.kube

  3. 在运行 spark-submit 之前,请确保首先运行以下命令:

kubectl get pods

如果kubectl get 操作成功完成,您将拥有一个~/.kube/config 目录。

【讨论】:

    猜你喜欢
    • 2020-04-23
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2021-11-13
    • 2021-06-09
    • 2020-09-19
    • 2020-06-25
    • 1970-01-01
    相关资源
    最近更新 更多