在Kubernetes上为Jenkins奴隶连接掉了

时间:2017-02-08 22:36:42

标签: jenkins kubernetes google-cloud-platform google-kubernetes-engine

对Google Container Engine上的Kubernetes 1.5.2进行了更新。 然后开始出现以下错误:

Failed to count the # of live instances on Kubernetes

要解决此问题,我将Jenkins(至2.32.2)和Kubernetes插件(至0.10)升级至最新版本。

之后,我开始收到以下错误:

Feb 08, 2017 9:51:52 PM hudson.TcpSlaveAgentListener$ConnectionHandler run
WARNING: Connection #5 failed
java.io.EOFException
    at java.io.DataInputStream.readFully(DataInputStream.java:197)
    at java.io.DataInputStream.readFully(DataInputStream.java:169)
    at hudson.TcpSlaveAgentListener$ConnectionHandler.run(TcpSlaveAgentListener.java:213)

Feb 08, 2017 9:51:57 PM org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud$ProvisioningCallback call
SEVERE: Error in provisioning; slave=KubernetesSlave name: default-6126d6e4fb5, template=org.csanchez.jenkins.plugins.kubernetes.PodTemplate@47404ab7
java.lang.IllegalStateException: Containers are terminated with exit codes: {jnlp=255}
    at org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud$ProvisioningCallback.call(KubernetesCloud.java:600)
    at org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud$ProvisioningCallback.call(KubernetesCloud.java:532)
    at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

3 个答案:

答案 0 :(得分:4)

通过将从属容器名称更改为jnlp而不是默认值来解决最后一个错误(请参阅图像)。谷歌文档显示该名称应该是默认的,但似乎这些更新,这不是让这个系统工作的正确方法。

看起来更新的kubernetes-plugin创建了两个容器(一个容器包含指定的图像,另一个包含默认的jnlp图像)。如果您的图像名称不是jnlp,则插件将在从属pod中运行两个容器...这似乎导致了连接问题。

change kubernetes-plugin slave pod name to jnlp

答案 1 :(得分:1)

正如 @Alex 提到的,问题是容器的名称。它必须是 jnlp 否则您会收到以下错误。

java.lang.IllegalStateException: Pod has terminated containers: jenkins/jnlp-42t0n (prod-slave)

最初我将容器命名为 prod-slave,这使其在从属 Pod 中创建了两个容器。附加容器名为 jnlp。当我将容器模板中的容器名称重命名为 jnlp 时,一切正常,从属 Pod 中只有一个容器。

虽然在我看来很奇怪容器的命名可能会影响从站的行为!

答案 2 :(得分:1)

我也遇到了与 @Alex@Shinto 相同的问题

我使用容器名称作为带有 docker 映像 jenkins/jnlp-slave:latest 的从代理,并且它开始创建两个容器时出错

Error in provisioning; agent=KubernetesSlave name: kube-xgmd5, template=PodTemplate{id='9af2eabc-971f-42d4-8710-549942d76cbe', name='kube', label='kubepod', podRetention='On Failure', containers=[ContainerTemplate{name='slave-agent', image='jenkins/jnlp-slave:latest', workingDir='/home/jenkins/agent', command='', args='', resourceRequestCpu='', resourceRequestMemory='', resourceRequestEphemeralStorage='', resourceLimitCpu='', resourceLimitMemory='', resourceLimitEphemeralStorage='', envVars=[KeyValueEnvVar [getValue()=http://192.168.29.123:8080/jenkins/, getKey()=jenkins]], livenessProbe=ContainerLivenessProbe{execArgs='', timeoutSeconds=0, initialDelaySeconds=0, failureThreshold=0, periodSeconds=0, successThreshold=0}}]}
**java.lang.IllegalStateException: Pod has terminated containers: default/kube-xgmd5 (slave-agent)**

当更新容器名称为 jnlp 时。它按预期工作。