使用Kubernetes部署xxl-job-admin及xxl-job执行器服务

news2024/11/15 13:29:55

部署环境

  • xxl-job-2.4.0
  • kubernetes-1.26

这里以xxl-job官方的2.4.0的代码为例子,在官方编写的Dockerfile基础上使用docker+kubernetes进行部署,++xxl-job-admin和执行器的Dockerfile、application等配置文件并不是关键,所以这里示例安装以官方Demo文件示例++

编写Dockerfile、application文件

xxl-job-admin-Dockerfile文件

FROM openjdk:8-jre-slim
MAINTAINER xuxueli

ENV PARAMS=""

ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ADD target/xxl-job-admin-*.jar /app.jar

ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"]

xxl-job-admin-application.properties文件

### web
server.port=8080
server.servlet.context-path=/xxl-job-admin

### actuator
management.server.servlet.context-path=/actuator
management.health.mail.enabled=false

### resources
spring.mvc.servlet.load-on-startup=0
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/

### freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.##########

### mybatis
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
#mybatis.type-aliases-package=com.xxl.job.admin.core.model

### xxl-job, datasource
spring.datasource.url=jdbc:mysql://localhost:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=admin
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

### datasource-pool
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.max-lifetime=900000
spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.validation-timeout=1000

### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=2207080688@qq.com
spring.mail.from=2207080688@qq.com
spring.mail.password=123456
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

### xxl-job, access token
xxl.job.accessToken=

### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
xxl.job.i18n=zh_CN

## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100

### xxl-job, log retention days
xxl.job.logretentiondays=30

xxl-job-executor-sample-springboot(执行器)-Dockerfile文件

FROM openjdk:8-jre-slim
MAINTAINER xuxueli

ENV PARAMS=""

ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ADD target/xxl-job-executor-sample-springboot-*.jar /app.jar

ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"]

xxl-job-executor-sample-springboot(执行器)-application文件

# web port
server.port=8081
# no web
#spring.main.web-environment=false

# log config
logging.config=classpath:logback.xml


### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://localhost:8080/xxl-job-admin/

### xxl-job, access token
xxl.job.accessToken=

### xxl-job executor appname
xxl.job.executor.appname=xxl-job-executor-sample
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=9999
### xxl-job executor log-path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30

注意事项:这里以springboot服务作为执行器服务,一般建议执行器服务和具体的系统业务都是合并为同一个服务,这样有利于后期具体的系统业务使用xxl-job的GLUE模式,并不建议把执行器服务单独设为一个独立的服务。所以这里执行器的服务端口号为8081,xxl-job接收调度的端口号为9999,其中9999会接收admin的NettyHttp的请求。

以上的4个文件基本和官方保持一样即可,也可根据各自需要增加配置。

构建Docker镜像

在xxl-job-admin的Dockerfile同级目录下构建镜像:

docker build -t xxl-job-admin:v1 .

在xxl-job-executor-sample-springboot的Dockerfile同级目录下构建镜像:

docker build -t xxl-job-executor-sample-springboot .

编写Kubernete的deploy、svc等部署文件

mkdir /opt/k8s/xxl-job/admin
cd /opt/k8s/xxl-job/admin

创建命名空间

kubectl create ns xxl-job

创建xxl-job-admin的deploy和service文件

vi xxl-job-admin-ds.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: xxl-job-admin
  namespace: xxl-job
  labels:
    name: xxl-job-admin
spec:
  replicas: 1
  selector:
    matchLabels:
      name: xxl-job-admin
  template:
    metadata:
      labels:
        name: xxl-job-admin
    spec:
      containers:
      - name: xxl-job-admin
        image: xxl-job-admin:v1
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: xxl-job-admin
  namespace: xxl-job
  labels:
    name: xxl-job-admin
spec:
  selector:
    name: xxl-job-admin
  type: NodePort
  ports:
  - name: http
    nodePort: 28080
    targetPort: 8080
    port: 80
    protocol: TCP

在xxl-job-admin-ds.yml的同级目录下部署运行

kubectl apply -f .

查看部署运行状态

kubectl get all -n xxl-job

当看到pod的运行状态为Running,并且svc的端口已经成功映射则在浏览器访问:http://localhost:28080/xxl-job-admin
++访问成功则代表部署xxl-job-admin成功++

接下来编写执行器服务的deploy和service文件

