代码之家  ›  专栏  ›  技术社区  ›  Pensu

Kubernetes-Jenkins的奴隶下线了

  •  0
  • Pensu  · 技术社区  · 6 年前

    我想和库伯内特斯一起管理詹金斯。我能够使用jenkins kubernetes插件成功地连接到kubernetes。现在,我正在运行一个管道示例,但是在运行时,我总是收到一个错误消息:

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

    它就挂在那里。如果我用 kubectl get pods default-amd64-cm2rx 正在运行,然后状态更改为已完成,然后它就消失了。然后是另一个名字相似的吊舱,开始和结束,循环继续。这些豆荚的最后一种状态是:

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

    如果我检查jenkins日志,我会得到一个错误:

    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

    如你所见,连接是成功的。

    知道为什么它保持离线状态吗?蒂娅。

    0 回复  |  直到 6 年前
        1
  •  1
  •   user9105725 user9105725    6 年前

    jnlp可能试图为slave和Kubernetes使用相同的端口,因为看起来您的pod正在终止,而您正在从机上运行此作业。将jnlp设置为使用随机端口,这样就可以保证没有冲突。

    在詹金斯,它的安全配置不足。

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

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

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

    Random:JNLP端口是随机选择的,以避免在Jenkins主机上发生冲突。随机JNLP端口的缺点是它们是在Jenkins主机引导期间选择的,这使得管理允许JNLP流量的防火墙规则变得困难。

    修正:JNLP端口是由Jenkins管理员选择的,并且在Jenkins主机重新引导时是一致的。这使得管理防火墙规则更加容易,允许基于JNLP的代理连接到主服务器。

        2
  •  0
  •   colynn liu    4 年前

    我希望能对你有所帮助

    1. Jenkins slave agent jnlp-agent 推荐詹金斯入境代理。

    笔记 :您可以重建图像,但必须保留 入口点 ENTRYPOINT ["jenkins-slave"]

    1. 你应该把空的放在里面” 要运行的命令 传递给命令的参数 容器模板