Apache DolphinScheduler on K8s:StatefulSet部署与持久化配置

Apache DolphinScheduler on K8s:StatefulSet部署与持久化配置

【免费下载链接】dolphinscheduler Apache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code 【免费下载链接】dolphinscheduler 项目地址: https://gitcode.com/gh_mirrors/do/dolphinscheduler

1. 痛点解析:容器编排下的数据编排挑战

你是否正面临这些问题?在Kubernetes集群中部署Apache DolphinScheduler(数据编排平台)时,Master节点身份漂移导致任务调度混乱,Worker节点数据丢失引发任务执行失败,配置变更无法持久化需要频繁重启服务。本文将通过StatefulSet控制器与持久化存储方案,彻底解决这些生产环境中的核心痛点。

读完本文你将掌握:

  • 使用StatefulSet实现Master/Worker节点的稳定网络标识
  • 配置多维度持久化存储(日志/数据/配置)
  • 实现数据库与消息队列的外部化部署
  • 构建基于Helm Chart的可扩展部署架构

2. 部署架构设计:StatefulSet vs Deployment的抉择

2.1 核心组件拓扑

DolphinScheduler在K8s环境中的部署需要区分有状态组件无状态组件

mermaid

关键差异

  • StatefulSet:为Master/Worker提供固定DNS名称(如dolphinscheduler-master-0)和有序部署,支持稳定的持久化存储
  • Deployment:适合API/Alert等无状态服务,支持动态扩缩容和滚动更新

2.2 存储需求矩阵

组件存储类型用途访问模式
MasterPVC日志与元数据ReadWriteOnce
WorkerPVC任务执行数据ReadWriteOnce
共享资源PV数据集与脚本ReadWriteMany
配置文件ConfigMap应用配置只读挂载
敏感信息Secret数据库凭证加密存储

3. 部署前准备:环境与依赖检查

3.1 集群环境要求

# 最低资源要求
nodes: 3+ (2核4G以上)
Kubernetes: 1.21+
StorageClass: 支持ReadWriteOnce和ReadWriteMany
Helm: 3.5+

3.2 外部依赖准备

推荐使用外部化服务提高稳定性,通过以下命令创建数据库和注册中心:

# 创建PostgreSQL数据库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install ds-postgres bitnami/postgresql \
  --set auth.username=dsuser \
  --set auth.password=dspassword \
  --set auth.database=dolphinscheduler \
  --set persistence.enabled=true

# 创建ZooKeeper集群
helm install ds-zookeeper bitnami/zookeeper \
  --set replicaCount=3 \
  --set persistence.enabled=true

4. 核心部署步骤:基于Helm Chart的实践

4.1 Helm Chart目录结构

DolphinScheduler的K8s部署包位于deploy/kubernetes/dolphinscheduler,核心结构如下:

dolphinscheduler/
├── Chart.yaml          # Chart元数据
├── values.yaml         # 主配置文件
├── templates/
│   ├── statefulset-dolphinscheduler-master.yaml  # Master控制器
│   ├── statefulset-dolphinscheduler-worker.yaml  # Worker控制器
│   ├── pvc-dolphinscheduler-api.yaml             # 持久化声明
│   ├── configmap-dolphinscheduler-common.yaml    # 通用配置
│   └── secret-external-database.yaml             # 敏感信息

4.2 关键配置解析(values.yaml)

4.2.1 StatefulSet配置
master:
  enabled: true
  replicas: 3  # 推荐3节点实现高可用
  podManagementPolicy: "Parallel"  # 并行部署加速启动
  updateStrategy:
    type: RollingUpdate  # 滚动更新策略
  persistentVolumeClaim:
    enabled: true
    accessModes: ["ReadWriteOnce"]
    storageClassName: "ds-master-sc"  # 指定存储类
    storage: "20Gi"

worker:
  enabled: true
  replicas: 3
  persistentVolumeClaim:
    dataPersistentVolume:
      enabled: true
      storage: "50Gi"  # Worker需要更大存储空间
    logsPersistentVolume:
      enabled: true
      storage: "30Gi"
4.2.2 外部化配置
# 禁用内置数据库,使用外部PostgreSQL
postgresql:
  enabled: false
  
externalDatabase:
  enabled: true
  type: "postgresql"
  host: "ds-postgres-postgresql"  # 外部数据库Service名称
  port: "5432"
  username: "dsuser"
  password: "dspassword"
  database: "dolphinscheduler"

# 配置外部ZooKeeper
zookeeper:
  enabled: false
  
externalRegistry:
  registryPluginName: "zookeeper"
  registryServers: "ds-zookeeper:2181"  # 外部ZK连接串

4.3 执行部署

# 克隆仓库
git clone https://gitcode.com/gh_mirrors/do/dolphinscheduler
cd dolphinscheduler/deploy/kubernetes

