k8s Native Application & Dinky 生产部署验证
背景
上一次我们实践了
这次我们生产实践验证将 Flink & Paimon & StarRocks & Dinky 流式湖仓分层实践验证 完整部署到生产,并且采用 Flink on k8s
的 Application 方式进行部署。
本部署方案仅提供一个部署思路,可以根据自己的实际生产情况调节
准备工作
- 提前准备好一个k8s集群
- 准备一个对象存储,我这里用
minio
,主要用于jar包的存储及下载在
minio/libs/1.20
目录下上传自己需要的项目以来jar包 - 制作基础镜像
新建一个
extends
的目录,目录下放置下面3个文件dinky-app-1.20-1.2.1-jar-with-dependencies.jar
从dinky目录下的jar获取mysql-connector-java-8.0.27.jar
Dockerfile
镜像制作文件
目录看起来像这样:Dockerfile
1
2
3
4
5ARG FLINK_VERSION=1.20.1
FROM flink:${FLINK_VERSION}-scala_2.12
ADD ./*.jar $FLINK_HOME/lib/ # 将目录下的jar包添加到镜像中的lib目录
RUN rm -rf /opt/flink/lib/flink-table-planner-loader-*.jar # 删除flink-table-planner-loader
RUN mv /opt/flink/opt/flink-table-planner_2.12-*.jar /opt/flink/lib # 添加flink-table-planner_2.12dinky需要替换planner-loader为 planner的原因是血缘分析、语法增强等功能使用到了planner的依赖,但是loader是独立加载的,所以导致dinky无法使用planner的依赖
- 打包镜像,推送到镜像仓库到此我们就制作好了我们的基础镜像。
1
2
3docker build --platform linux/amd64 -t dinky-flink:1.2.1-1.20.1 . --no-cache
docker tag dinky-flink:1.2.1-1.20.0 XXX/dinky-flink:1.2.1-1.20.1
docker push XXX/dinky-flink:1.2.1-1.20.1
实践
- 正确在dinky创建和填写集群配置
Flink镜像地址
填写上面步骤打包好的镜像地址k8s kubeConfig
填写k8s的config文件Default Pod Template
我们参考官网Example of Pod Template,编写pod template
<URL> <ACCESSKEY> <SECRETKEY>
请填写自己的minio地址
initContainers 的作用是将minio中的jar包下载下来,并挂载到flink的lib目录下
tolerations 是我们node节点打了污点,不然随随便便的pod运行,某个节点专供flink跑任务1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32apiVersion: v1
kind: Pod
metadata:
name: pod-template
spec:
initContainers:
- command:
- sh
- -c
- mc alias set minio <URL> <ACCESSKEY> <SECRETKEY>
&& mc cp --recursive minio/libs/1.20/ /tmp/ext-lib
&& mc ls minio
image: minio/mc:RELEASE.2025-02-15T10-36-16Z
imagePullPolicy: IfNotPresent
name: init-lib
volumeMounts:
- mountPath: /tmp/ext-lib
name: ext-lib
tolerations:
- key: "env"
operator: "Equal"
value: "prod"
effect: "NoSchedule"
containers:
- name: flink-main-container
imagePullPolicy: Always
volumeMounts:
- mountPath: /opt/flink/lib/ext-lib
name: ext-lib
volumes:
- name: ext-lib
emptyDir: {}保存点路径
和检查点路径
这里建议填写一个持久化的地址,可以创建一个pvc挂载上去目录
- Jar文件路径
这里填写
local:///opt/flink/lib/dinky-app-1.20-1.2.1-jar-with-dependencies.jar
- 运行paimon cdc 任务,让其以application模式跑在 k8s上