https://github.com/apache/zeppelin/pull/4116 PR 还没merge
环境要求
- 安装kubectl
- kubeconfig配置好
- 如果Zeppelin是运行在K8s环境之外,那么要确保Zeppelin所在机器和K8s机器里的Pod网络是双向打通的,一般如果是K8s的网络环境是underlay的话,就是两边互通的。
两种模式
- Zeppelin 运行在 K8s 外,Flink运行在K8s内
- Zeppelin 和 Flink 都运行在K8s内
以下3个步骤两种模式都需要:
Step 1
下载官方 flink(1.12以上版本) 的版本(scala-2.11 ,scala-2.12都可以),然后解压缩。
Step 2
修改conf目录下的 log4j-console.properties, 增加下面这两行,否则有可能你会在JobManager log里看到一些log (https://issues.apache.org/jira/browse/FLINK-18129)
logger.flink_rest.name = org.apache.flink.runtime.jobmaster.MiniDispatcherRestEndpoint
logger.flink_rest.level = ERROR
Step 3
把ZEPPELIN_HOME/interpreter/flink/zeppelin-flink-0.10.0-SNAPSHOT-*.jar copy到FLINK_HOME下(ZEPPELIN_HOME/interpreter/flink下有2个jar,具体copy哪个取决于你在Step 1下载的flink是scala-2.11的还是scala-2.12de)
然后在FLINK_HOME下创建下面的Dockerfile (我下面用的是scala-2.11, 如果你是scala-2.12, 请自行修改),
FROM flink:1.12.2-scala_2.11-java8
ADD conf/log4j-console.properties /opt/flink/conf/log4j-console.properties
ADD zeppelin-flink-0.10.0-SNAPSHOT-2.11.jar /opt/flink
Step 4
然后运行下面的命令 build 你的镜像
docker build -t your_repo/flink:1.12.2-scala_2.11-java8 .
docker push your_repo/flink:1.12.2-scala_2.11-java8
创建ServiceAccount (可选)
kubectl create serviceaccount flink -n default
kubectl create clusterrolebinding flink-role-binding-flink --clusterrole=edit --serviceaccount=default:flink
配置 Flink on K8s
在Zeppelin中运行 Flink on K8s需要至少以下几个配置
- FLINK_HOME 设置为本地 flink 的地址 (注意:不是docker 镜像里的flink路径)
- flink.execution.mode 设置为 kubernetes-application
- flink.app.jar 设置为 local:///opt/flink/zeppelin-flink-0.10.0-SNAPSHOT-2.11.jar ,这个jar就是上我们上面制作镜像时放进去的flink interpreter jar
- kubernetes.container.image 设置为上面我们制作的镜像地址
- kubernetes.cluster-id 设置为flink 集群的id,这个flink集群的jobmanager pod和taskmanager pod的名字都会以这个集群id为开头,所以必须设置为一个唯一值,否则你无法分辨两个不同的flink集群的pod。
这是我的一个例子:
更多Flink on K8s的配置可以参考这个链接
https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/deployment/config/#kubernetes
Zeppelin on K8s
如何你想你的Zeppelin也运行在K8s里,需要执行以下步骤:
- 创建含有Flink的Zeppelin Server镜像
- 部署Zeppelin到K8s
创建含有Flink的Zeppelin Server镜像
默认的Zeppelin server镜像是没有Flink的,你需要把Flink打到Zeppelin的镜像里(
修改
COPY flink-1.14.0 /flink-1.14.0
RUN chmod -R 775 /flink-1.14.0
修改ZEPPELIN_HOME/k8s/zeppelin-server.yaml里的image
比如:image: registry-vpc.cn-hongkong.aliyuncs.com/streamcompute/zeppelin:0.11.0-SNAPSHOT