跳到主要内容

DolphinScheduler 在 KubeSphere 平台部署指南

概述

DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度系统,致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。本文档将详细介绍如何在 KubeSphere 平台中通过 YAML 文件部署 DolphinScheduler,使用外部 PostgreSQL 数据库和 NFS 本地映射存储方案。

目录

  1. 环境准备
  2. 外部数据库准备
  3. 通过 YAML 文件部署 DolphinScheduler
  4. 网络配置
  5. 部署验证与访问

1. 环境准备

1.1 KubeSphere 平台要求

  • KubeSphere 版本: 3.3.0+
  • Kubernetes 版本: 1.20+
  • 节点配置: 至少 3 个节点,每个节点最少 2 核 4GB 内存

1.2 必需组件启用

登录 KubeSphere 控制台,确保以下组件已启用:

1.3 创建企业空间和项目

创建企业空间

  1. 登录KubeSphere控制台
  2. 进入企业空间
  3. 点击创建,填写以下信息:
    • 企业空间名称: dolphinscheduler-workspace
    • 别名: DolphinScheduler工作空间
    • 描述: DolphinScheduler分布式任务调度系统

创建项目

  1. 进入刚创建的企业空间
  2. 点击项目创建
  3. 填写项目信息:
    • 项目名称: dolphinscheduler
    • 别名: DolphinScheduler
    • 描述: DolphinScheduler部署项目

1.4 配置 NFS 动态供应存储类

请集群管理员在集群管理界面中创建以下完整配置:

  1. 进入集群管理应用负载工作负载部署
  2. 点击创建通过YAML创建
  3. 复制以下完整配置并一次性创建:
# 创建存储类
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-storage
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
archiveOnDelete: "true" # 删除pv的时候,pv的内容是否要备份
---
# 创建DolphinScheduler专用存储类(使用相同的NFS服务器和路径)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: dolphinscheduler-nfs-storage
annotations:
storageclass.kubernetes.io/is-default-class: "false" # 不设为默认,避免冲突
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
archiveOnDelete: "true" # 删除pv的时候,pv的内容是否要备份
# 指定特定的路径模式,直接使用命名空间和PVC名称,不再添加dolphinscheduler前缀
# 这样数据将直接存储在/NFSData/${.PVC.namespace}/${.PVC.name}路径下
pathPattern: "${.PVC.namespace}/${.PVC.name}"
---
# 部署NFS Subdir External Provisioner
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-client-provisioner
labels:
app: nfs-client-provisioner
# 部署在default命名空间
namespace: default
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: nfs-client-provisioner
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccountName: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/nfs-subdir-external-provisioner:v4.0.2
# resources:
# limits:
# cpu: 10m
# requests:
# cpu: 10m
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: k8s-sigs.io/nfs-subdir-external-provisioner
- name: NFS_SERVER
value: 192.168.100.5 # 指定自己nfs服务器地址
- name: NFS_PATH
value: /NFSData # nfs服务器共享的目录
volumes:
- name: nfs-client-root
nfs:
server: 192.168.100.5
path: /NFSData
---
# 创建ServiceAccount
apiVersion: v1
kind: ServiceAccount
metadata:
name: nfs-client-provisioner
# 部署在default命名空间
namespace: default
---
# 创建ClusterRole
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nfs-client-provisioner-runner
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["create", "update", "patch"]
---
# 创建ClusterRoleBinding
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: run-nfs-client-provisioner
subjects:
- kind: ServiceAccount
name: nfs-client-provisioner
# 部署在default命名空间
namespace: default
roleRef:
kind: ClusterRole
name: nfs-client-provisioner-runner
apiGroup: rbac.authorization.k8s.io
---
# 创建Role(用于leader选举)
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-nfs-client-provisioner
# 部署在default命名空间
namespace: default
rules:
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
---
# 创建RoleBinding(用于leader选举)
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-nfs-client-provisioner
# 部署在default命名空间
namespace: default
subjects:
- kind: ServiceAccount
name: nfs-client-provisioner
# 部署在default命名空间
namespace: default
roleRef:
kind: Role
name: leader-locking-nfs-client-provisioner
apiGroup: rbac.authorization.k8s.io

