介绍:作业调度是计算机操作系统为了合理利用有限硬件资源而对计算机程序或软件按照一定规则进行有序(先后顺序、并行顺序、互斥顺序)规则编排而执行的一种调度控制管理,我们可以理解为是交通指挥员,按照规则指挥交通,自行车、电动车、机动车、轮船、火车、飞机…,它本身不执行通行任务,只发出通行指令,不同交通工具接收指令执行通行指令,通行后反馈执行结果,交通指挥员根据执行结果再让另一个交通工具通行;假如某个交通工具在某段路口抛锚,交通指挥大厅根据规则进行相关处理:如拖离现场、重新发动、通知现场处理等;从而保障全部交通畅顺。
TASKCTL就是一款作业调度自动化技术专业产品。产品概念新颖,体系完整、功能全面、使用简单、操作流畅,超前的设计使产品在业界独树一帜,它不仅有完整的调度核心、灵活的扩展,同时具备完整的应用体系。该产品特别在流程设计,流程图展示方面与业界同类产品方案相比,不仅取得突破性的进展,而且在图形直观性、操作简便性、灵活性方面有质的飞跃,可为企业IT从业人员提供简便、统一的方法来管理各类复杂作业的调度和监控管理。
制作镜像
由于在dockerhub上没有查询到有关于TASKCTL的镜像就只能自己制作了,但由于本人仅是对软进 行件部署安装,没有实际的应用场景,所有制作的镜像也仅提供了最基础的运行环境。这也是给想要 在Docker上部署TASKCTL的小伙伴提供一点思路,可以根据个人的不同需求来定制自己的镜像。
准备工作
首先从官网下载安装包 (cir_linux_64_8.0.tar、taskctl-web-8.0.tar)
TASKCTL下载安装地址 :www.taskctl.com
Docker拉取一个centos的基本镜像:
代码语言:javascript复制1 docker pull centos
2 ## centos latest 5d0da3dc9764 9 months ago 231MB
制作taskctl-base镜像
先启动一个centos容器,将cir_linux_64_8.0.tar包copy到容器中。
代码语言:javascript复制1 # 后台启动centos并将日志输出到黑洞文件,这样防止无交互容器直接停止
2 docker run -d --name taskctl-base centos tail -f /dev/null
3 # copy 两个压缩包到容器的/root 目录下(这个根据个人喜好到哪个目录)
4 docker cp 包所在位置/cir_linux_64_8.0.tar taskctl-base:/root
5 # 进入容器
6 docker exec -it taskctl-base /bin/bash
由于安装包中用到了诸如 ifconfig 、vim的基础命令(具体需求哪些我也没仔细测),没有的话安 装会报错,所以需要安装一下基础命令。
代码语言:javascript复制1 yum install net-tools.x86_64 -y
2 yum install vim -y
如果报错:Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
进入/etcyum.repos.d/目录修改centos文件内容:
代码语言:javascript复制1 sed-i's/mirrorlist/#mirrorlist/g'/etc/yum.repos.d/CentOS-*
2 sed-i's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
进入容器测试安装一次,如果安装成功那么就可以打包成基础镜像了。安装教程官网也有,就是 linux下安装TASKCTL,这里就简要说一下。
代码语言:javascript复制1 #配置环境变量
2 vim/etc/profile
3 #写入内容
4 exportTASKCTLDIR=$HOME/taskctl
5 exportPATH=$PATH:$TASKCTLDIR/bin:.
6 #生效
7 source/etc/profile
8 #查看centos的ip地址,安装的时候用(我这里是127.17.0.2)
9 # 安装java环境
10 yum install java-1.8.0-openjdk-devel.x86_64
安装TASKCTL核心服务
代码语言:javascript复制1 cd/root/cirinst/
2 ./inst
选择2.自定义安装---->调度服务安装(无高可靠)------>输入ip(127.17.0.2) ----- >端口
初始化节点并启动
代码语言:javascript复制1 # 初始化
2 ctlinit
3 #启动
4 ctlstart
5 #查看基本信息,选择1,节点基本信息 6 ctlninfo
启动web服务(安装了java环境以后),直接解压taskctl-web包运行包下的./startup.sh脚本。 到此处安装成功。确认环境和安装包都没有问题,那么就可以制作镜像了。
代码语言:javascript复制1.#退出并停止容器
2.exit
提交镜像
代码语言:javascript复制1.docker commit -a="huangrui" -m="taskctl" taskctl-base huangrui/taskctl-base
制作基础镜像完成。
启动服务
上面制作的基础镜像中带有核心的安装包和web的安装包,满足了taskctl基础环境。一下所有 的容器也是在此镜像的基础上搭建的。
新建Docker网络
代码语言:javascript复制 1 docker network create --driver bridge --subnet 172.17.0.0/16 --gateway 172.17.0.1 taskctl-network
新建所有的taskctl服务都是用自建的docker-network网络,这样就无需使用ip可以直接使用容器 名进行识别,也减少了由于网络不通出现的错误。
启动task-service容器
代码语言:javascript复制1 # 80 端口是web服务的端口,配置文件在/root/taskctl-web-8.0.010/conf/application.yml中
2 docker run -d -p 8888:80 --name docker-task8 huangrui/taskctl-base
3 # 启动核心服务
4 docker exec -it docker-task8 ctlinit
5 docker exec -it docker-task8 ctlstart
6 docker exec -it docker-task8 /root/taskctl-web-8.0.010/start.sh
到此访问IP:8888就可以使用TASKCTL服务了
代理节点
代理节点的安装和service的其实大同小异,进入taskctl-base中,在安装task服务的时候选择代理 节点安装,然后退出容器,保存镜像即可。这样吧service节点和代理节点镜像分开,对于批量启动仅 需要修改代理的IP即可。
其他
由于本教程仅提供思路,所有就没有上传我的镜像,制作起来也不难。主要遇到的坑在于安装代理 节点的时候容器的IP和已安装的节点IP不同,这样批量启动的时候每个容器都去重新安装属实不舒服, 提供两个解决思路:
1.使用Docker网络,在制作镜像时候配置容器host:
格式: 镜像名称 ifconfig中的IP
2. 使用脚本,在大量启动代理节点时修改/root/taskctl/conf目录下的配置地址(ifconfig),也 可以使用启动时固定写死IP