jnlp kubernetes从属代理问题

问题描述

嗨,我一直在尝试调查jnlp k8s代理为何离线时挂起,并在Jenkins主服务器中看到以下错误

WARNING: Error in provisioning; agent=KubernetesSlave name: k8s-inbound-agent-36bxc,template=PodTemplate{id='53e3acbf-d96b-4ec7-bc87-de4e200d98e5'inheritFrom='',name='k8s-inbound-agent',namespace='jenkins',hostNetwork=false,instanceCap=40,idleMinutes=10,activeDeadlineseconds=120,label='k8s-agent',serviceAccount='jenkins',nodeselector='',nodeUsageMode=EXCLUSIVE,workspaceVolume=EmptyDirWorkspaceVolume [memory=false],volumes=[HostPathVolume [mountPath=/var/run/docker.sock,hostPath=/var/run/docker.sock],EmptyDirVolume [mountPath=/opt/jenkins,memory=false],EmptyDirVolume [mountPath=/home/jenkins/.ssh,HostPathVolume [mountPath=/tmp/jenkins-agent,hostPath=/tmp/jenkins-agent]],containers=[ContainerTemplate{name='inbound-agent',image='hmctspublic.azurecr.io/jenkins/build-agent:db6hu6',workingDir='/home/jenkins/agent',command='/tini --',args='/bin/sh -c cat',ttyEnabled=true,resourceRequestcpu='2000m',resourceRequestMemory='4Gi',resourceLimitcpu='4000m',resourceLimitMemory='12Gi',livenessProbe=org.csanchez.jenkins.plugins.kubernetes.ContainerLivenessProbe@5a6d394c},ContainerTemplate{name='jnlp',image='hmctspublic.azurecr.io/jenkins/minimal-agent:db6hu6',command='/bin/sh -c',args='cat',resourceRequestcpu='1000m',resourceRequestMemory='1Gi',resourceLimitcpu='2000m',resourceLimitMemory='6Gi',livenessProbe=org.csanchez.jenkins.plugins.kubernetes.ContainerLivenessProbe@7919636d}]}
java.lang.IllegalStateException: Pod has terminated containers: jenkins/k8s-inbound-agent-36bxc (jnlp)
    at org.csanchez.jenkins.plugins.kubernetes.AllContainersRunningPodWatcher.periodicAwait(AllContainersRunningPodWatcher.java:133)
    at org.csanchez.jenkins.plugins.kubernetes.AllContainersRunningPodWatcher.periodicAwait(AllContainersRunningPodWatcher.java:154)
    at org.csanchez.jenkins.plugins.kubernetes.AllContainersRunningPodWatcher.await(AllContainersRunningPodWatcher.java:94)
    at org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher.launch(KubernetesLauncher.java:156)
    at hudson.slaves.SlaveComputer.lambda$_connect$0(SlaveComputer.java:294)
    at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
    at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)

Nov 03,2020 2:22:00 PM org.csanchez.jenkins.plugins.kubernetes.KubernetesSlave _terminate
INFO: Terminating Kubernetes instance for agent k8s-inbound-agent-36bxc
Nov 03,2020 2:22:00 PM org.csanchez.jenkins.plugins.kubernetes.KubernetesSlave deleteSlavePod

是否有上述错误的任何原因?

解决方法

转到http://your_server/configureSecurity/,然后为random选择“ "Agents:TCP port for JNLP agents"”选项。这可能会有帮助。

jenkins JNLP tcp port docs

Jenkins可以使用TCP端口与入站通信(以前称为 作为“ JNLP”代理),例如基于Windows的代理。从Jenkins 2.0开始, 默认情况下,此端口是禁用的。

对于希望使用入站TCP代理的管理员,两个端口选项是:

1。。Random:随机选择TCP端口,以避免在Jenkins主服务器上发生冲突。随机端口的缺点在于,它们是在Jenkins控制器启动期间选择的,因此很难管理允许TCP流量的防火墙规则。

2。:已修复:该端口由Jenkins管理员选择,并且在Jenkins控制器重新启动后保持一致。这样可以更轻松地管理允许基于TCP的代理连接到控制器的防火墙规则。

从Jenkins 2.217开始,可以将入站代理配置为使用 WebSocket传输以连接到Jenkins。在这种情况下,无需额外的TCP 需要启用端口,并且不需要特殊的安全配置。

相关问题:

  1. Jenkins Kubernetes plugin failing to provision jnlp-slave pods

  2. Kubernetes - Jenkins slaves are offline