容器化部署(k8s)任务调度平台xxl-job(部署过程及踩坑问题记录)


导入sql等过程就不一一讲述了,详情可见官网,只针对与部署过程及问题记录。

1 部署过程(下方ip代表服务器的ip哈)

1.1 制作服务打包镜像DockerFile

#版本信息
#java:latest 为centos官方java运行环境镜像,600M ,可以提前pull到主机本地
FROM ip:port/library/openjdk:8
MAINTAINER cds "test@qq.com"

#实际上可以配置成变量 
ADD xxljob-service.jar /usr/local/jar/

#开启内部服务端口 xxljob-demo 项目端口
            
#ENV TIME=`date`
CMD java -jar -Duser.timezone=GMT+08 /usr/local/jar/xxljob-service.jar --spring.config.location=/usr/local/jar/config

1.2 制作执行脚本run.sh

#!/bin/bash

#服务名称
SERVER_NAME=xxljob-service
DOCKER_IMAGES=`docker images --filter=reference=${SERVER_NAME}'*'|grep -v grep | awk '{print $3}'`

#删除镜像
docker rmi -f ${DOCKER_IMAGES}
TIME=`date "+%Y%m%d%H%M"`
IMAGE_NAME=xxljob-service:${TIME}
docker build -t ${IMAGE_NAME} .
echo ${IMAGE_NAME} > './image_name'

#harbor项目地址
HARBOR_ADDRESS=ip:port/xxljob/

#项目地址
SERVER_ADDRESS="${HARBOR_ADDRESS}${IMAGE_NAME}"

#新镜像打标签
docker tag ${IMAGE_NAME} ${SERVER_ADDRESS}

#上传到harbor
docker push ${SERVER_ADDRESS}

1.3 jar包上上传

使用ftp上传服务jar包,执行 sh run.sh,生成镜像版本

1.4 kuboard创建----配置信息

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

后期修改jar包版本的话,重新上传jar包,执行 sh run.sh生成新的镜像版本号即可,去Kuboard点击调整镜像版本即可。
在这里插入图片描述

2 踩坑问题记录

2.1 日志抛出异常

按照正常的容器部署之后,我们会发现真正去执行调度的时候它会报以下异常:
在这里插入图片描述

2.2 原因分析

原因:大概率是由于你的容器内部端口不通导致,很可能初始创建服务的时候只映射了服务端口,然后去执行调度或查看日志的时候回调xxl-job注册地址端口拒绝连接。

2.3 过程分析及解决

首先,我们看一下服务端执行配置文件,只有一个服务端口,没有什么大问题,这个不用过多解释,给大家贴上地址有兴趣可以慢慢去看一下(只贴了部分相关代码哈)

server:
  port: 7000
spring:
  application:
    name: xxl-job-admin

  ### xxl-job, email
  mail:
    # 设置邮箱主机
    host: smtp.qq.com
    port: 465
    # 设置用户名
    username: 496875002@qq.com
    from: ${spring.mail.username}
    # 你的授权码(126163 以及 qq 邮箱 都需要授权码登录,没有授权码的直接登录网页版邮箱设置里设置)
    # 设置密码,该处的密码是QQ邮箱开启SMTP的授权码而非QQ密码
    password: jbfdcozgimsubibb
    properties:
      mail:
        smtp:
          # 设置是否需要认证,如果为true,那么用户名和密码就必须的,
          # 如果设置false,可以不设置用户名和密码,当然也得看你的对接的平台是否支持无密码进行访问的。
          auth: true
          starttls:
            # STARTTLS[1]  是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLSSSL),而不是另外使用一个端口作加密通信。
            enable: true
            required: true
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory
          # QQ邮箱必须加此注解
          ssl:
            enable: true

### xxl-job, access token
xxl:
  job:
    accessToken:
    ### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
    i18n: zh_CN
    ## xxl-job, triggerpool max size
    triggerpool:
      fast:
        max: 200
      slow:
        max: 100
    ### xxl-job, log retention days
    logretentiondays: 30
    logpath: /data/applogs/xxljob/jobhandler

