incubator-streampark icon indicating copy to clipboard operation
incubator-streampark copied to clipboard

[Proposal][Refactor] support Flink job on native kubernetes mode

Open legendtkl opened this issue 3 years ago • 2 comments

Search before asking

  • [X] I had searched in the feature and found no similar feature requirement.

Description

先用中文描述,后续补充中文版本(Will rewrite in english late.)

1. 背景

随着云原生的普及,Kubernetes 成为越来越多公司的云原生底座,越来越多的大数据作业被运行到 k8s 上面,比如 Flink,官方从 1.12 版本已经开始支持 on native k8s 的模式。参考:https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/resource-providers/native_kubernetes/

该 issue 主要讨论如何在平台侧更好的支持 Flink on native k8s.

2. 限制

主要讨论目前社区现状的限制和目前 StreamX 实现上的限制。

1. 社区限制

社区目前在 Flink on k8s 使用方面最大的限制在于需要 main jar 存在于 Flink 镜像中,这也就意味着需要冗杂的前置工作(镜像打包发布等)

2. StreamX 实现限制

目前 StreamX 针对上面的社区限制将镜像的打包发布等做到平台侧,这虽然可以解决问题,但是会导致如下问题:

  • 链路太长
  • StreamX 内部需要 docker 环境,特别是 StreamX 容器化部署的时候会导致 StreamX 镜像较大

3. Proposal

针对上面的问题,一个可行的改进点是基于 Flink 官方提供的 Pod Template 的方式。

简单来说,Pod Template 就是用户提供一个 Pod 模板,Flink 在启动 JobManager 和 TaskManager 的时候使用该模板来初始化 JobManager 和 TaskManager 的 Pod。

基于 Pod Template,我们可以将一个 downloader 镜像作为 init container 加到 Pod Template 中,在作业启动时,downloader 将用户的 main jar 或者 sql 等下载到 JM/TM 内部的 user classpath 下,然后启动。

4. Task 分解

涉及到的 Task 主要包括:

  1. StreamX 镜像打包流程改造
  2. 新增 StorageHandler 负责用户的资源文件(main jar、sql 等)的上传和下载,这个也是 downloader 的核心逻辑。上传是在 StreamX 侧完成,将用户的资源文件上传到 remote storage,可以是 hdfs,也可以是公有云的存储系统,比如阿里云的 oss,AWS 的 s3 等
  3. 新增 Pod Template 的核心提交逻辑

Usage Scenario

No response

Related issues

No response

Are you willing to submit a PR?

  • [X] Yes I am willing to submit a PR!

Code of Conduct

legendtkl avatar Aug 08 '22 15:08 legendtkl

非常棒的特性, 当前StreamX支持的Flink最低版本也是 1.12, 刚好满足这个条件. 这么一来大概会涉及到这些流程:

  1. 废弃现在的打Jar 和 打镜像的逻辑
  2. 在任务新增或者修改在本地的local workspace下(如需要)将任务的依赖文件(jar | udf | connector)等 放置到该任务(附带appId)的目录下
  3. 在前端按钮点击"上线" 时, 启动 StorageHandler, 将这些资源文件上传到 remote storage
  4. 当任务点击"启动" 时, 在 Pod Template 中挂载资源文件,并且实现核心提交逻辑.

会涉及到前端和后端的改动操作.后续可以讨论个拆分任务的方案. 共同协作

wolfboys avatar Aug 08 '22 15:08 wolfboys

Subtasks:

  1. 新增 StorageService 模块 https://github.com/streamxhub/streamx/pull/1367

legendtkl avatar Aug 12 '22 16:08 legendtkl