0.前言在一个大数据调度系统中任务和数据的调度与编排是一个非常重要的环节。在而今的开源时代使用DolphinSchedulerSeaTunnel这样的黄金组合可以满足我们对大数据系统建设初期的各种畅想。作为一名大数据行业的小白笔者也来演练一下如何在企业内网中如何快速搭建出DolphinSchedulerSeaTunnel并用一个简单的小示例实践一下。本文中的部署环境k8s版本1.23.15helm版本3.16.2harbor镜像仓库1.DolphinScheduler部署今天是2026年2月12号的星期四目前DolphinScheduler(DS)的最新版本为3.4.0最新稳定的版本为3.1.9。从稳定性的角度出发本文中也采用DS的稳定版3.1.9。部署时DS参考官方的此连接https://dolphinscheduler.apache.org/en-us/docs/3.1.9/guide/installation/kubernetes执行以下命令下载源码#克隆DS代码gitclone https://github.com/apache/dolphinscheduler.git#如果拉不动就配置http代理重新拉gitclone -c http.proxyhttp://192.168.1.66:7078 -c https.proxyhttp://192.168.1.66:7078 https://github.com/apache/dolphinscheduler.git#切换到3.1.9的taggitcheckout3.1.9#切换到部署脚本目录cddeploy/kubernetes/dolphinscheduler/再执行下面的命令执行helm操作#添加helm仓库源helm repoaddbitnami https://charts.bitnami.com/bitnami#同步当前目录下的所有charthelm dependency update.#如果同步失败可尝试配置http代理再次同步HTTP_PROXYhttp://192.168.1.66:7078HTTPS_PROXYhttp://192.168.1.66:7078 helm dependency update.同步chart成功后会有以上信息输出。如果上面的命令由于网络原因安装失败可通过代理先将原镜像下载之后再上传到harbor的方式解决。步骤为#查看依赖镜像helm template . | grep “image:” | awk ‘{print $2}’ | tr -d ‘’ | sort | uniq输出为busybox:1.30 docker.io/bitnami/postgresql:11.11.0-debian-10-r71 docker.io/bitnami/zookeeper:3.6.2-debian-10-r185 dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-alert-server:3.1.9 dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-api:3.1.9 dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-master:3.1.9 dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-tools:3.1.9 dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-worker:3.1.9得到清单后我们给docker配置好代理命令参考配置docker的网络代理)。再依次手动拉取docker pull dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-master:3.1.9 docker pull dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-worker:3.1.9 docker pull dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-api:3.1.9 docker pull dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-alert-server:3.1.9 docker pull dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-tools:3.1.9 docker pull bitnami/postgresql:11.11.0-debian-10-r71 docker pull bitnami/zookeeper:3.6.2-debian-10-r185 docker pull busybox:1.30再依次打上tagexport MY_HARBORdockerhub.haiyang.com/haiyang docker tag dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-master:3.1.9 $MY_HARBOR/dolphinscheduler-master:3.1.9 docker tag dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-api:3.1.9 $MY_HARBOR/dolphinscheduler-api:3.1.9 docker tag dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-alert-server:3.1.9 $MY_HARBOR/dolphinscheduler-alert-server:3.1.9 docker tag dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-tools:3.1.9 $MY_HARBOR/dolphinscheduler-tools:3.1.9 docker tag docker.io/bitnami/postgresql:11.11.0-debian-10-r71 $MY_HARBOR/postgresql:11.11.0-debian-10-r71 docker tag busybox:1.30 $MY_HARBOR/busybox:1.30 docker tag dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-worker:3.1.9 $MY_HARBOR/dolphinscheduler-worker:3.1.9 docker tag public.ecr.aws/bitnami/zookeeper:3.6.2-debian-10-r185 $MY_HARBOR/zookeeper:3.6.2-debian-10-r185再依次push到私服docker push $MY_HARBOR/dolphinscheduler-master:3.1.9 docker push $MY_HARBOR/dolphinscheduler-api:3.1.9 docker push $MY_HARBOR/dolphinscheduler-alert-server:3.1.9 docker push $MY_HARBOR/dolphinscheduler-tools:3.1.9 docker push $MY_HARBOR/postgresql:11.11.0-debian-10-r71 docker push $MY_HARBOR/busybox:1.30 docker push $MY_HARBOR/dolphinscheduler-worker:3.1.9 docker push $MY_HARBOR/zookeeper:3.6.2-debian-10-r185替换values.yaml中registry的镜像仓库地址# 执行替换使用 | 作为定界符避免仓库地址中的 / 导致冲突 sed -i s|registry: \dolphinscheduler.docker.scarf.sh/apache\|registry: \$MY_HARBOR\|g values.yamlpostgresql和zookeeper的需要单独处理编辑values.yaml文件在各自的节点中添加对应的image配置postgresql: enabled: true image: registry: dockerhub.haiyang.com repository: haiyang/postgresql tag: 11.11.0-debian-10-r71 ……省略…… zookeeper: enabled: true image: registry: dockerhub.haiyang.com repository: haiyang/zookeeper tag: 3.6.2-debian-10-r185busybox部分的处理#找到对应的模块文件 grep -r busybox templates/ --- templates/_helpers.tpl: image: busybox:1.30替换命令sed -i “s|image: busybox:1.30|image: $MY_HARBOR/busybox:1.30|g” templates/_helpers.tpl至此我们已经完成了dolphinscheduler、postgresql、zookeeper、busybox这些镜像地址的替换。再修改一下pod中路径配置从mycluster修改到本地文件(临时修改重启pod后数据会丢失)sed -i ‘/resource.hdfs.fs.defaultFS:/ s|hdfs://mycluster:8020|file:///|’ values.yaml接下来就可以用helm来安装DS了。安装DS到指定的k8s命名空间中最终pod状态截图如下所有pod均ready测试时可以用port-forward命令映射出端口验证一下kubectl port-forward --address 0.0.0.0 -n test svc/dolphinscheduler-api 12345:12345或直接将service的类型修改为NodePortkubectl patch svc dolphinscheduler-api -n bigdata -p ‘{“spec”:{“type”:“NodePort”}}’之后再访问对应的端口如http://192.168.1.168:35246/dolphinscheduler/ui默认用户名和密码为admin/dolphinscheduler123登录进去看一下2.SeaTunnel部署SeaTunnel(ST)目前的最新版本为2.3.12。为了快速安装这里也还是使用helm。https://seatunnel.apache.org/docs/2.3.12/start-v2/kubernetes/helmSeaTunnel官方指定的helm仓库中最新的为2.3.10我们也使用这个版本的helm进行安装export VERSION2.3.10 #创建seatunnel_helm mkdir seatunnel_helm #切换到seatunnel_helm cd seatunnel_helm #拉取seatunnel的helm镜像 helm pull oci://registry-1.docker.io/apache/seatunnel-helm --version ${VERSION} #如果拉取失败可以尝试通过配置代理尝试如 HTTP_PROXYhttp://192.168.1.66:7078 HTTPS_PROXYhttp://192.168.1.66:7078 helm pull oci://registry-1.docker.io/apache/seatunnel-helm --version ${VERSION} #解压seatunnel的helm包 tar -xvf seatunnel-helm-${VERSION}.tgz cd seatunnel-helm与前面部署DS类似的部署前也需要将对应的seatunnel镜像拉取并推送到docker的私有仓库中。#获取出seatunnel这个helm镜像的docker镜像 helm template . | grep image: | awk {print $2} | tr -d | sort | uniq #拉取对应的seatunnel镜像 docker pull apache/seatunnel:2.3.10 #定义私有仓库地址 export MY_HARBORdockerhub.haiyang.com/haiyang #打tag docker tag apache/seatunnel:2.3.10 $MY_HARBOR/apache/seatunnel:2.3.10 #推送到私服 docker push $MY_HARBOR/apache/seatunnel:2.3.10再替换helm的values.yaml中的镜像地址sed -i “s|registry: “apache/seatunnel”|registry: “$MY_HARBOR/apache/seatunnel”|g” values.yaml替换好镜像后安装并启动seatunnel#安装seatunnel到bigdata这个命名空间中 helm install seatunnel . -n bigdata最后再查看一下状态kubectl get pod -n bigdata -wSeaTunnel的master和worker都启动就绪了。如果要访问http接口可直接执行以下命令将8080端口映射出来kubectl expose deployment seatunnel-master --typeNodePort --nameseatunnel-web --port8080 --target-port8080 -n bigdata分别运行两个http接口测试一下curl http://127.0.0.1:25323/running-jobscurl http://127.0.0.1:25323/system-monitoring-information3.DSST联合小示例前面两个步骤我们已经完成了DolphinScheduler和SeaTunnel在内网环境中的部署接下来再用一个小示例验证一下。尽管在DS的界面中也有可以直接运行SeaTunnel的组件但它要求SeaTunnel和DolphinScheduler需要部署在同一个机器中这与目前的部署结构不匹配。但好在SeaTunnel提供了http接口则我们可以使用http接口的方式向SeaTunnel提交任务。参考的SeaTunnel接口submit-a-job其本质在dolphinscheduler的容器中向seatunnel-web这个service发http请求。为了确保方案的可行性我们可以先通过手动运行的方式验证下kubectl exec -it dolphinscheduler-api-6447777469-dhd8r -n bigdata – bashcurl -X GET http://seatunnel-web:8080/running-jobs确认无误后再在DS的界面中添加SHELL节点尝试提交一个SeaTunnel的JOB。在SHELL的脚本内容中输入以下内容curl -X POST http://seatunnel-web:8080/submit-job \ -H Content-Type: application/json \ -d { env: { job.mode: batch }, source: [ { plugin_name: FakeSource, plugin_output: fake, row.num: 100, schema: { fields: { name: string, age: int, card: int } } } ], transform: [], sink: [ { plugin_name: Console, plugin_input: [fake] } ] }截图为之后再运行此工作流显示为从日志上可以看出任务已经提交成功并返回了一个jobId。但需要注意的是如果是在生产环境中用http的方式提交SeaTunnel的任务还需要做一些额外的处理这是因为DS 节点的成功/失败状态仅代表“提交成功/失败”而不是“数据同步成功/失败”关于此处的详细方案这里不再进一步展开。如要实现在K8S下比较完备的整合流程可参考此链接https://dev.to/chen_debra_3060b21d12b1b0/sync-api-data-to-your-data-lake-with-seatunnel-dolphinscheduler-30aj