Moh*_*ina 2 rbac apache-spark fabric8 kubernetes kubeadm
我遇到错误Expected HTTP 101 response but was '403 Forbidden'在我设置一个新的Kubernetes集群并Kubeadm使用一个主服务器和两个工作器后,我提交了pyspark示例应用程序,遇到以下ERROR消息:
spark-submit命令
spark-submit --master k8s://master-host:port \
--deploy-mode cluster --name test-pyspark \
--conf spark.kubernetes.container.image=mm45/pyspark-k8s-example:2.4.1 \
--conf spark.kubernetes.pyspark.pythonVersion=3 \
--conf spark.executor.instances=1 \
--conf spark.executor.memory=1000m \
--conf spark.driver.memory=1000m \
--conf spark.executor.cores=1 \
--conf spark.driver.cores=1 \
--conf spark.driver.maxResultSize=10g /usr/bin/run.py
Run Code Online (Sandbox Code Playgroud)
错误详情:
19/08/24 19:38:06 WARN WatchConnectionManager: Exec Failure: HTTP 403, Status: 403 -
java.net.ProtocolException: Expected HTTP 101 response but was '403 Forbidden'
Run Code Online (Sandbox Code Playgroud)
群集详细信息:
群集角色绑定:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: fabric8-rbac
subjects:
- kind: ServiceAccount
name: default
namespace: default
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
Run Code Online (Sandbox Code Playgroud)
完整的Pod日志和错误堆栈跟踪
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: fabric8-rbac
subjects:
- kind: ServiceAccount
name: default
namespace: default
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
Run Code Online (Sandbox Code Playgroud)
您能帮我弄清楚吗?
小智 7
这是在Kubernetes v1.15.3,Kubernetes v1.14.6,Kubernetes v1.13.10版本中发生的,项目Spark运算符有一种解决方法,即添加kubernetes-client最新版本(kubernetes-client-4.4.2.jar),您需要要删除映像中的实际版本,可以在Dockerfile中添加下一行
RUN rm $SPARK_HOME/jars/kubernetes-client-3.0.0.jar
ADD https://repo1.maven.org/maven2/io/fabric8/kubernetes-client/4.4.2/kubernetes-client-4.4.2.jar $SPARK_HOME/jars
Run Code Online (Sandbox Code Playgroud)
如果Invocation error在应用此修复程序后得到了帮助,则可能还要将kubernetes-model-*。jar也升级到4.4.2。
但是,如果您不希望/不希望将k8s-client从3.0.0升级到4.4.2,因为这是一个很大的跃点,并且可能会导致遗留问题,那么这里有一个更深入(更技术性)的解决方案和发生了什么的解释(参考:#SPARK-28921)
当使用的Kubernetes URL未指定端口(例如https://example.com/api/v1/ ..)时,监视请求的原始标头以端口-1结尾(例如https:/ /example.com:-1)。发生这种情况是因为
getPort(),在没有显式指定端口的java.net.URL对象上进行调用将始终返回-1。返回值始终只是插入到原始标头中。
https://github.com/fabric8io/kubernetes-client/pull/1669
如您在这里所见,直到修复才被应用kubernetes-client-4.4.x。我所做的是修补当前的.jar并构建自定义的.jar:
/opt/spark/jars/kubernetes-client-3.0.0.jar自定义的.jar 替换。| 归档时间: |
|
| 查看次数: |
1798 次 |
| 最近记录: |