一、背景
- 什么时候需要把xxl-job部署到k8s里
当你的java服务部署到K8S后,因为xxl-job的任务调度器需要对注册上来的执行器进行健康检测,而java服务作为执行器,注册地址是pod的Ip地址;所以,调度器想要访问执行器的网路是不通的。
换句话说,xxl-job的任务调度器和执行器必须在同一个网络下,互相之间能够相通的。
》也就不能把执行器部署在k8s里,而把任务调度器部署在k8s外部。
本文主要详细讲解其部署过程,分为以下主要步骤:
- 基于xxl-job的源码,制作你自己的docker镜像,并推送到私有仓库
- 使用argocd部署,采用Helm的方式
详细的部署可以参考之前的devops系列文章,这里不会像之前那样赘述。
二、目标
- 1、xxl-job可以部署多个Pod节点,也就是支持集群模式,对外提供的是service地址,可以是NodePort或者LB。
- 2、替代官方推荐的集群模式,不再需要Nginx等组件代理多个xxl-job任务调度器。
- 3、k8s内部的java服务使用同网络下的xxl-job,能够正常地执行任务调度。
三、准备工作
- 1、拉取github源码,修改必要的文案和图标等
- 2、编写Dockerfile
- 3、在jenkins创建job
- 4、编写argocd-helm-yaml
- 5、在argocd创建Application
- 6、创建xxl-job数据库,执行脚本语句
1、拉取xxl-job源码
修改xxl-job-admin模块下的pom.xml,增加maven插件:
为的是读取程序的版本号,在下文制作docker镜像的时候用上。
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>4.0.0</version>
<executions>
<execution>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
<configuration>
<verbose>true</verbose>
<dateFormat>yyyy-MM-dd'T'HH:mm:ssZ</dateFormat>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
<includeOnlyProperties>
<includeOnlyProperty>^git.build.(time|version)$</includeOnlyProperty>
<includeOnlyProperty>^git.commit.id.(abbrev|full)$</includeOnlyProperty>
</includeOnlyProperties>
<commitIdGenerationMode>full</commitIdGenerationMode>
<failOnNoGitDirectory>false</failOnNoGitDirectory>
</configuration>
</plugin>
修改文案及图标,在xxl-job-admin/resources/templates目录下的.ftl文件。
其他的更多二次开发,有空我们在另外的文章单独讨论。
- 支持Ldap统一身份登录
- 注册到consul/nacos等服务注册中心
- 本地配置调整为分布式配置,如nacos/consul等
- 接入sentry报警
- 接入micrometer,暴露prometheus能够采集的指标接口
- 丰富其原本的告警机制,支持钉钉、企业微信、短信等方式
- 任务执行的时候,采用okhttp等http框架替代现今方式
- 日志治理
2、编写Dockerfile
我们是在Jenkins里的构建docker镜像里使用到它,所以会放这个文件在jenkins机器上。好处是不用每个要部署到K8S里的服务都关心这个问题。
由于前文,我们已有详细介绍,这里就一笔带过了。
3、在jenkins创建Job
4、编写argocd-helm-yaml
- 从之前的devops-service目录复制一份到xx-job
- 修改values.yaml
appName: xx-job
# endpoint
service:
type: NodePort
port: 8090
说白了,xx-job也是一个java应用,和devops-service最大不同,就是服务名称和端口。
5、在argocd创建Application
6、创建xxl-job数据库,执行脚本语句
官方的doc目录下有.sql文件,需要注意的时候及时删除log表的数据,防止过大。
四、验证
-
查看xxl-job对外提供的端口
-
查看xxl-job的pod是否启动成功
-
访问xxl-job的健康检测接口,返回{“status”:“UP”}
-
进入xxl-job-admin控制台,可以看到devops-service,作为执行器已自动注册到调度中心了。devops-service服务的pod地址是10.45.0.6。
-
创建xxl-job的任务
-
查看任务的调度日志
至此,本文对于K8S部署xxl-job就已结束。