重点看一下客户端配置文件核心配置(只贴了核心部分哈)

server:
  port: 9095

xxl:
  job:
    admin:
      # 这里xjadmin是走的网关(可以忽略我的换成自己的配置)  如果没有网关的话,
      # 直接http://ip:xxljob服务端口/xxljob服务端名称  上面展示的服务端口是7000,下面就用7000哈
      addresses: http://ip:7000/xjadmin  
    # xxl-job, access token
    accessToken:
    executor:
      # xxl-job executor appname
      # 启动之后查看任务调度中心页面 --》执行器管理 --》查看是否存在xxl-job-executor-sat-client执行器,如果不存在手动添加 --》 appname与xxl-job-executor-sat-client相同,注册方式为手动注入,添加机器地址 --》添加成功保存后,查看是否存在 --》可以进行再次编辑,保存后查看onLine地址是否有值,确认端口是否正确
      appname: processManage
      # xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is nullhttp://192.168.1.75:9528/
      address: http://ip:9995/
      # xxl-job executor server-info
      ip: ip
#       注册client端口,手动及自动创建端口都为此port
      port: 9995
      # xxl-job executor log-path
      logpath: logs/applogs/xxl-job/jobhandler
      #logpath: E://logs/applogs/xxl-job/jobhandler
      # xxl-job executor log-retention-days
      logretentiondays: 30

发现,客户端不仅仅是服务端口,还会有一个注册端口,看到这里,想必大家明白了,既然有两个端口,那么我们启动容器时是不是只映射了一个服务端口,当我们去真正调度的时候,会回调到注册端口,这个端口在容器内,是没有办法直接去映射到另一个容器的,所以你是不是忘了客户端的注册端口映射了,所以启动xxl-job客户端需要映射两个端口,可以直接去kuboard去添加一个端口(或者docker run -d -p 9095:9095 -p 9995:9995 ......),如下图:
在这里插入图片描述

2.4 执行调度测试

发现执行成功,查看日志也正常。
在这里插入图片描述
在这里插入图片描述

到此,问题就解决了。只针对于容器端口不通问题导致的,可能不够细心导致,就当重温一遍学习记录一下,希望大家多多指正!!!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
在将xxl-job部署Kubernetesk8s)时,有一些背景和目标需要注意。当你的Java服务部署K8S后,xxl-job任务调度器需要对注册上来的执行器进行健康检测,而执行器的注册地址是Pod的IP地址。因此,任务调度器需要能够访问执行器的网络,这意味着xxl-job任务调度器和执行器必须在同一个网络下并且能够相互通信。 为了实现这个目标,你可以按照之前的devops系列文章中的详细部署步骤进行操作,并根据需要修改xxl-job的源码、编写Dockerfile、在Jenkins创建Job、编写argocd-helm-yaml、在argocd创建Application,并创建xxl-job的数据库并执行相应的脚本。 在具体部署过程中,你需要注意一些细节。例如,你可以部署多个xxl-job的Pod节点以支持集群模式,并使用Service地址对外提供服务,可以选择NodePort或LoadBalancer方式。此外,你还可以替代官方推荐的集群模式,不再需要使用Nginx等组件来代理多个xxl-job任务调度器。最后,确保在K8S内部的Java服务能够正常地使用处于同一网络下的xxl-job来执行任务调度。 另外,部署过程中还可以执行一些其他操作,比如部署xxl-job-read-log服务,并在配置文件中设置xxl.job.read.log.path参数以指定执行日志的统一路径。同时,配置流量转发将/xxl-job-admin/joblog/logDetailCat请求转发到xxl-job-read-log服务,以实现随时查看执行日志的功能。 总之,在将xxl-job部署k8s时,需要确保任务调度器和执行器在同一网络下,并能够相互通信。你可以按照上述步骤进行部署,并根据需要进行相应的配置和调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [k8s部署xxl-job分布式任务调度服务](https://blog.csdn.net/zhuganlai168/article/details/132054392)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [解决k8sxxl-job执行器pod重建后无法读取到执行日志的问题](https://download.csdn.net/download/iam098/88250428)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清淡的粥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值