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
---
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
|
这里我修改了端口号原来是8080 现在是9333
添加k8s命名空间insight,可以不要就是默认default.
因为我的集群是通过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
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 executor: appname: xxl-job-executor-sample address: 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
|