在企业大数据平台建设中,任务调度与数据同步是两大核心需求。DolphinScheduler作为分布式可视化工作流调度系统,与SeaTunnel这个高性能数据集成工具的组合,能够很好地满足这两个需求。本文将详细记录在Kubernetes离线环境中部署这两个系统的完整过程,包括镜像处理、Helm安装、配置调整等关键环节。
本次部署基于以下技术栈:
从稳定性和兼容性考虑,我们选择:
注意:版本选择对后续部署至关重要,不同版本间的API和配置可能存在差异,务必保持一致性。
首先获取DolphinScheduler的指定版本代码:
bash复制git clone https://github.com/apache/dolphinscheduler.git
cd dolphinscheduler
git checkout 3.1.9
cd deploy/kubernetes/dolphinscheduler/
在离线环境中,我们需要先解决Helm chart的依赖问题:
bash复制helm repo add bitnami https://charts.bitnami.com/bitnami
helm dependency update .
如果遇到网络问题,可以采用以下替代方案:
在离线环境中,所有容器镜像需要预先下载并推送到私有仓库。以下是详细步骤:
bash复制helm template . | grep "image:" | awk '{print $2}' | tr -d '"' | sort | uniq
输出结果将包含所有需要的镜像,如:
在有网络的环境中下载所有镜像:
bash复制docker pull dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-master:3.1.9
docker pull dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-worker:3.1.9
# 其他镜像类似...
然后重新打标签并推送到私有仓库:
bash复制export MY_HARBOR="your.private.registry.com/your-project"
docker tag dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-master:3.1.9 $MY_HARBOR/dolphinscheduler-master:3.1.9
docker push $MY_HARBOR/dolphinscheduler-master:3.1.9
# 其他镜像类似...
更新values.yaml中的镜像仓库配置:
bash复制sed -i "s|registry: \"dolphinscheduler.docker.scarf.sh/apache\"|registry: \"$MY_HARBOR\"|g" values.yaml
对于PostgreSQL和ZooKeeper等第三方组件,需要单独配置:
yaml复制postgresql:
enabled: true
image:
registry: "your.private.registry.com"
repository: "your-project/postgresql"
tag: "11.11.0-debian-10-r71"
执行安装命令:
bash复制helm install dolphinscheduler . -n bigdata
安装完成后,可以通过以下方式验证:
bash复制kubectl get pods -n bigdata
bash复制kubectl port-forward --address 0.0.0.0 -n bigdata svc/dolphinscheduler-api 12345:12345
bash复制kubectl patch svc dolphinscheduler-api -n bigdata -p '{"spec":{"type":"NodePort"}}'
默认登录凭证:
bash复制export VERSION=2.3.10
mkdir seatunnel_helm && cd seatunnel_helm
helm pull oci://registry-1.docker.io/apache/seatunnel-helm --version ${VERSION}
tar -xvf seatunnel-helm-${VERSION}.tgz
cd seatunnel-helm
获取所需镜像:
bash复制helm template . | grep "image:" | awk '{print $2}' | tr -d '"' | sort | uniq
下载并推送镜像到私有仓库:
bash复制docker pull apache/seatunnel:2.3.10
docker tag apache/seatunnel:2.3.10 $MY_HARBOR/apache/seatunnel:2.3.10
docker push $MY_HARBOR/apache/seatunnel:2.3.10
更新values.yaml配置:
bash复制sed -i "s|registry: \"apache/seatunnel\"|registry: \"$MY_HARBOR/apache/seatunnel\"|g" values.yaml
执行安装:
bash复制helm install seatunnel . -n bigdata
验证部署:
bash复制kubectl get pods -n bigdata -l app.kubernetes.io/name=seatunnel
bash复制kubectl expose deployment seatunnel-master --type=NodePort --name=seatunnel-web --port=8080 --target-port=8080 -n bigdata
bash复制curl http://<node-ip>:<node-port>/running-jobs
在DolphinScheduler的API容器中测试SeaTunnel连接:
bash复制kubectl exec -it dolphinscheduler-api-<pod-id> -n bigdata -- bash
curl -X GET http://seatunnel-web:8080/running-jobs
在DolphinScheduler中创建一个Shell类型的工作流节点,内容如下:
bash复制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"]
}
]
}'
在实际生产环境中,需要考虑以下问题:
任务状态监控:DolphinScheduler只能监控到任务提交状态,无法感知数据同步的实际结果。需要额外实现状态查询机制。
错误处理:增加重试机制和告警通知,确保任务失败能够及时发现和处理。
性能优化:根据数据量调整SeaTunnel的资源配置,避免资源不足或浪费。
安全加固:对API接口添加认证机制,防止未授权访问。
现象:Pod处于ImagePullBackOff状态
解决方案:
现象:helm dependency update命令执行失败
解决方案:
现象:服务部署成功但无法通过浏览器访问
解决方案:
现象:Pod频繁重启或被OOMKill
解决方案:
在实际部署过程中,我发现Kubernetes的资源配置对系统稳定性影响很大。特别是在资源有限的环境中,需要仔细调整每个组件的内存和CPU限制,避免因资源竞争导致性能下降或服务不可用。另外,SeaTunnel的任务提交接口虽然方便,但在生产环境中需要封装额外的状态检查和结果验证逻辑,才能真正实现可靠的自动化数据流程。