k8s部署xxl-job

xxl-job是个很好用的定时任务调度器,记录下部署过程

第一步看官方文档

https://www.xuxueli.com/xxl-job

先去这里把xxljob相关的表导入

https://github.com/xuxueli/xxl-job/tree/master/doc/db

部署xxl-job-admin,创建xxl-job-admin.yaml文件

xxl-job-admin的部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
apiVersion: v1
kind: ConfigMap
apiVersion: v1
metadata:
name: xxl-job-config
namespace: insight
data:
PARAMS: >-
--server.port=9333
--spring.datasource.url=jdbc:mysql://jddxxxxxxxxxxx.com/insight?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
--spring.datasource.username=txxxxxo
--spring.datasource.password=Txxxxx4
--xxl.job.accessToken=22d697201b8953eabf5f8d901f30a037
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: xxl-job-admin
namespace: insight
labels:
app: xxl-job-admin
spec:
replicas: 1
selector:
matchLabels:
app: xxl-job-admin
template:
metadata:
creationTimestamp: null
labels:
app: xxl-job-admin
spec:
containers:
- name: xxl-job-admin
image: xuxueli/xxl-job-admin:3.0.0
ports:
- containerPort: 9333
protocol: TCP
env:
- name: TZ
value: Asia/Shanghai
- name: PARAMS
valueFrom:
configMapKeyRef:
name: xxl-job-config
key: PARAMS
resources:
limits:
cpu: '1'
memory: 2Gi
requests:
cpu: 500m
memory: 512Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: xxl-job-admin-svc
namespace: insight
labels:
app: xxl-job-admin-svc
spec:
ports:
- name: xxl-job-admin
port: 9333
protocol: TCP
targetPort: 9333
selector:
app: xxl-job-admin
type: ClusterIP



---
# ------------------- App Ingress ------------------- #
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: xxl-job-admin
namespace: insight
spec:
ingressClassName: nginx
rules:
- host: xxl-job-admin.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: xxl-job-admin-svc
port:
name: xxl-job-admin
  1. 这里我修改了端口号原来是8080 现在是9333

  2. 添加k8s命名空间insight,可以不要就是默认default.

  3. 因为我的集群是通过Ingress暴露的需要外部访问xxl-job-admin,所以我加了Ingress,这个也可以删掉

执行 kubectl apply -f xxl-job-admin.yaml就可以了

访问管理后台
http://xxl-job-admin.com:30937/xxl-job-admin/j (这个地址是我的ingress暴露地址.)
admin/123456

执行器的部署

执行器参考官方样例

https://github.com/xuxueli/xxl-job/tree/master/xxl-job-executor-samples

我的执行器也是springboot应用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
server:
port: 9444 #springboot的端口

spring:
profiles:
active: prod
config:
import:
- optional:classpath:application.yaml
- optional:classpath:application-${spring.profiles.active}.yaml
- optional:nacos:${spring.application.name}-${spring.profiles.active}.yaml

xxl:
job:
admin:
addresses: http://xxl-job-admin-svc:9333/xxl-job-admin # 调度中心部署地址
accessToken: 22d697201b8953eabf5f8d901f30a037 # 执行器通信TOKEN,非空时启用
executor:
appname: xxl-job-executor-sample # 执行器AppName
address:
ip: # 执行器IP(选填):默认为空表示自动获取IP
port: 9999 # 执行器端口号
logpath: ./logs/xxl-job/jobhandler
logretentiondays: 30


mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml
type-aliases-package: com.xxxxx.xxljob.model
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

主要是看xxl.job的配置.

这里9444与9999端口是独立的,一个是这个应用的端口,另一个是xxl-job执行器端口

这是执行器部署文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
apiVersion: v1
kind: Service
metadata:
name: insight-xxljob
namespace: insight
spec:
type: ClusterIP
ports:
- name: xxl-job-web
port: 9444
targetPort: 9444
- name: xxl-job-executor
port: 9999
targetPort: 9999
selector:
app: insight-xxljob
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: insight-xxljob
namespace: insight
spec:
selector:
matchLabels:
app: insight-xxljob
replicas: 1
strategy:
rollingUpdate:
maxSurge: 50%
maxUnavailable: 50%
type: RollingUpdate
template:
metadata:
labels:
app: insight-xxljob
spec:
imagePullSecrets:
- name: yiyitech-harbor
containers:
- name: insight-xxljob
image: harbor.xxxxx.com:81/insight/yiyitech-xxljob:master
imagePullPolicy: Always
envFrom:
- configMapRef:
name: insight-nacos-config
env:
- name: JAVA_OPTS
value: -server -Xms3g -Xmx3g -Xmn300m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/mnt/logs/joyi/pop-master-gc.hprof
resources:
limits:
cpu: 1
memory: 2G
requests:
cpu: 0.3
memory: 2G
livenessProbe:
httpGet:
path: /actuator/health/liveness
port: 9444
scheme: HTTP
initialDelaySeconds: 40
timeoutSeconds: 3
periodSeconds: 10
successThreshold: 1
failureThreshold: 3
readinessProbe:
httpGet:
path: /actuator/health/readiness
port: 9444
scheme: HTTP
initialDelaySeconds: 40
timeoutSeconds: 3
periodSeconds: 10
successThreshold: 1
failureThreshold: 3
ports:
- containerPort: 9444
volumeMounts:
- mountPath: /mnt/logs/joyi
name: log-dir
nodeSelector:
insight-master: insight-master
volumes:
- name: log-dir
hostPath:
path: /root/data/logs/k8s/joyi
type: Directory

需要注意的点只有Service要暴露两个端口9999与9444.

上面很多东西比如命名空间,imagePullSecrets,镜像拉取地址,nodeSelector根据自己项目情况增删.

可能会用到的命令

1
2
3
4
5
6
7
8
9
10
11
查看pod的状态
kubectl -n insight get pods
查看详细信息(查找启动失败原因)
kubectl -n insight describe pod xxxx
查看容器日志
kubectl -n insight logs -f --tail 100 xxxx

删除pod
kubectl delete -f xxx
生成pod
kubectl apply -f xxx


k8s部署xxl-job
https://lililib.github.io/k8s部署xxl-job/
作者
煨酒小童
发布于
2025年6月16日
许可协议