暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Dinky 提交 K8S Application 任务

Dinky开源 2024-08-23
427
导读:本文介绍了 Dinky 实时计算平台在 Kubernetes 上提交 Application 作业的具体步骤。
社区公告:

    问题反馈、代码提交、文章投稿与社区贡献请移步 Github issue。

    Github issue #66 登记企业或组织生产使用,可邀请至企业支持群,获取团队技术支持与其他企业用户的经验分享。

 

 

 GitHub 地址 
https://github.com/DataLinkDC/dinky
https://gitee.com/DataLinkDC/Dinky
欢迎大家为 Dinky 送上小星星~


一、概述

Dinky 是一个基于 Apache Flink 的实时计算平台,它提供了一站式的 Flink 任务开发、运维、监控等功能。Kubernetes 是一个强大的容器编排平台,能够自动化应用的部署、扩展和管理。将 Flink 与 Kubernetes 集成,可以充分利用 Kubernetes 的优势,实现 Flink 任务的弹性伸缩、自动化部署和高可用性。

项目地址:https://github.com/DataLinkDC/dinky
如果觉得项目不错欢迎前去点下 Star, 感谢您的支持!



二、前置条件

  • 确保已安装 Kubernetes 集群,并且 kubectl
     命令行工具已配置好,能够与集群通信。

  • 已安装 Dinky >= 1.0.3 版本

  • 理解 Kubernetes 的基本概念,如 Pod、Service、Deployment、Namespace 等。



三、Kubernetes 环境准备

在 Kubernetes 上部署 Dinky 之前,需要准备相应的 Kubernetes 资源对象。

创建命名空间

为 Dinky 创建一个独立的命名空间。
    kubectl create namespace dinky

    创建服务账号和角色绑定

    为 Dinky 创建服务账号并赋予相应的权限。
      kubectl create serviceaccount dinky -n dinky
      kubectl create rolebinding dinky-admin --clusterrole=admin --serviceaccount=dinky:dinky -n dinky
      上述操作为创建一个命名空间 dinky 和用户 dinky,并为 dinky 用户赋予所有权限,实际操作中您也可以跳过此步骤,使用 default 账号,更多参考官方文档 https://nightlies.apache.org/flink/flink-docs-stable/docs/deployment/resource-providers/native_kubernetes/#rbac

      制作镜像

      目前社区还未提供打包好的镜像,所以现阶段需要咱们自己制作镜像,本教程基于 flink 1.15 版本,其他 flink 版本替换对应版本号即可。

      准备依赖

      在dinky安装目录下 进入 jar路径,找到如下jar包:
        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.4
              docker push 192.168.0.10:5000/dinky-flink-1.0.3-1.15.4




              四、配置 Kubernetes 集群信息

              在注册中心页面,点击 集群==>集群配置==>新建 进入新建集群页面!

              类型选择 Kubernetes Native 或者 Kubernetes Operator 目前阶段仍推荐 Kubernetes Native 方式,operator 还在 beta 中。
              表单内容有点多,但是填起来很简单,有很多可以不填,我整理了一下表格参考。

              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 KubeConfig 建议填写,如果有多套k8s集群则建立多个配置,可以实现多集群配置。
              参数说明是否必填默认值示例值
              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,集群选择为我们刚刚配置的集群,点击提交即可。



              六、问题解决


              提交任务后没有日志文件

              dinky使用flink原生api提交任务,flink源码在提交任务过程中会读取dinky本地 opt/flink/conf 下的文件作为容器内配置目录挂载,所以需要提前把 flink安装目录下的conf目录内文件全部复制到此,在集群配置处flink配置文件目录填写/opt/flink/conf即可。


              任务完成后很久 pod 才销毁,或启动日志报错 udf 下载失败

              application模式下运行pod需要与dinky进行通信,所以需要修改 `配置中心-->全局配置-->Dinky地址` 为正确的,pod可访问的地址。




              交流

              欢迎加入 Dinky 社区交流问题与分享经验。

              QQ社区群:543709668,申请备注 “ Dinky+企业名+职位”,不写不批。

              微信官方群:添加 wenmo_ai ,申请备注“ Dinky+企业名+职位”,不写不批谢谢。

                     公众号:Dinky开源



              扫描二维码获取

              更多精彩

              Dinky开源




              文章转载自Dinky开源,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论