问题反馈、代码提交、文章投稿与社区贡献请移步 Github issue。
Github issue #66 登记企业或组织生产使用,可邀请至企业支持群,获取团队技术支持与其他企业用户的经验分享。
GitHub 地址 
一、概述
Dinky 是一个基于 Apache Flink 的实时计算平台,它提供了一站式的 Flink 任务开发、运维、监控等功能。Kubernetes 是一个强大的容器编排平台,能够自动化应用的部署、扩展和管理。将 Flink 与 Kubernetes 集成,可以充分利用 Kubernetes 的优势,实现 Flink 任务的弹性伸缩、自动化部署和高可用性。
二、前置条件
确保已安装 Kubernetes 集群,并且
kubectl
命令行工具已配置好,能够与集群通信。已安装 Dinky >= 1.0.3 版本
理解 Kubernetes 的基本概念,如 Pod、Service、Deployment、Namespace 等。
三、Kubernetes 环境准备
在 Kubernetes 上部署 Dinky 之前,需要准备相应的 Kubernetes 资源对象。
创建命名空间
kubectl create namespace dinky
创建服务账号和角色绑定
kubectl create serviceaccount dinky -n dinkykubectl create rolebinding dinky-admin --clusterrole=admin --serviceaccount=dinky:dinky -n dinky
制作镜像
准备依赖
mkdir docker && cd docker# dinky/jar为dinky安装目录,请替换为你自己的安装目录mv /dinky/jar/dinky-app-1.15-1.0.3-jar-with-dependencies.jar ./mv ${其他依赖} ./
上述仅为基础必须的依赖,如果你的flink任务有其他依赖需求,请自行补充添加。
编写Dockerfile
vim Dockerfile
ARG FLINK_VERSION=1.15.4 # flink 版本号FROM flink:${FLINK_VERSION}-scala_2.12 # flink官方镜像tag# 把当前目录下的jar添加进依赖目录ADD . opt/flink/lib# 删除loader包,替换为不带loader的RUN rm -rf opt/flink/lib/flink-table-planner-loader-*.jar \mv opt/flink/opt/flink-table-planner_2.12-*.jar opt/flink/lib
构建镜像并推送到私有镜像仓库
# 构建Dinky app镜像docker build -t dinky-flink:1.0.3-1.15.4 . --no-cache# 这一步为推送到私有镜像仓库过程,请根据需要自行修改参数docker tag dinky-flink:1.0.3-1.15.4 192.168.0.10:5000/dinky-flink-1.0.3-1.15.4docker push 192.168.0.10:5000/dinky-flink-1.0.3-1.15.4
四、配置 Kubernetes 集群信息

Kubernetes 基本配置
| 参数 | 说明 | 是否必填 | 默认值 | 示例值 |
| 暴露端口类型 | 支持 NodePort 与 ClusterIP | 是 | 无 | NodePort |
| Kubernetes命名空间 | 集群所在的Kuberbetes命名空间 | 是 | 无 | default |
| K8S提交账号 | 集群提交任务的账号 | 是 | 无 | default |
| Flink镜像地址 | 上一步打包的镜像地址 | 是 | 无 | 192.168.0.10:5000/dinky-flink-1.0.3-1.15.4 |
| JobManager CPU 配置 | JobManager 资源配置 | 否 | 无 | 1 |
| TaskManager CPU 配置 | TaskManager 资源配置 | 否 | 无 | 1 |
| Flink 配置文件路径 | 仅指定到文件夹,flink会自行读取文件夹下的配置文件并作为flink的默认配置 | 否 | 无 | 这会目前只能填/opt/flink/conf,且在dinky此目录要有flink日志配置文件,否则容器内无法生成日志 |
如果您有其他的配置项需要添加,请点击添加配置项按钮,添加完毕后,点击保存即可。
对于 Flink 配置文件路径 参数需要特别说明,这个路径指的是dinky所在服务器本地路径,指向flink 安装目录conf文件夹,flink会读取该目录下所有文件映射到k8s容器中flink的conf目录,除非有特别需求,否则不建议进行配置,留空即可。
Kubernetes 链接与 pod 配置(选填)
| 参数 | 说明 | 是否必填 | 默认值 | 示例值 |
| K8S KuberConfig | 集群的KubeConfig内容,如果不填写,则默认使用~/.kube/config文件,建议填写 | 否 | 无 | 无 |
| Default Pod Template | 默认的Pod模版 | 否 | 无 | 无 |
| JM Pod Template | JobManager的Pod模版 | 否 | 无 | 无 |
| TM Pod Template | TaskManager的Pod模版 | 否 | 无 | 无 |
提交 FlinkSQL 配置项(必填)
| 参数 | 说明 | 是否必填 | 默认值 | 示例值 |
| Jar文件路径 | 指定镜像内dinky-app的Jar文件路径,如果该集群配置用于提交Application模式任务时,则必填 | 是 | 无 | local:///opt/flink/dinky-app-1.16-1.0.0-jar-with-dependencies.jar |
由于 flink 限制,k8s模式只能加载镜像内的jar包,也就是地址必须为local://开头,这也是为什么dinky-app-1.15-1.0.3-jar-with-dependencies.jar 必须打到镜像里的原因。
Flink预设配置(可选)
| 参数 | 说明 | 是否必填 | 默认值 | 示例值 |
| JobManager 内存 | JobManager 内存大小 | 否 | 无 | 1g |
| TaskManager 内存 | TaskManager 内存大小 | 否 | 无 | 1g |
| TaskManager堆内存 | TaskManager堆内存大小(不建议配置此项,留空即可) | 否 | 无 | 1g |
| 插槽数 | 一个TaskManager内Solt数量 | 否 | 无 | 2 |
| 保存点路径 | 对应SavePoint目录 | 否 | 无 | hdfs:///flink/savepoint |
| 检查点路径 | 对应CheckPoint目录 | 否 | 无 | hdfs:///flink/checkpoint |
五、提交 Kubernetes Application 任务
进入数据开发页面,新建一个flink sql任务,选择集群类型为kubernetes application,集群选择为我们刚刚配置的集群,点击提交即可。

六、问题解决
提交任务后没有日志文件
任务完成后很久 pod 才销毁,或启动日志报错 udf 下载失败

交流
欢迎加入 Dinky 社区交流问题与分享经验。
QQ社区群:543709668,申请备注 “ Dinky+企业名+职位”,不写不批。
微信官方群:添加 wenmo_ai ,申请备注“ Dinky+企业名+职位”,不写不批谢谢。


扫描二维码获取
更多精彩
Dinky开源