mkdir /opt/k8s/xxl-job/executor-simple
cd /opt/k8s/xxl-job/executor-simple
vi xxl-job-executor-simple-ds.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: xxl-job-executor-simple
  namespace: xxl-job
  labels:
    name: xxl-job-executor-simple
spec:
  replicas: 1
  selector:
    matchLabels:
      name: xxl-job-executor-simple
  template:
    metadata:
      labels:
        name: xxl-job-executor-simple
    spec:
      containers:
      - name: xxl-job-executor-simple
        image: xxl-job-executor-sample-springboot:latest
        ports:
        - containerPort: 8081
          protocol: TCP
        - containerPort: 9999
          protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: xxl-job-executor-simple
  namespace: xxl-job
  labels:
    name: xxl-job-executor-simple
spec:
  type: ClusterIP
  ports:
  - name: http
    targetPort: 8081
    port: 80
    protocol: TCP
  - name: job
    targetPort: 9999
    port: 9999
    protocol: TCP
  selector:
    name: xxl-job-executor-simple

注意:这里的执行器服务有需要两个端口号,一个是HttpMethod的8081端口,一个是xxl-job调度使用NettyHttp的9999端口

在xxl-job-executor-simple-ds.yml目录下部署执行器服务

kubectl apply -f .

运行命令观察执行器的pod、svc等运行状态

kubectl get all -n xxl-job

观察执行器的pod、svc状态,当pod为Running即部署执行器成功。

由于xxl-job的注册方式有两种:

  • 自动注册:执行器会以心跳的方式,隔断时间就会向注册地址进行自动注册。
  • 手动注册:用户在xxl-job-admin手动填写执行器的地址

由于我们是使用Kubernetes进行部署的,这里不推荐使用自动注册,因为在kubernetes环境下自动注册的地址是pod的虚拟ip会随着pod的重启而变化,所以不推荐自动注册。

额外踩坑:使用xxl-job官方执行器服务的话,关于xxl.job.admin的配置不能配置在nacos上,需要部署在bootstrap或者application等本地文件上,否则不会生效。

以上为例,使用 http://serviceName.namespace:端口号 进行注册,如下图
在这里插入图片描述

以上则使用Kubernetes部署xxl-job的全部教程,踩坑不易,支持原创。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/133350.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统初始化进程及文件(带命令)

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.系统初始化进程及文件 1.init 进程 2.Systemd概述 3.SysVi…

【Java语言】— 循环结构 :for循环

循环结构:for循环 1.for循环 控制一段代码反复执行很多次。 for循环的格式如下: for (初始化语句;循环条件;迭代语句){循环体语句(重复执行的代码);}下面我们通过案例:输出3次HelloWorld感受一下。 //需求:输出3次HelloWorld…

OpenOCD 不同仿真器使用操作总结记录

针对不同的仿真器使用 OpenOCD 时候的设置操作总结 ...... 矜辰所致目录前言一、OpenOCD 环境搭建二、OpenOCD 基本测试三、Makefile 中仿真器配置3.1 ST-link3.2 Jlink3.2 CMSIS-DAP(待更新)结语前言 在使用 GCC 环境开发 ARM 系列芯片的时候&#x…

ArcGIS基础实验操作100例--实验35等高线生成DEM

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验35 等高线生成DEM 目录 一、实验背景 二、实验数据 三、实验步骤 方法一 &#xff…

4.5、静态路由配置及其可能产生的路由环路问题

静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表\color{red}人工配置路由表人工配置路由表。 这种人工配置方式简单、开销小。但不能及时适应网络状态(流量、拓扑等)的变化。\color{red}但不能及时适应网络状态&#xff08…

我的世界Bukkit服务器插件开发教程(十三)资源包与玩家资料

十三、资源包与玩家资料 1.资源包(Resource Pack) 早期的 Minecraft 并没有资源包一说,而是被叫做材质包。有些服务器为了让玩家拥有更好的游戏体验,一般会在自己特制的客户端中存放一些资源包供玩家加载。 显然,使用…

自动梯度计算

神经网络的参数主要通过梯度下降来进行优化. 当确定了风险函数以及网络结构后, 我们就可以手动用链式法则来计算风险函数对每个参数的梯度, 并用代码进行实现. 但是手动求导并转换为计算机程序的过程非常琐碎并容易出错&#xff0…

