对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)
答案 0 :(得分:4)
通过将从属容器名称更改为jnlp而不是默认值来解决最后一个错误(请参阅图像)。谷歌文档显示该名称应该是默认的,但似乎这些更新,这不是让这个系统工作的正确方法。
看起来更新的kubernetes-plugin创建了两个容器(一个容器包含指定的图像,另一个包含默认的jnlp图像)。如果您的图像名称不是jnlp,则插件将在从属pod中运行两个容器...这似乎导致了连接问题。
答案 1 :(得分:1)
正如 @Alex 提到的,问题是容器的名称。它必须是 jnlp
否则您会收到以下错误。
java.lang.IllegalStateException: Pod has terminated containers: jenkins/jnlp-42t0n (prod-slave)
最初我将容器命名为 prod-slave
,这使其在从属 Pod 中创建了两个容器。附加容器名为 jnlp
。当我将容器模板中的容器名称重命名为 jnlp
时,一切正常,从属 Pod 中只有一个容器。
虽然在我看来很奇怪容器的命名可能会影响从站的行为!
答案 2 :(得分:1)
我使用容器名称作为带有 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 时。它按预期工作。