在 kubernetes 上使用 zeppelin 公开 spark-ui
Expose spark-ui with zeppelin on kubernetes
首先,我对所有这些(kubernetes、ingress、spark/zeppelin ...)都很陌生,所以如果这很明显,我深表歉意。我尝试在这里搜索文档等,但找不到任何东西。
我正在尝试让 spark 解释器 ui 可以从我在 kubernetes 上的 zeppelin notebook 运行 访问。
根据我从这里的理解:http://zeppelin.apache.org/docs/0.9.0-preview1/quickstart/kubernetes.html,我的入口 yaml 看起来像这样:
Ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-zeppelin-server-http
http
spec:
rules:
- host: my-zeppelin.my-domain
http:
paths:
- backend:
serviceName: zeppelin-server
servicePort: 8080
- host: '*.my-zeppelin.my-domain'
http:
paths:
- backend:
serviceName: spark-guovyx
servicePort: 4040
status:
loadBalancer: {}
我的问题是我需要依赖服务名称(在本例中为 spark-guovyx)设置为解释器 pod 名称才能显示 UI。但是,由于此名称必然会更改/有不同的名称(即我每个用户有一个口译员 + 口译员经常重新启动)显然我不能依赖手动设置它。我最初的想法是为 serviceName 使用某种通配符命名,但结果 ingress/kubernetes 不支持。有什么想法吗?
谢谢。
您可以创建一个新服务并利用 spark master pod 的 interpreterSettingName 标签。当 zeppelin 创建主 spark pod 时,它会添加此标签,其值为 spark。我不确定在每个用户每个解释器设置中它是否适用于多个 pods。下面是服务代码,请告诉我每个解释器每个用户的行为方式。
kind: Service
apiVersion: v1
metadata:
name: sparkUI
spec:
ports:
- name: spark-ui
protocol: TCP
port: 4040
targetPort: 4040
selector:
interpreterSettingName: spark
clusterIP: None
type: ClusterIP
然后您可以将入口设置为:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-zeppelin-server-http
http
spec:
rules:
- host: my-zeppelin.my-domain
http:
paths:
- backend:
serviceName: zeppelin-server
servicePort: 8080
- host: '*.my-zeppelin.my-domain'
http:
paths:
- backend:
serviceName: sparkUI
servicePort: 4040
status:
loadBalancer: {}
也请查看此存储库 https://github.com/cuebook/cuelake,它仍处于开发的早期阶段,但很想听听您的反馈。
首先,我对所有这些(kubernetes、ingress、spark/zeppelin ...)都很陌生,所以如果这很明显,我深表歉意。我尝试在这里搜索文档等,但找不到任何东西。
我正在尝试让 spark 解释器 ui 可以从我在 kubernetes 上的 zeppelin notebook 运行 访问。 根据我从这里的理解:http://zeppelin.apache.org/docs/0.9.0-preview1/quickstart/kubernetes.html,我的入口 yaml 看起来像这样:
Ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-zeppelin-server-http
http
spec:
rules:
- host: my-zeppelin.my-domain
http:
paths:
- backend:
serviceName: zeppelin-server
servicePort: 8080
- host: '*.my-zeppelin.my-domain'
http:
paths:
- backend:
serviceName: spark-guovyx
servicePort: 4040
status:
loadBalancer: {}
我的问题是我需要依赖服务名称(在本例中为 spark-guovyx)设置为解释器 pod 名称才能显示 UI。但是,由于此名称必然会更改/有不同的名称(即我每个用户有一个口译员 + 口译员经常重新启动)显然我不能依赖手动设置它。我最初的想法是为 serviceName 使用某种通配符命名,但结果 ingress/kubernetes 不支持。有什么想法吗?
谢谢。
您可以创建一个新服务并利用 spark master pod 的 interpreterSettingName 标签。当 zeppelin 创建主 spark pod 时,它会添加此标签,其值为 spark。我不确定在每个用户每个解释器设置中它是否适用于多个 pods。下面是服务代码,请告诉我每个解释器每个用户的行为方式。
kind: Service
apiVersion: v1
metadata:
name: sparkUI
spec:
ports:
- name: spark-ui
protocol: TCP
port: 4040
targetPort: 4040
selector:
interpreterSettingName: spark
clusterIP: None
type: ClusterIP
然后您可以将入口设置为:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-zeppelin-server-http
http
spec:
rules:
- host: my-zeppelin.my-domain
http:
paths:
- backend:
serviceName: zeppelin-server
servicePort: 8080
- host: '*.my-zeppelin.my-domain'
http:
paths:
- backend:
serviceName: sparkUI
servicePort: 4040
status:
loadBalancer: {}
也请查看此存储库 https://github.com/cuebook/cuelake,它仍处于开发的早期阶段,但很想听听您的反馈。