重要配置说明

  • 默认存储类:

    • 名称: nfs-storage(设置为默认存储类)
    • 用途: 用于集群中的一般存储需求
    • 路径模式: 默认路径模式,直接在NFS根目录下创建子目录
  • DolphinScheduler专用存储类:

    • 名称: dolphinscheduler-nfs-storage
    • 用途: 专门用于DolphinScheduler组件的存储需求
    • 路径模式: 将所有PVC存储在NFS服务器的dolphinscheduler子目录下,便于管理
  • 共同配置:

    • NFS服务器: 192.168.100.5(请替换为您的实际NFS服务器IP)
    • NFS路径: /NFSData(请替换为您的实际NFS共享路径)
    • 镜像源: 使用阿里云镜像源以提高下载速度
    • 命名空间: Provisioner部署在default命名空间中
    • 备份策略: archiveOnDelete: "true"表示删除PVC时会备份数据

存储类使用说明:

  • 两个存储类使用相同的NFS服务器和路径,但有不同的路径模式和用途
  • 在PVC配置中通过storageClassName字段指定要使用的存储类
  • 如果不指定存储类,将默认使用nfs-storage
  • 为避免混淆,建议在DolphinScheduler相关的PVC中明确指定dolphinscheduler-nfs-storage

第四步:验证部署

  1. 检查Provisioner状态
# 检查Provisioner Pod状态
kubectl get pods -n kube-system | grep nfs-subdir-external-provisioner

# 查看Provisioner日志
kubectl logs -n kube-system deployment/nfs-subdir-external-provisioner
  1. 检查存储类状态
# 查看所有存储类
kubectl get storageclass

# 查看默认存储类详情
kubectl describe storageclass nfs-storage

# 查看DolphinScheduler专用存储类详情
kubectl describe storageclass dolphinscheduler-nfs-storage

验证部署

  1. 检查Provisioner状态
# 检查Provisioner Pod状态
kubectl get pods -n default | grep nfs-client-provisioner

# 查看Provisioner日志
kubectl logs -n default deployment/nfs-client-provisioner
  1. 检查存储类状态
# 查看存储类
kubectl get storageclass nfs-storage

# 查看存储类详情
kubectl describe storageclass nfs-storage

1.4.2 配置说明

环境变量说明

  • PROVISIONER_NAME: 必须与StorageClass中的provisioner字段匹配
  • NFS_SERVER: NFS服务器的IP地址
  • NFS_PATH: NFS服务器上的共享路径

存储类参数说明

  • archiveOnDelete:
    • "false": 删除PVC时直接删除数据目录
    • "true": 删除PVC时将目录重命名为archived-xxx格式保留
  • pathPattern: 目录命名模式
    • "${.PVC.namespace}/${.PVC.name}": 按命名空间和PVC名称创建目录
    • "${.PVC.name}": 仅使用PVC名称创建目录

目录结构示例

使用上述配置,当创建名为zookeeper-pvc的PVC时,会在NFS服务器上自动创建:

/NFSData/
└── dolphinscheduler/ # 命名空间名称
└── zookeeper-pvc/ # PVC名称
└── (ZooKeeper数据文件)

说明:由于修改了pathPattern为${.PVC.namespace}/${.PVC.name},数据将直接存储在NFS服务器的/NFSData/dolphinscheduler/zookeeper-pvc/目录下,而不是/NFSData/dolphinscheduler/dolphinscheduler/zookeeper-pvc/目录下。

2. 外部数据库准备

2.1 外部 PostgreSQL 数据库信息

本部署方案使用外部 PostgreSQL 数据库,无需在 Kubernetes 中部署 PostgreSQL。

外部数据库信息

  • 数据库地址: 使用 Secret 中的 database-host 和 database-port
  • 数据库名称: 使用 Secret 中的 database-name
  • 用户名: 使用 Secret 中的 database-username
  • 密码: 使用 Secret 中的 database-password

