k8s Native Application & Dinky 生产部署验证

背景

上一次我们实践了

这次我们生产实践验证将 Flink & Paimon & StarRocks & Dinky 流式湖仓分层实践验证 完整部署到生产,并且采用 Flink on k8s 的 Application 方式进行部署。

本部署方案仅提供一个部署思路,可以根据自己的实际生产情况调节

准备工作

  • 提前准备好一个k8s集群
  • 准备一个对象存储,我这里用minio,主要用于jar包的存储及下载

    minio/libs/1.20 目录下上传自己需要的项目以来jar包
    FIhbuL

  • 制作基础镜像

    新建一个extends的目录,目录下放置下面3个文件

    • dinky-app-1.20-1.2.1-jar-with-dependencies.jar 从dinky目录下的jar获取
    • mysql-connector-java-8.0.27.jar
    • Dockerfile 镜像制作文件
      目录看起来像这样:
      kh82Yi
      Dockerfile
      1
      2
      3
      4
      5
      ARG 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.12

      dinky需要替换planner-loader为 planner的原因是血缘分析、语法增强等功能使用到了planner的依赖,但是loader是独立加载的,所以导致dinky无法使用planner的依赖

    • 打包镜像,推送到镜像仓库
      1
      2
      3
      docker 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创建和填写集群配置
    4BqhoQ
    rfiIy9
    • 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
      32
      apiVersion: 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上
    WYVxHu