我试图在Kubernetes上运行Spark作为调度程序。
当使用kubectl proxy
从kubernetes集群外部运行时,它可以正常工作。
spark-shell --master k8s://http://localhost:8001 --conf spark.kubernetes.container.image=abdoumediaoptimise/spark
但是,每当我们尝试从pod中直接运行spark-shell或spark-submit时,它都不会起作用(即使使用--conf spark.kubernetes.authenticate.driver.ServiceAccountName=spark
从spark文档中执行rbac也不会起作用。我们有授权执行异常:
io.fabric8.kubernetes.client.kubernetesclientException:执行:GET at:https://kubernetes/api/v1/namespaces/default/pods失败?LabelSelector=spark-app-selector%3dspark-application-1574714537374,spark-role%3dexecutor。消息:禁止!配置的服务帐户没有访问权限。服务帐户可能已被吊销。pods被禁止:用户“system:serviceaccount:default:default”无法在命名空间“default”中的API组“”中列出资源“pods”
知道如何从吊舱里发射火花吗?这实际上使得在笔记本电脑上使用spark K8s://是不可能的
火花RBAC YAML文件
apiVersion: v1
kind: ServiceAccount
metadata:
name: spark
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: spark
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: edit
subjects:
- kind: ServiceAccount
name: spark
namespace: default
Spark.Kubernetes.authenticate.driver.ServiceAccountName
-是ServiceAccount名称,火花驱动程序的Kubernetes客户端使用它对Kubernetes API进行身份验证,以请求执行程序。
您正在查找spark.Kubernetes.authenticate.submission.*
,它们用于配置sparksubmit
应用程序的Kubernetes客户端,以通过身份验证到Kubernetes API以请求服务、ConfigMap和驱动程序Pod。
要使其正常工作,请使用感兴趣的ServiceAccount配置Pod:spec.ServiceAccountName:
。之后,使用挂载到Pod内的/var/run/secrets/kubernetes.io/serviceAccount
目录文件来配置spark.kubernetes.authenticate.submission.*
选项。