首页 > 解决方案 > 用户“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。

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

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

标签: apache-sparkkubernetesamazon-eks

解决方案


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

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

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

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

kubectl get pods

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


推荐阅读