我正在尝试使用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插件配置:
因此,您可以看到连接成功,并且Pod正在生成。
有人知道为什么它保持离线状态吗? TIA。
答案 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)
我知道这则旧帖子,但添加了一些未提及的提示。
一些希望对您有所帮助的确认点
注释:您可以重建图像,但必须保持 ENTRYPOINT 行与 ENTRYPOINT ["jenkins-slave"]