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个步骤两种模式都需要:

  • 创建Flink Docker 镜像
  • 创建ServiceAccount
  • 配置Flink on K8s

    创建Docker镜像

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)

  1. logger.flink_rest.name = org.apache.flink.runtime.jobmaster.MiniDispatcherRestEndpoint
  2. 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, 请自行修改),

  1. FROM flink:1.12.2-scala_2.11-java8
  2. ADD conf/log4j-console.properties /opt/flink/conf/log4j-console.properties
  3. ADD zeppelin-flink-0.10.0-SNAPSHOT-2.11.jar /opt/flink

Step 4

然后运行下面的命令 build 你的镜像

  1. docker build -t your_repo/flink:1.12.2-scala_2.11-java8 .
  2. docker push your_repo/flink:1.12.2-scala_2.11-java8

创建ServiceAccount (可选)

  1. kubectl create serviceaccount flink -n default
  2. 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。

这是我的一个例子:

image.png

更多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