Kubernetes-Jenkins奴隶离线

时间:2019-03-09 09:04:19

标签: docker jenkins kubernetes jenkins-plugins

我正在尝试使用kubernetes运行詹金斯。我可以使用jenkins kubernetes插件成功连接到kubernetes。现在,我正在运行一个管道示例,但是在运行时,我总是会收到一条错误消息:

Still waiting to schedule task
‘default-amd64-cm2rx’ is offline

它挂在那里。如果我使用kubectl get pods检查Pod,则发现Pod default-amd64-cm2rx正在运行,然后状态更改为Completed,然后消失了。然后,另一个具有相同名称的窗格开始并结束,然后继续循环。这些吊舱的最后状态为:

Normal  Created    10s   kubelet, xx.xx.xx.xx  Created container
Normal  Started    10s   kubelet, xx.xx.xx.xx  Started container

如果我查看詹金斯日志,则会收到错误消息:

Mar 09, 2019 8:47:42 AM org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher launch
WARNING: Error in provisioning; agent=KubernetesSlave name: default-amd64-g5bgh, template=PodTemplate{inheritFrom='', name='default-amd64', namespace='', label='jenkins-latest-jenkins-slave-amd64', nodeSelector='beta.kubernetes.io/arch=amd64', nodeUsageMode=NORMAL, workspaceVolume=EmptyDirWorkspaceVolume [memory=false], volumes=[HostPathVolume [mountPath=/var/run/docker.sock, hostPath=/var/run/docker.sock]], containers=[ContainerTemplate{name='jnlp', image='myregistry;8500/jenkins-slave:latest', workingDir='/home/jenkins', command='/bin/sh -c', args='cat', resourceRequestCpu='200m', resourceRequestMemory='256Mi', resourceLimitCpu='200m', resourceLimitMemory='256Mi', livenessProbe=org.csanchez.jenkins.plugins.kubernetes.ContainerLivenessProbe@1e7ac0a6}], yaml=}
java.lang.IllegalStateException: Pod has terminated containers: default/default-amd64-g5bgh (jnlp)
    at org.csanchez.jenkins.plugins.kubernetes.AllContainersRunningPodWatcher.periodicAwait(AllContainersRunningPodWatcher.java:149)
    at org.csanchez.jenkins.plugins.kubernetes.AllContainersRunningPodWatcher.periodicAwait(AllContainersRunningPodWatcher.java:170)
    at org.csanchez.jenkins.plugins.kubernetes.AllContainersRunningPodWatcher.await(AllContainersRunningPodWatcher.java:122)
    at org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher.launch(KubernetesLauncher.java:121)
    at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:293)
    at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
    at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

这是我的kuebrnetes插件配置:

enter image description here

因此,您可以看到连接成功,并且Pod正在生成。

有人知道为什么它保持离线状态吗? TIA。

2 个答案:

答案 0 :(得分:1)

jnlp可能正在尝试对奴隶和Kubernetes使用相同的端口,因为看起来您的pod正在终止,并且您正在奴隶上运行此作业。将jnlp设置为使用随机端口,以确保不会发生冲突。

在Jenkins中,它位于“配置安全性”下。

来自Jenkins文档: https://jenkins.io/doc/book/managing/security/

JNLP TCP端口

Jenkins使用TCP端口与通过JNLP协议启动的代理(例如基于Windows的代理)进行通信。从Jenkins 2.0开始,默认情况下此端口为禁用状态。

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

随机:JNLP端口是随机选择的,以避免在Jenkins主服务器上发生冲突。随机JNLP端口的不利之处在于,它们是在Jenkins主服务器启动时选择的,因此很难管理允许JNLP流量的防火墙规则。

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

答案 1 :(得分:0)

我知道这则旧帖子,但添加了一些未提及的提示。

一些希望对您有所帮助的确认点

  1. 您应该具有正确的Jenkins从属代理docker映像,可以转到此处 Jenkins slave agent jnlp-agent获得推荐的詹金斯入站代理。

注释:您可以重建图像,但必须保持 ENTRYPOINT 行与 ENTRYPOINT ["jenkins-slave"]

完全相同
  1. 添加jenkins从属代理的容器模板时,应在“ 要运行的命令”和“要传递给命令的参数”中保持空白。