Apache DolphinScheduler 在 Kubernetes 上的部署与配置指南
前言
Apache DolphinScheduler 是一个开源的分布式工作流任务调度系统,具有可视化操作界面、丰富的任务类型支持、高可靠性和高扩展性等特点。本文将详细介绍如何在 Kubernetes 集群上部署 DolphinScheduler,并针对生产环境提供专业建议。
部署方式选择
DolphinScheduler 提供多种部署方式,针对不同场景:
- Standalone 模式:适合快速体验和开发测试
- 伪集群部署:适合功能完整性和小规模任务验证
- 集群部署:适合生产环境使用
- Kubernetes 部署:适合云原生环境和大规模任务调度
先决条件
在开始部署前,请确保满足以下条件:
- Helm 3.1.0 或更高版本
- Kubernetes 1.12 或更高版本集群
- 持久卷(PV)供应能力
- 集群管理员权限
部署步骤
1. 基础部署
使用 Helm 进行基础部署:
helm upgrade --install dolphinscheduler \
--create-namespace \
--namespace dolphinscheduler \
oci://registry-1.docker.io/apache/dolphinscheduler-helm \
--version <指定版本>
此命令将:
- 创建 dolphinscheduler 命名空间
- 部署 PostgreSQL 数据库(用户 root/密码 root)
- 部署 ZooKeeper 服务
- 部署 DolphinScheduler 所有组件
2. 访问 Web UI
访问方式取决于 Ingress 配置:
方式一:通过 Ingress 访问
- 确保 values.yaml 中 ingress.enabled=true
- 访问 http://${ingress.host}/dolphinscheduler
方式二:通过端口转发
kubectl port-forward --address 0.0.0.0 svc/dolphinscheduler-api 12345:12345
访问 http://localhost:12345/dolphinscheduler/ui
方式三:通过 NodePort
NODE_IP=$(kubectl get no -n dolphinscheduler -o jsonpath="{.items[0].status.addresses[0].address}")
NODE_PORT=$(kubectl get svc dolphinscheduler-api -n dolphinscheduler -o jsonpath="{.spec.ports[0].nodePort}")
echo http://$NODE_IP:$NODE_PORT/dolphinscheduler
默认登录凭证:
- 用户名:admin
- 密码:dolphinscheduler123
高级配置
1. 使用 MySQL 替代 PostgreSQL
由于许可原因,需自定义镜像:
- 下载 MySQL 驱动
- 创建 Dockerfile 添加驱动
- 构建并推送自定义镜像
- 修改 values.yaml:
postgresql: enabled: false externalDatabase: type: "mysql" host: "mysql-host" port: "3306" username: "root" password: "password" database: "dolphinscheduler"
2. Worker 自动扩缩容(试验性)
基于 KEDA 实现:
-
安装 KEDA:
helm repo add kedacore https://kedacore.github.io/charts kubectl create namespace keda helm install keda kedacore/keda --namespace keda --version "v2.0.0"
-
启用自动扩缩:
helm upgrade --install dolphinscheduler ... --set worker.keda.enabled=true
3. 支持 Python 3
-
创建自定义 Worker 镜像:
FROM apache/dolphinscheduler-worker:<version> RUN apt-get update && apt-get install -y python3
-
修改 values.yaml:
worker: env: PYTHON_LAUNCHER: "/usr/bin/python3"
4. 支持 Spark/Hadoop
- 确保共享存储已启用
- 上传 Spark/Hadoop 包到 Worker:
kubectl cp spark-2.4.7-bin-hadoop2.7.tgz dolphinscheduler-worker-0:/opt/soft
- 在 Worker 容器内解压并设置环境变量
运维管理
1. 查看日志
kubectl logs dolphinscheduler-master-0 -f
2. 扩缩容组件
扩缩容 API 服务:
kubectl scale --replicas=3 deploy dolphinscheduler-api
扩缩容 Worker:
kubectl scale --replicas=6 sts dolphinscheduler-worker
3. 卸载
卸载 DolphinScheduler:
helm uninstall dolphinscheduler
删除 PVC(谨慎操作):
kubectl delete pvc -l app.kubernetes.io/instance=dolphinscheduler
生产建议
- 数据库:建议使用外部高可用数据库而非内置 PostgreSQL
- 存储:根据业务需求选择合适的存储后端(HDFS/S3/本地文件系统)
- 资源分配:根据任务负载合理配置各组件资源限制
- 高可用:确保关键组件(master/api)有足够副本
- 监控:集成 Prometheus 等监控系统
常见问题解答
Q:如何支持 Oracle 数据源? A:需要构建自定义镜像添加 Oracle JDBC 驱动,步骤类似 MySQL 支持。
Q:Worker 节点如何区分 CPU/GPU 类型? A:可以通过 nodeSelector 将不同 Worker 部署到特定节点:
helm install ... --set worker.nodeSelector.gpu="a100"
Q:如何修改资源上传路径? A:修改 values.yaml 中的 RESOURCE_UPLOAD_PATH 和 FS_DEFAULT_FS 配置。
通过本文介绍,您应该能够在 Kubernetes 环境上成功部署和管理 Apache DolphinScheduler。根据实际业务需求,合理配置各项参数,可以充分发挥 DolphinScheduler 在大规模任务调度方面的优势。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考