master-slaves
Master-Slaves(agent)模式
上面演示的任务,默认都是在master节点执行的,多个任务都在master节点执行,对master节点的性能会造成一定影响,如何将任务分散到不同的节点,做成多slave的方式?
-
添加slave节点
- 系统管理 -> 节点管理 -> 新建节点
- 比如添加172.21.65.227,选择固定节点,保存
- 远程工作目录/opt/jenkins_jobs
- 标签为任务选择节点的依据,如172.21.65.227
- 启动方式选择通过java web启动代理,代理是运行jar包,通过JNLP(是一种允许客户端启动托管在远程Web服务器上的应用程序的协议 )启动连接到master节点服务中
- 高级设置 -> Tunnel 连接位置 :
Jenkins service cluster-ip:50000
-
执行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连接位置,参考下图进行设置:
-
查看Jenkins节点列表,新节点已经处于可用状态
-
测试使用新节点执行任务
-
配置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
...
-