重要说明: 由于使用外部 PostgreSQL 数据库,不需要在 Kubernetes 集群中部署 PostgreSQL 容器。请确保外部数据库服务正常运行且网络连通。

# 创建Secret存储敏感信息
kind: Secret
apiVersion: v1
metadata:
name: dolphinscheduler-secrets
namespace: dolphinscheduler
type: Opaque
data:
# 以下是Base64编码的值,实际部署时请替换为您自己的值
admin-password: ZG9scGhpbnNjaGVkdWxlcjEyMw== # dolphinscheduler123
database-host: cG9zdGdyZXNxbC5leGFtcGxlLmNvbQ== # postgresql.example.com
database-port: NTQzMg== # 5432
database-name: ZG9scGhpbnNjaGVkdWxlcg== # dolphinscheduler
database-username: ZG9scGhpbnNjaGVkdWxlcg== # dolphinscheduler
database-password: ZG9scGhpbnNjaGVkdWxlcjEyMw== # dolphinscheduler123

生成Base64编码值的方法:

# Linux/Mac
echo -n "要编码的值" | base64

# Windows PowerShell
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("要编码的值"))
  1. 创建DolphinScheduler数据库
CREATE DATABASE dolphinscheduler;
  1. 下载并执行初始化脚本
# 下载DolphinScheduler数据库初始化脚本
wget https://raw.githubusercontent.com/apache/dolphinscheduler/3.2.0/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql

  1. 授予数据库权限

# 授予所有权限给dolphinscheduler用户
-- 授予用户创建数据库的权限
ALTER USER dolphinscheduler CREATEDB;

-- 创建数据库并指定所有者
CREATE DATABASE dolphinscheduler OWNER dolphinscheduler;

-- 授予用户对数据库的所有权限
GRANT ALL PRIVILEGES ON DATABASE dolphinscheduler TO dolphinscheduler;


GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO dolphinscheduler;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO dolphinscheduler;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO dolphinscheduler;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO dolphinscheduler;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO dolphinscheduler;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON FUNCTIONS TO dolphinscheduler;

3. 通过 YAML 文件部署 DolphinScheduler

3.1 部署准备

  1. 确保已创建 dolphinscheduler 命名空间
  2. 确认 NFS 本地映射存储可用
  3. 检查镜像拉取策略

3.2 镜像源配置

为了提高部署速度,建议使用国内镜像源。在部署前可以配置镜像加速:

# 推荐的镜像源配置
# 可以在 KubeSphere 集群设置中配置 Docker 镜像加速器

# 官方镜像
apache/dolphinscheduler-api:3.2.0
apache/dolphinscheduler-master:3.2.0
apache/dolphinscheduler-worker:3.2.0
apache/dolphinscheduler-alert-server:3.2.0

# 如果官方镜像拉取较慢,可以在 https://docker.aityp.com 搜索后替换

3.3 创建部署文件

在 KubeSphere 中创建部署文件:

  1. 进入应用负载工作负载部署
  2. 点击创建
  3. 选择通过 YAML 创建
  4. 按照以下顺序部署各个组件

重要提示:请按照以下顺序部署,确保依赖关系正确:

  1. 首先创建 ZooKeeper 存储卷
  2. 然后部署 ZooKeeper
  3. 等待 ZooKeeper 完全启动
  4. 最后部署 DolphinScheduler 各个组件

3.4 ZooKeeper 存储和部署

第一步:创建 ZooKeeper PVC

使用 NFS Subdir External Provisioner,直接创建 PVC 即可自动供应存储:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: zookeeper-pvc
namespace: dolphinscheduler
spec:
accessModes:
- ReadWriteMany # NFS支持多节点读写
resources:
requests:
storage: 8Gi
storageClassName: dolphinscheduler-nfs-storage # 使用NFS Subdir External Provisioner存储类

