我们正在k8es集群中启动所有spark作业,如kubernetics(k8es)容器。我们还在每个作业上创建服务并为spark UI进行端口转发(容器4040映射到SvcPort,比如说31123)。 同一组节点也托管了一个Yarn集群。 Container的entry命令是在客户端模式下调用spark to submit to Yarn。
现在,spark容器可能会在任何名称节点上启动 - 主节点或备用节点。有一个VIP分配给活动名称节点。
当火花容器在活动名称节点上启动时,可以使用VIP从任何地方轻松访问spark UI及其所有选项卡:SvcPort 但是,当火花容器在备用名称节点上启动时,火花UI不可访问,最终请求失败并出现500错误(因为VIP:SvcPort被重定向到ActiveNamenode:8080,由于驱动程序现在在备用名称节点上运行,因此无法访问。
我试图推理并尝试多种服务配置,但这种情况似乎没有任何效果。这个配置是我尝试过的,当容器在主节点上时可以访问哪个UI,但是当容器在备用节点上时无法访问UI。
apiVersion: v1
kind: Service
metadata:
name: spark-svc
labels:
deployer: sample_app
app: spark-app
spec:
selector:
app: spark-app
ports:
- port: 31123
protocol: TCP
targetPort: 4040
name: ui
externalIPs:
- 192.168.122.22
任何人都可以为这种情况建议正确的k8es服务配置。我们不希望将spark容器限制为主名称节点,因为让k8es解决k8es集群中的作业负载。
非常感谢任何帮助。
答案 0 :(得分:0)
有一个spark ui代理,它连接到spark-master和其他节点的代理请求。在此处查看更多详细信息:https://github.com/kubernetes/examples/tree/master/staging/spark spark-ui-proxy-controller.yaml和spark-ui-proxy-service.yaml
这有用吗?