# 安装Helm Chart
helm install dolphinscheduler ./dolphinscheduler \
  --namespace dolphinscheduler \
  --create-namespace \
  --values ./dolphinscheduler/values.yaml

5. 持久化存储实现:从日志到配置的全维度方案

5.1 多PVC挂载策略

StatefulSet通过volumeClaimTemplates为每个实例自动创建PVC:

# 示例:Master节点PVC模板
volumeClaimTemplates:
- metadata:
    name: master-data
  spec:
    accessModes: [ "ReadWriteOnce" ]
    storageClassName: "ds-master-sc"
    resources:
      requests:
        storage: 20Gi

挂载点规划

  • /opt/dolphinscheduler/logs:应用日志(PVC)
  • /tmp/dolphinscheduler:临时数据(EmptyDir)
  • /etc/dolphinscheduler:配置文件(ConfigMap)

5.2 配置持久化与热更新

通过ConfigMap实现配置文件的持久化与动态更新:

# configmap-dolphinscheduler-common.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: dolphinscheduler-common
data:
  application.yaml: |
    spring:
      profiles:
        active: postgresql
    datasource:
      driver-class-name: org.postgresql.Driver
    resource:
      storage:
        type: S3
        upload-path: /dolphinscheduler

热更新流程

  1. 修改ConfigMap:kubectl edit cm dolphinscheduler-common
  2. 自动触发滚动更新(需配置conf.auto: true
  3. 验证配置生效:kubectl exec -it dolphinscheduler-master-0 -- cat /etc/dolphinscheduler/application.yaml

6. 运维实践:监控、扩缩容与故障转移

6.1 状态监控

# 启用Prometheus监控
master:
  service:
    serviceMonitor:
      enabled: true
      interval: 15s
      path: /actuator/prometheus

关键监控指标:

  • master_jobs_total:Master处理的任务总数
  • worker_task_execution_seconds_sum:Worker任务执行耗时
  • api_requests_latency_seconds:API响应延迟

6.2 横向扩缩容

# 扩展Worker节点
kubectl scale statefulset dolphinscheduler-worker --replicas=5 -n dolphinscheduler

# 配置HPA自动扩缩容
kubectl apply -f - <<EOF
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: dolphinscheduler-worker
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: StatefulSet
    name: dolphinscheduler-worker
  minReplicas: 3
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70
EOF

6.3 故障转移演练

mermaid

验证方法

  1. 强制删除主Master节点:kubectl delete pod dolphinscheduler-master-0
  2. 观察选举过程:kubectl logs dolphinscheduler-master-1 | grep "Leader elected"
  3. 确认任务恢复:通过API查询任务状态curl http://api-server:12345/dolphinscheduler/projects

7. 生产环境优化:安全与性能调优

7.1 安全加固

# 启用RBAC权限控制
rbac:
  create: true
  serviceAccount:
    create: true
    name: dolphinscheduler

# 敏感信息加密
securityContext:
  runAsUser: 1000
  runAsGroup: 1000
  fsGroup: 1000

# 网络策略
networkPolicy:
  enabled: true
  ingress:
    - from:
      - podSelector:
          matchLabels:
            app.kubernetes.io/component: worker

7.2 JVM资源配置

根据集群规模调整资源分配:

master:
  env:
    JAVA_OPTS: "-Xms2g -Xmx2g -Xmn1g"  # Master节点JVM配置
    MASTER_EXEC_THREADS: "200"        # 任务执行线程数

worker:
  env:
    JAVA_OPTS: "-Xms4g -Xmx4g -Xmn2g"  # Worker节点JVM配置
    WORKER_EXEC_THREADS: "300"        # 工作线程数

8. 总结与展望

通过StatefulSet部署Apache DolphinScheduler,我们实现了:

  • 稳定的节点身份与持久化存储
  • 灵活的外部化依赖管理
  • 可扩展的集群架构
  • 安全可靠的运维流程

未来优化方向

  1. 集成KEDA实现基于任务队列长度的弹性扩缩容
  2. 构建基于Istio的服务网格实现流量控制
  3. 开发Operator控制器实现声明式管理

立即行动:使用本文提供的Helm Chart配置,在你的K8s集群中部署一个生产级别的DolphinScheduler实例,体验容器化数据编排的强大能力!

# 一键部署命令
helm install dolphinscheduler ./dolphinscheduler \
  --namespace dolphinscheduler \
  --create-namespace \
  --values ./production-values.yaml

提示:完整配置文件与最佳实践可参考项目部署目录:deploy/kubernetes/dolphinscheduler

【免费下载链接】dolphinscheduler Apache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code 【免费下载链接】dolphinscheduler 项目地址: https://gitcode.com/gh_mirrors/do/dolphinscheduler

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值