二叉树的基础oj题(单值二叉树、相同的树、对称二叉树、二叉树的前序、中序、后序遍历、另一棵树的子树、二叉树的构建和遍历、翻转二叉树)

今天,我带来二叉树的基础oj题 目录单值二叉树:[链接](https://leetcode.cn/problems/univalued-binary-tree/)相同的树:[链接](https://leetcode.cn/problems/same-tree/)对称二叉树:[链接](https://leetcode.cn/problems/symmetr…

syzkaller 黑盒测试1:环境搭建

syzkaller 黑盒测试1:环境搭建 近期需要使用syzkaller对某Linux发行版系统内核进行测试,但是未提供内核源码,只能在黑盒条件下测试。这是笔者第一次接触syzkaller,对测试流程不太熟悉。另外,网上很少有syzkaller黑盒测…

C语言版扫雷——从0到1实现扫雷小游戏

🐒博客名:平凡的小苏 📚学习格言:有志者,事竟成,破釜沉舟,百二秦关终属楚;苦心人,天不负,卧薪尝胆,三千越甲可吞吴。 扫雷思维导图 目录 扫雷思维…

9_2、Java基本语法之常用类日期、时间类的使用

一、JDK 8之前时间日期API jdk8之前的日期时间类 1.System的currentTimeMillis() 2.java.util.Date以及子类java.sql.Date 3.SimpleDateFormat 4.Calender类:日历类 1、获取系统当前时间:System类下的currentTimeMillis(); //返回的是当前时间与1970年…

MySQL--整合Keepalived进行双机热备自动切换(升级版)

原文网址:MySQL--整合Keepalived进行双机热备自动切换(升级版)_IT利刃出鞘的博客-CSDN博客 简介 本文介绍MySQL整合Keepalived进行双机热备自动切换(升级版)。 服务器要考虑高可用问题。nginx、tomcat、缓存、队列、数…

Java开发的古董拍卖系统竞标系统拍卖网

简介 古董展品拍卖网站 用户可以注册成为买家也可以申请开店成为卖家,发布古董展品,设置拍卖起止时间进行展品的拍卖。如果早于拍卖开始时间或者晚于拍卖结束时间,则不可以竞拍。多人竞拍,买家可以根据最高价设置谁中标&#xff…

系分 - 结构化方法【概念】

个人总结,仅供参考,欢迎加好友一起讨论 系分 - (概念)结构化方法 结构化方法贯穿整个软件工程全部,可以单独细分出来作为某个软件工程环节的技术指引 结构化方法,由结构化分析(SA,St…

【C语言进阶】速学,不会用数据库可不能再错过文本与二进制文件操作

目录 ✨前言✨: 🎈一、文本文件与二进制文件🎈: 🎁二、文件读取结束的判定🎁: 1.错误使用 feof 函数: 2.判断文件读取结束: 🎊三、文件缓冲区&#x1f38…

Ubuntu虚拟机图文安装详细教程

Hello, 小伙伴们,大家好!今天教大家一步一步进行ubuntu虚拟机的安装。俗话说的好:“工欲善其事必先利其器”,作为一名嵌入式软件开发人员,我们必须熟悉Linux系统的操作及使用,熟练掌握Linux系统下的开发&am…

java 接口的私有方法

其实java8就已经做下伏笔了 在拥有静态和默认 两种拥有方法体的方法之后 接口出现私有方法也是一种必然 然后我们来创建一个包 包下创建一个接口 subInterface 参考代码如下 public interface subInterface {private void show2() {System.out.println("我是一个私有方…

头条权重在线查询,头条号增加权重的4个妙招

头条号权重可以简单理解为头条号指数,刚开通头条号的时候,会根据头条号的领域、介绍等等给予相应的权重。后期会根据账号使用情况进行调整权重,提高或者降低。 头条权重在线查询方法 打开“站长工具”之后,输入网站网址。…

LeetCodeday04

24. 两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3…

JavaScript篇.day08-DOM,节点,事件,定时器,位置及坐标

目录 1.DOM 2.DOM相关操作 (1)获取元素 (2)操作元素 (3)操作元素属性 (4)操作元素类名 (5)操作元素样式 3.节点操作 4.事件 5.事件传播 6.定时器 7.位置及坐标 1.DOM Document Object Model 文档对象模型一整套操作文档流相关内容的属性和方法可以做的操作: 修改样…