K8S应用笔记 —— 部署Dolphinscheduler及简单应用(一)

这篇具有很好参考价值的文章主要介绍了K8S应用笔记 —— 部署Dolphinscheduler及简单应用(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Dolphinscheduler简介

Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。

Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种 OPS 编排中的关系。 解决数据研发ETL依赖错综复杂,无法监控任务健康状态的问题。 DolphinSchedulerDAG(Directed Acyclic Graph,DAG)流式方式组装任务,可以及时监控任务的执行状态,支持重试、指定节点恢复失败、暂停、恢复、终止任务等操作。

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

二、本章目标

  • 基于K8S环境完成Dolphinscheduler部署
  • 使用本地文件存储而非 HDFSS3
  • 基于K8S环境Dolphinscheduler简单应用(支持Python3MySQL数据源及工作流编排)

三、前提条件

  • 具备 Kubernetes 1.12+ 集群(必须),使用Kuboard v3作为集群管理工具(可选)

    具体操作可见:
    K8S安装笔记(一)—— master节点完整安装配置
    K8S安装笔记(二)—— 多公网服务器搭建集群

  • PV 供应(存储使用NFS,存储类为nfs-storage

    具体操作可见:
    搭建NFS Server及创建 NFS 存储类

四、安装helm

helm官方文档,https://helm.sh/docs/intro/install/

4.1 下载所需版本

下载路径:https://github.com/helm/helm/releases

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

我选择的选择的版本是:helm-v3.12.2-linux-amd64

4.2 上传至服务器并解压

tar -zxvf helm-v3.12.2-linux-amd64.tar.gz

4.3 移到到可执行目录

helm在解压后的目录中找到二进制文件,然后将其移至所需的目标位置

mv linux-amd64/helm /usr/local/bin/helm

4.4 从脚本安装

安装脚本:

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

五、安装 dolphinscheduler

5.1 下载解压

请下载源码包 apache-dolphinscheduler--src.tar.gz,下载地址。

发布一个名为 dolphinscheduler 的版本(release),官方给出的参照如下:

tar -zxvf apache-dolphinscheduler-<version>-src.tar.gz
cd apache-dolphinscheduler-<version>-src/deploy/kubernetes/dolphinscheduler
helm repo add bitnami https://charts.bitnami.com/bitnami
helm dependency update .
helm install dolphinscheduler . --set image.tag=<version>

我选择的是3.1.8版本,具体执行命令如下:

tar -zxvf apache-dolphinscheduler-3.1.8-src.tar.gz
cd apache-dolphinscheduler-3.1.8-src/deploy/kubernetes/dolphinscheduler

5.2 变更RAW资源请求地址

原请求地址为:https://raw.githubusercontent.com/,国内可能连接不上,变更RAW资源加速地址:https://raw.gitmirror.com

修改Chart.yaml文件中下面的配置项:

vi Chart.yaml
#原地址
#repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami
#资源加速地址
repository: https://raw.gitmirror.com/bitnami/charts/archive-full-index/bitnami

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

5.3 支持本地文件存储而非 HDFS和S3

修改 values.yaml 文件中下面的配置项:

common:
  configmap:
    RESOURCE_STORAGE_TYPE: "NONE"
    RESOURCE_UPLOAD_PATH: "/dolphinscheduler"
    FS_DEFAULT_FS: "file:///"
  fsFileResourcePersistence:
    enabled: true
    accessModes:
    - "ReadWriteMany"
    storageClassName: "-"
    storage: "20Gi"

storageClassNamestorage 按需修改为实际值,注意:storageClassName 必须支持访问模式:ReadWriteMany

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

5.4 部署

helm dependency update .
helm install dolphinscheduler . -n dolphinscheduler

部署效果:

kubectl get pod,svc,pvc -o wide -n dolphinscheduler

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生
dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

5.5 访问前端页面

port-forward 端口转发:

kubectl port-forward --address 0.0.0.0 -n dolphinscheduler svc/dolphinscheduler-api 12345:12345

其他NodePortingress访问方式请自行探索。

访问前端页面:http://localhost:12345/dolphinscheduler/ui

默认的用户是admin,默认的密码是dolphinscheduler123

六、支持Python3和MySQL

6.1 dolphinscheduler-worker 镜像构建

下载 MySQL 驱动包 mysql-connector-java-8.0.16.jar

目录结构:
dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

创建一个新的 Dockerfile,用于添加 MySQL 的驱动包和安装Python 3

FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-worker:3.1.8
# 添加mysql驱动
COPY ./mysql-connector-java-8.0.16.jar /opt/dolphinscheduler/libs
# 添加自定义requirements.txt
COPY ./requirements.txt /tmp
RUN apt-get update && \
    apt-get install -y --no-install-recommends python3-pip && \
	pip3 install --no-cache-dir -r /tmp/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ && \
    rm -rf /var/lib/apt/lists/*

requirements.txt

Flask_Cors==3.0.10
pandas==1.4.2
PyMySQL==1.0.2
SQLAlchemy==1.4.32
xlwt==1.3.0
xlsxwriter==3.0.3
gunicorn
greenlet
eventlet
gevent
pypinyin
openpyxl

构建一个包含新镜像:

docker build -t apache/dolphinscheduler-worker:python3-mysql .

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

将构建好的新镜像进行分发。

6.2 dolphinscheduler-api 镜像构建

创建一个新的 Dockerfile,用于添加 MySQL 的驱动包和安装Python 3

FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-api:3.1.8
# 添加mysql驱动

构建一个包含新镜像:

docker build -t apache/dolphinscheduler-api:support-mysql .

将构建好的新镜像进行分发。

6.3 修改PYTHON_HOME

  • 修改 values.yaml 文件中的 PYTHON_HOME/usr/bin/python3
  • 或在Kuboard - dolphinscheduler 名称空间 - 配置中心 - 配置字典 - dolphinscheduler-common - 编辑
    dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

6.4 修改dolphinscheduler-worker 运行镜像版本

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

6.5 修改dolphinscheduler-api 运行镜像版本

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

七、简单使用验证

7.1 登录

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

7.2 创建租户

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

7.3 创建项目

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

7.4 创建数据源

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

7.5 创建项目

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

7.6 创建工作流

[{
	"processDefinition": {
		"id": 1,
		"code": 10577001612288,
		"name": "测试",
		"version": 1,
		"releaseState": "OFFLINE",
		"projectCode": 10576969989760,
		"description": "",
		"globalParams": "[]",
		"globalParamList": [],
		"globalParamMap": {},
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"flag": "YES",
		"userId": 1,
		"userName": null,
		"projectName": null,
		"locations": "[{\"taskCode\":10576976496512,\"x\":175,\"y\":216},{\"taskCode\":10576980784256,\"x\":498,\"y\":216},{\"taskCode\":10576997351040,\"x\":834,\"y\":216}]",
		"scheduleReleaseState": null,
		"timeout": 0,
		"tenantId": -1,
		"tenantCode": null,
		"modifyBy": null,
		"warningGroupId": 0,
		"executionType": "PARALLEL"
	},
	"processTaskRelationList": [{
		"id": 1,
		"name": "",
		"processDefinitionVersion": 1,
		"projectCode": 10576969989760,
		"processDefinitionCode": 10577001612288,
		"preTaskCode": 0,
		"preTaskVersion": 0,
		"postTaskCode": 10576976496512,
		"postTaskVersion": 1,
		"conditionType": "NONE",
		"conditionParams": {},
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}, {
		"id": 2,
		"name": "",
		"processDefinitionVersion": 1,
		"projectCode": 10576969989760,
		"processDefinitionCode": 10577001612288,
		"preTaskCode": 10576976496512,
		"preTaskVersion": 1,
		"postTaskCode": 10576980784256,
		"postTaskVersion": 1,
		"conditionType": "NONE",
		"conditionParams": {},
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}, {
		"id": 3,
		"name": "",
		"processDefinitionVersion": 1,
		"projectCode": 10576969989760,
		"processDefinitionCode": 10577001612288,
		"preTaskCode": 10576980784256,
		"preTaskVersion": 1,
		"postTaskCode": 10576997351040,
		"postTaskVersion": 1,
		"conditionType": "NONE",
		"conditionParams": {},
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}],
	"taskDefinitionList": [{
		"id": 1,
		"code": 10576976496512,
		"name": "sql",
		"version": 1,
		"description": "",
		"projectCode": 10576969989760,
		"userId": 1,
		"taskType": "SQL",
		"taskParams": {
			"localParams": [],
			"resourceList": [],
			"type": "MYSQL",
			"datasource": 1,
			"sql": "show tables",
			"sqlType": "0",
			"preStatements": [],
			"postStatements": [],
			"segmentSeparator": "",
			"displayRows": 10
		},
		"taskParamList": [],
		"taskParamMap": null,
		"flag": "YES",
		"taskPriority": "MEDIUM",
		"userName": null,
		"projectName": null,
		"workerGroup": "default",
		"environmentCode": -1,
		"failRetryTimes": 0,
		"failRetryInterval": 1,
		"timeoutFlag": "CLOSE",
		"timeoutNotifyStrategy": null,
		"timeout": 0,
		"delayTime": 0,
		"resourceIds": "",
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"modifyBy": null,
		"taskGroupId": 0,
		"taskGroupPriority": 0,
		"cpuQuota": -1,
		"memoryMax": -1,
		"taskExecuteType": "BATCH",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}, {
		"id": 2,
		"code": 10576980784256,
		"name": "shell",
		"version": 1,
		"description": "",
		"projectCode": 10576969989760,
		"userId": 1,
		"taskType": "SHELL",
		"taskParams": {
			"localParams": [],
			"rawScript": "echo \"hello shell\"",
			"resourceList": []
		},
		"taskParamList": [],
		"taskParamMap": null,
		"flag": "YES",
		"taskPriority": "MEDIUM",
		"userName": null,
		"projectName": null,
		"workerGroup": "default",
		"environmentCode": -1,
		"failRetryTimes": 0,
		"failRetryInterval": 1,
		"timeoutFlag": "CLOSE",
		"timeoutNotifyStrategy": null,
		"timeout": 0,
		"delayTime": 0,
		"resourceIds": "",
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"modifyBy": null,
		"taskGroupId": 0,
		"taskGroupPriority": 0,
		"cpuQuota": -1,
		"memoryMax": -1,
		"taskExecuteType": "BATCH",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}, {
		"id": 3,
		"code": 10576997351040,
		"name": "python",
		"version": 1,
		"description": "",
		"projectCode": 10576969989760,
		"userId": 1,
		"taskType": "PYTHON",
		"taskParams": {
			"localParams": [],
			"rawScript": "print(\"hello python\")",
			"resourceList": []
		},
		"taskParamList": [],
		"taskParamMap": null,
		"flag": "YES",
		"taskPriority": "MEDIUM",
		"userName": null,
		"projectName": null,
		"workerGroup": "default",
		"environmentCode": -1,
		"failRetryTimes": 0,
		"failRetryInterval": 1,
		"timeoutFlag": "CLOSE",
		"timeoutNotifyStrategy": null,
		"timeout": 0,
		"delayTime": 0,
		"resourceIds": "",
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"modifyBy": null,
		"taskGroupId": 0,
		"taskGroupPriority": 0,
		"cpuQuota": -1,
		"memoryMax": -1,
		"taskExecuteType": "BATCH",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}],
	"schedule": null
}]

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

7.7 上线运行

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生

dolphinscheduler k8s,Kubernetes实战,kubernetes,容器,云原生文章来源地址https://www.toymoban.com/news/detail-730741.html

到了这里,关于K8S应用笔记 —— 部署Dolphinscheduler及简单应用(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 持续集成部署-K8s 简单使用

    这里将 HTTPD 服务映射到 Kubernetes 集群的 8080 端口上,直接在Master节点上操作即可。 创建一个名为 httpd-deployment.yaml 的 YAML 文件,内容如下:

    2024年02月12日
    浏览(69)
  • k8s 入门到实战--部署应用到 k8s

    k8s 入门到实战 01.png 本文提供视频版: 最近这这段时间更新了一些 k8s 相关的博客和视频,也收到了一些反馈;大概分为这几类: 公司已经经历过服务化改造了,但还未接触过云原生。 公司部分应用进行了云原生改造,但大部分工作是由基础架构和运维部门推动的,自己只

    2024年02月09日
    浏览(40)
  • EFK简单部署收集K8S日志

    安装ES kibana K8S部署

    2024年04月27日
    浏览(32)
  • k8s:基础内容和部署简单nginx

    1) apiVersion v1:Kubernetes API的稳定版本,包含很多核心对象:pod、service等。 2) kind kind指定这个资源对象的类型,如pod、deployment、statefulset、job、cronjob、Endpoints service Endpoints :可以把外部的链接到k8s系统中 service:部署一个内部的IP,其他deployment可以链接 deployment:部署一个pod

    2023年04月20日
    浏览(35)
  • jenkins部署K8S应用

      PS:这种方式是jenkins独立,然后slave已容器方式运行,master是独立出来的,减少运维成本,还能提高效率。 如果使用master部署需要把master加入k8s集群 jenkins安装不赘述 在k8s-master节点上生成对应的证书 在jenkins里添加凭据 凭据类型选Certificate 上传cert.pfx,输入刚才设置的密码

    2024年02月04日
    浏览(37)
  • Jenkins使用k8s部署应用

    1、jenkins在k8s内部署(请参考其他人的文章) 2、jenkins安装kubenents相关插件 3、配置k8s云         非常重要,目的是实现jenkins可以远程调用k8s进行部署,并可实现安装jenkins-slave进行构建。使得不再依赖jenkins单机能力进行构建,比较适合一定规模的公司。  插件安装后,打开

    2024年02月15日
    浏览(60)
  • 【Go】K8s 管理系统项目[Jenkins Pipeline K8s环境–应用部署]

    考虑到实际工作中前后端可能是不同的同学完成,一般Api部分完成后改动会比较小,web部分改动会比较频繁.于是将api和web分了2个pipeline实现 docker目录存放镜像构建相关文件 k8s-plantform-api 存放api部分代码 Jenkinsfile用作pipeline配置 yaml用作生成k8s下k8s-plantform-api相关资源 1.1.1 docker目

    2023年04月08日
    浏览(55)
  • 在 K8S 中部署一个应用 下

    接着上一篇继续部署应用到 K8S中 之前简单部署的简单集群,三个工作节点是运行在 docker 和 kubelet 的,还有一个是控制节点 之前有 提到 ReplicationController , pod 和 服务 是如何组合在一起的呢? 可以通过这张如图来解释一下 我们之前创建 pod 的时候不是直接创建的,是通过

    2024年02月10日
    浏览(38)
  • 在 K8S 中部署一个应用 上

    本身在 K8S 中部署一个应用是需要写 yaml 文件的 ,我们这次简单部署,通过拉取网络上的镜像来部署应用,会用图解的方式来分享一下,过程中都发生了什么 我们可以通过 kubectl run 的方式来简单部署一个应用,现在我们先不关心里面的 yaml 结构和具体的配置,先运行起来,

    2024年02月09日
    浏览(81)
  • 【云原生、k8s】管理Kubernetes应用搭建与部署

    官方提供Kubernetes部署3种方式 (一)minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。 官方文档:https://kubernetes.io/docs/setup/minikube/ (二)二进制包 从官方下载发行版的二进制包,手动部署每个组件,

    2024年01月21日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包