【问题标题】:Connection dropped for Jenkins slave on KubernetesKubernetes 上 Jenkins 从站的连接断开
【发布时间】:2017-06-26 18:28:14
【问题描述】:

在 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)

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我使用了Docker image: jenkinsci/jnlp-slave:alpine(包括因为它在图像中被截断了)
    • 谢谢@checketts!这是我使用的图像:gcr.io/cloud-solutions-images/jenkins-k8s-slave
    【解决方案2】:

    正如@Alex 提到的,问题在于容器的名称。必须是 jnlp 否则会出现以下错误。

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

    最初,我将容器命名为 prod-slave,这导致它在从属 pod 中创建了两个容器。附加容器被命名为jnlp。当我将容器模板中的容器名称重命名为 jnlp 时,一切都与从属 pod 中的一个容器完美运行。

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

    【讨论】:

      【解决方案3】:

      我也面临与@Alex@Shinto 相同的问题

      我将容器名称用作带有 docker 映像 jenkins/jnlp-slave:latest 的 slave-agent,它开始创建两个容器时出现错误

      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 时。它按预期工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-08
        • 1970-01-01
        • 2017-06-01
        • 1970-01-01
        • 2019-05-21
        • 1970-01-01
        • 2021-04-15
        • 2019-03-16
        相关资源
        最近更新 更多