• 容器化部署(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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    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
    
    • 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

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

    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
    
    
    • 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

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

    2.4 执行调度测试

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

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

  • 相关阅读:
    MongoDB 排序超过内存限制的问题
    【微机接口】中断系统:PC系列机中的中断系统
    mysql数据库进阶
    【MAPBOX基础功能】22、mapbox根据指定中心点绘制指定公里数的矩形
    FastReport .NET 2023.3.10 Crack
    y82.第四章 Prometheus大厂监控体系及实战 -- 监控扩展和prometheus 联邦(十三)
    求和——快速幂
    智汀家庭云究竟有什么魔力?实现跨品牌联动
    Educoder Spring 初体验
    Flink 运行架构和核心概念
  • 原文地址:https://blog.csdn.net/fy512/article/details/127860231