配置说明

  • 自动供应:NFS Subdir External Provisioner会自动创建PV和NFS子目录
  • 目录结构:会在NFS服务器上自动创建 /volume1/k8s-storage/dolphinscheduler/dolphinscheduler/zookeeper-pvc/ 目录
  • 即时绑定:由于使用 volumeBindingMode: Immediate,PVC会立即绑定
  • 动态管理:无需手动创建PV,完全由Provisioner自动管理

第二步:创建 ZooKeeper Deployment 和 Service

PVC 创建后会自动绑定,可以直接创建 Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
name: zookeeper
namespace: dolphinscheduler
labels:
app: zookeeper
spec:
replicas: 1
selector:
matchLabels:
app: zookeeper
template:
metadata:
labels:
app: zookeeper
spec:
containers:
- name: zookeeper
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/zookeeper:latest
ports:
- containerPort: 2181
env:
- name: ZOO_MY_ID
value: "1"
- name: ZOO_SERVERS
value: "server.1=0.0.0.0:2888:3888;2181"
volumeMounts:
- name: zookeeper-data
mountPath: /data
resources:
limits:
memory: 1Gi
cpu: 500m
requests:
memory: 512Mi
cpu: 250m
volumes:
- name: zookeeper-data
persistentVolumeClaim:
claimName: zookeeper-pvc
---
apiVersion: v1
kind: Service
metadata:
name: zookeeper
namespace: dolphinscheduler
spec:
selector:
app: zookeeper
ports:
- port: 2181
targetPort: 2181
type: ClusterIP

3.5 DolphinScheduler Master 部署

apiVersion: apps/v1
kind: Deployment
metadata:
name: dolphinscheduler-master
namespace: dolphinscheduler
labels:
app: dolphinscheduler-master
spec:
replicas: 1 # 修改为单节点部署
selector:
matchLabels:
app: dolphinscheduler-master
template:
metadata:
labels:
app: dolphinscheduler-master
spec:
containers:
- name: master
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/dolphinscheduler-master:3.2.2
ports:
- containerPort: 5678
env:
- name: TZ
value: "Asia/Shanghai"
- name: SPRING_PROFILES_ACTIVE
value: "postgresql"
- name: DATABASE_HOST
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-host
- name: DATABASE_PORT
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-port
- name: DATABASE_USERNAME
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-username
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-password
- name: DATABASE_DATABASE
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-name
# 添加Spring数据源配置,确保应用程序使用正确的数据库连接
- name: SPRING_DATASOURCE_URL
value: "jdbc:postgresql://$(DATABASE_HOST):$(DATABASE_PORT)/$(DATABASE_DATABASE)"
- name: SPRING_DATASOURCE_USERNAME
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-username
- name: SPRING_DATASOURCE_PASSWORD
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-password
- name: SPRING_DATASOURCE_DRIVER_CLASS_NAME
value: "org.postgresql.Driver"
- name: ZOOKEEPER_QUORUM
value: "zookeeper.dolphinscheduler.svc.cluster.local:2181"
- name: registry.zookeeper.connect-string
value: "zookeeper.dolphinscheduler.svc.cluster.local:2181"
- name: JAVA_OPTS
value: "-Xms1g -Xmx2g -Xmn512m" # 减少内存占用
- name: WORKER_EXEC_THREADS
value: "50" # 减少线程数
resources:
limits:
memory: 4Gi # 增加内存限制
cpu: 4000m # 增加CPU限制
requests:
memory: 2Gi # 增加内存请求
cpu: 2000m # 增加CPU请求
livenessProbe:
httpGet:
path: /actuator/health
port: 5679
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /actuator/health
port: 5679
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 5
failureThreshold: 3
---
apiVersion: v1
kind: Service
metadata:
name: dolphinscheduler-master
namespace: dolphinscheduler
spec:
selector:
app: dolphinscheduler-master
ports:
- port: 5678
targetPort: 5678
type: ClusterIP

3.6 DolphinScheduler Worker 部署

