跳到主要内容

master-slaves

Master-Slaves(agent)模式

上面演示的任务,默认都是在master节点执行的,多个任务都在master节点执行,对master节点的性能会造成一定影响,如何将任务分散到不同的节点,做成多slave的方式?

  1. 添加slave节点

    • 系统管理 -> 节点管理 -> 新建节点
    • 比如添加172.21.65.227,选择固定节点,保存
    • 远程工作目录/opt/jenkins_jobs
    • 标签为任务选择节点的依据,如172.21.65.227
    • 启动方式选择通过java web启动代理,代理是运行jar包,通过JNLP(是一种允许客户端启动托管在远程Web服务器上的应用程序的协议 )启动连接到master节点服务中
    • 高级设置 -> Tunnel 连接位置 : Jenkins service cluster-ip:50000

  2. 执行java命令启动agent服务

    ## 登录172.21.65.227,配置hosts文件
    172.21.65.226 k8s-master jenkins.luffy.com gitlab.luffy.com

    ## 安装jdk-11版本,由于新版本的Jenkins使用jdk11版本,因此构建节点也要安装jdk11
    $ yum install java-11-openjdk
    $ yum list installed |grep java
    java-11-openjdk.x86_64 1:11.0.17.0.8-2.el7_9 @updates
    java-11-openjdk-headless.x86_64 1:11.0.17.0.8-2.el7_9 @updates

    # 下载agent.jar
    $ wget http://jenkins.luffy.com/jnlpJars/agent.jar
    ## 如果没有配置高级设置-\> Tunnel 连接位置,会提示找不到agent错误,因为没有配置地址解析,由于连接jenkins master会通过50000端口,直接使用cluster-ip
    $ kubectl -n jenkins get svc jenkins
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    jenkins ClusterIP 10.111.75.177 `<none>` 8080/TCP,50000/TCP 2d22h

    ## 再次回到227节点
    $ java -jar agent.jar -jnlpUrl http://jenkins.luffy.com/manage/computer/172%2E21%2E65%2E227/jenkins-agent.jnlp -secret c59deb08b662dddb1a20f652785cc19d975974cf093732194467d1c7a4d61ac4 -workDir "/opt/jenkins_jobs"
    Dec 01, 2022 8:27:01 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
    INFO: Using /opt/jenkins_jobs/remoting as a remoting work directory
    Dec 01, 2022 8:27:01 PM org.jenkinsci.remoting.engine.WorkDirManager setupLogging
    INFO: Both error and output logs will be printed to /opt/jenkins_jobs/remoting
    Dec 01, 2022 8:27:01 PM hudson.remoting.jnlp.Main createEngine
    INFO: Setting up agent: 172.21.65.227
    Dec 01, 2022 8:27:01 PM hudson.remoting.Engine startEngine
    INFO: Using Remoting version: 3071.v7e9b_0dc08466
    Dec 01, 2022 8:27:01 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
    INFO: Using /opt/jenkins_jobs/remoting as a remoting work directory
    Dec 01, 2022 8:27:01 PM hudson.remoting.jnlp.Main$CuiListener status
    INFO: Locating server among [http://jenkins.luffy.com/]
    Dec 01, 2022 8:27:01 PM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
    INFO: Remoting server accepts the following protocols: [JNLP4-connect, Ping]
    Dec 01, 2022 8:27:01 PM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
    INFO: Remoting TCP connection tunneling is enabled. Skipping the TCP Agent Listener Port availability check
    Dec 01, 2022 8:27:01 PM hudson.remoting.jnlp.Main$CuiListener status
    INFO: Agent discovery successful
    Agent address: 10.111.75.177
    Agent port: 50000
    Identity: 80:b8:5e:e2:90:a0:e3:4b:a6:b6:e5:b5:47:2f:4e:63
    Dec 01, 2022 8:27:01 PM hudson.remoting.jnlp.Main$CuiListener status
    INFO: Handshaking
    Dec 01, 2022 8:27:01 PM hudson.remoting.jnlp.Main$CuiListener status
    INFO: Connecting to 10.111.75.177:50000
    Dec 01, 2022 8:27:01 PM hudson.remoting.jnlp.Main$CuiListener status
    INFO: Trying protocol: JNLP4-connect
    Dec 01, 2022 8:27:01 PM org.jenkinsci.remoting.protocol.impl.BIONetworkLayer$Reader run
    INFO: Waiting for ProtocolStack to start.
    Dec 01, 2022 8:27:02 PM hudson.remoting.jnlp.Main$CuiListener status
    INFO: Remote identity confirmed: 80:b8:5e:e2:90:a0:e3:4b:a6:b6:e5:b5:47:2f:4e:63
    Dec 01, 2022 8:27:02 PM hudson.remoting.jnlp.Main$CuiListener status
    INFO: Connected

    若出现如下错误:

    SEVERE: http://jenkins.luffy.com/ provided port:50000 is not reachable
    java.io.IOException: http://jenkins.luffy.com/ provided port:50000 is not reachable
    at org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver.resolve(JnlpAgentEndpointResolver.java:311)
    at hudson.remoting.Engine.innerRun(Engine.java:689)
    at hudson.remoting.Engine.run(Engine.java:514)

    可以选择: 配置从节点 -> 高级 -> Tunnel连接位置,参考下图进行设置:

  3. 查看Jenkins节点列表,新节点已经处于可用状态

  4. 测试使用新节点执行任务

    • 配置free项目

    • 限制项目的运行节点 ,标签表达式选择172.21.65.227

    • 立即构建

    • 查看构建日志

      Started by user admin
      Running as SYSTEM
      Building remotely on 172.21.65.227 in workspace /opt/jenkins_jobs/workspace/free-demo
      using credential gitlab-user
      Cloning the remote Git repository
      Cloning repository http://gitlab.luffy.com/root/myblog.git
      \> git init /opt/jenkins_jobs/workspace/free-demo # timeout=10
      ...