apiVersion: apps/v1
kind: Deployment
metadata:
name: dolphinscheduler-worker
namespace: dolphinscheduler
labels:
app: dolphinscheduler-worker
spec:
replicas: 1 # 修改为单节点部署
selector:
matchLabels:
app: dolphinscheduler-worker
template:
metadata:
labels:
app: dolphinscheduler-worker
spec:
containers:
- name: worker
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/dolphinscheduler-worker:3.2.2
ports:
- containerPort: 1234
env:
- name: TZ
value: "Asia/Shanghai"
- name: SPRING_PROFILES_ACTIVE
value: "postgresql"
- name: DATABASE_HOST
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-host
- name: DATABASE_PORT
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-port
- name: DATABASE_USERNAME
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-username
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-password
- name: DATABASE_DATABASE
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-name
# 添加Spring数据源配置,确保应用程序使用正确的数据库连接
- name: SPRING_DATASOURCE_URL
value: "jdbc:postgresql://$(DATABASE_HOST):$(DATABASE_PORT)/$(DATABASE_DATABASE)"
- name: SPRING_DATASOURCE_USERNAME
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-username
- name: SPRING_DATASOURCE_PASSWORD
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-password
- name: SPRING_DATASOURCE_DRIVER_CLASS_NAME
value: "org.postgresql.Driver"
- name: ZOOKEEPER_QUORUM
value: "zookeeper.dolphinscheduler.svc.cluster.local:2181"
- name: registry.zookeeper.connect-string
value: "zookeeper.dolphinscheduler.svc.cluster.local:2181"
- name: JAVA_OPTS
value: "-Xms1g -Xmx2g -Xmn512m" # 减少内存占用
- name: WORKER_EXEC_THREADS
value: "50" # 减少线程数
resources:
limits:
memory: 4Gi # 增加内存限制
cpu: 4000m # 增加CPU限制
requests:
memory: 2Gi # 增加内存请求
cpu: 2000m # 增加CPU请求
livenessProbe:
httpGet:
path: /actuator/health
port: 1235
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /actuator/health
port: 1235
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 5
failureThreshold: 3
---
apiVersion: v1
kind: Service
metadata:
name: dolphinscheduler-worker
namespace: dolphinscheduler
spec:
selector:
app: dolphinscheduler-worker
ports:
- port: 1234
targetPort: 1234
type: ClusterIP

3.7 DolphinScheduler API 部署

apiVersion: apps/v1
kind: Deployment
metadata:
name: dolphinscheduler-api
namespace: dolphinscheduler
labels:
app: dolphinscheduler-api
spec:
replicas: 1
selector:
matchLabels:
app: dolphinscheduler-api
template:
metadata:
labels:
app: dolphinscheduler-api
spec:
containers:
- name: api
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/dolphinscheduler-api:3.2.2
ports:
- containerPort: 12345
env:
- name: TZ
value: "Asia/Shanghai"
- name: SPRING_PROFILES_ACTIVE
value: "postgresql"
- name: DATABASE_HOST
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-host
- name: DATABASE_PORT
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-port
- name: DATABASE_USERNAME
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-username
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-password
- name: DATABASE_DATABASE
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-name
# 添加Spring数据源配置,确保应用程序使用正确的数据库连接
- name: SPRING_DATASOURCE_URL
value: "jdbc:postgresql://$(DATABASE_HOST):$(DATABASE_PORT)/$(DATABASE_DATABASE)"
- name: SPRING_DATASOURCE_USERNAME
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-username
- name: SPRING_DATASOURCE_PASSWORD
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-password
- name: SPRING_DATASOURCE_DRIVER_CLASS_NAME
value: "org.postgresql.Driver"
- name: ZOOKEEPER_QUORUM
value: "zookeeper.dolphinscheduler.svc.cluster.local:2181"
- name: registry.zookeeper.connect-string
value: "zookeeper.dolphinscheduler.svc.cluster.local:2181"
- name: JAVA_OPTS
value: "-Xms1g -Xmx2g -Xmn512m" # 减少内存占用
- name: WORKER_EXEC_THREADS
value: "50" # 减少线程数
resources:
limits:
memory: 4Gi # 增加内存限制
cpu: 4000m # 增加CPU限制
requests:
memory: 2Gi # 增加内存请求
cpu: 2000m # 增加CPU请求
livenessProbe:
httpGet:
path: /dolphinscheduler/actuator/health
port: 12345
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /dolphinscheduler/actuator/health
port: 12345
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 5
failureThreshold: 3
---
apiVersion: v1
kind: Service
metadata:
name: dolphinscheduler-api
namespace: dolphinscheduler
spec:
selector:
app: dolphinscheduler-api
ports:
- port: 12345
targetPort: 12345
type: ClusterIP

3.8 DolphinScheduler Alert 部署

apiVersion: apps/v1
kind: Deployment
metadata:
name: dolphinscheduler-alert
namespace: dolphinscheduler
labels:
app: dolphinscheduler-alert
spec:
replicas: 1
selector:
matchLabels:
app: dolphinscheduler-alert
template:
metadata:
labels:
app: dolphinscheduler-alert
spec:
containers:
- name: alert
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/dolphinscheduler-alert-server:3.2.2
ports:
- containerPort: 50052
env:
- name: TZ
value: "Asia/Shanghai"
- name: SPRING_PROFILES_ACTIVE
value: "postgresql"
- name: DATABASE_HOST
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-host
- name: DATABASE_PORT
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-port
- name: DATABASE_USERNAME
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-username
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-password
- name: DATABASE_DATABASE
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-name
# 添加Spring数据源配置,确保应用程序使用正确的数据库连接
- name: SPRING_DATASOURCE_URL
value: "jdbc:postgresql://$(DATABASE_HOST):$(DATABASE_PORT)/$(DATABASE_DATABASE)"
- name: SPRING_DATASOURCE_USERNAME
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-username
- name: SPRING_DATASOURCE_PASSWORD
valueFrom:
secretKeyRef:
name: dolphinscheduler-secrets
key: database-password
- name: SPRING_DATASOURCE_DRIVER_CLASS_NAME
value: "org.postgresql.Driver"
- name: ZOOKEEPER_QUORUM
value: "zookeeper.dolphinscheduler.svc.cluster.local:2181"
- name: registry.zookeeper.connect-string
value: "zookeeper.dolphinscheduler.svc.cluster.local:2181"
- name: JAVA_OPTS
value: "-Xms1g -Xmx2g -Xmn512m" # 减少内存占用
- name: WORKER_EXEC_THREADS
value: "50" # 减少线程数
resources:
limits:
memory: 4Gi # 增加内存限制
cpu: 4000m # 增加CPU限制
requests:
memory: 2Gi # 增加内存请求
cpu: 2000m # 增加CPU请求
---
apiVersion: v1
kind: Service
metadata:
name: dolphinscheduler-alert
namespace: dolphinscheduler
spec:
selector:
app: dolphinscheduler-alert
ports:
- port: 50052
targetPort: 50052
type: ClusterIP

4. 网络配置

4.1 创建 Ingress

  1. 进入应用负载应用路由
  2. 点击创建
  3. 填写路由信息:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: dolphinscheduler-ingress
namespace: dolphinscheduler
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
spec:
rules:
- host: dolphinscheduler.kubesphere.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: dolphinscheduler-api
port:
number: 12345

5.2 检查服务状态

5.4 访问DolphinScheduler Web界面

通过Ingress访问

  1. 在浏览器中访问配置的域名
  2. 例如:http://dolphinscheduler.kubesphere.local

通过NodePort访问

如果没有配置Ingress,可以通过NodePort访问:

  1. 进入应用负载服务
  2. 找到dolphinscheduler-api服务
  3. 点击更多操作编辑外网访问
  4. 选择NodePort
  5. 通过http://<节点IP>:<NodePort>访问

登录验证

使用默认管理员账户登录:

  • 用户名: admin
  • 密码: dolphinscheduler123

5.5 功能验证

创建测试工作流

  1. 登录DolphinScheduler Web界面
  2. 创建项目
  3. 创建简单的Shell任务工作流
  4. 执行工作流并查看结果