Kubernetes Jenkins插件 – 奴隶总是离线

我试图使用Jenkins / Kubernetes插件与Jenkins协调Docker Slaves。

我正在使用这个插件: https : //github.com/jenkinsci/kubernetes-plugin

我的问题是,所有的奴隶离线,所以作业无法执行:

从属状态

在这里输入图像说明

我已经在我的本地盒子上使用minikube,以及由我们的ops组托pipe的K8集群上尝试了这一点。 我已经尝试了jenkins1.9和jenkins2.我总是得到相同的结果。 屏幕截图来自Jenkins 1.642.4,K8 v1.2.0

这里是我的configuration…请注意,当我点击“testing连接”我成功了。 另外请注意,我不需要任何凭据(这是唯一的区别,我可以看到与logging的例子)。

詹金斯系统配置

jenkins日志反复显示以下内容:

Waiting for slave to connect (11/100): docker-6b55f1b7fafce Jul 20, 2016 5:01:06 PM INFO org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud$ProvisioningCallback call Waiting for slave to connect (12/100): docker-6b55f1b7fafce Jul 20, 2016 5:01:07 PM INFO org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud$ProvisioningCallback call Waiting for slave to connect (13/100): docker-6b55f1b7fafce Jul 20, 2016 5:01:08 PM INFO org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud$ProvisioningCallback call 

当我运行kubectl get events我看到:

 24s 24s 1 docker-6b3c2ff27dad3 Pod Normal Scheduled {default-scheduler } Successfully assigned docker-6b3c2ff27dad3 to 96.xxx.xx.159 24s 23s 2 docker-6b3c2ff27dad3 Pod Warning MissingClusterDNS {kubelet 96.xxx.xx.159} kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy. 23s 23s 1 docker-6b3c2ff27dad3 Pod spec.containers{slave} Normal Pulled {kubelet 96.xxx.xx.159} Container image "jenkinsci/jnlp-slave" already present on machine 23s 23s 1 docker-6b3c2ff27dad3 Pod spec.containers{slave} Normal Created {kubelet 96.xxx.xx.159} Created container with docker id 82fcf1bd0328 23s 23s 1 docker-6b3c2ff27dad3 Pod spec.containers{slave} Normal Started {kubelet 96.xxx.xx.159} Started container with docker id 82fcf1bd0328 

有任何想法吗?

更新:由csanchezbuild议更多的日志信息

  ➜ docker git:(master) ✗ kubectl get pods --namespace default -o wide NAME READY STATUS RESTARTS AGE NODE docker-6bb647254a2a4 1/1 Running 0 1m 96.xx159 ➜ docker git:(master) ✗ kubectl log docker-6bafbac10b392 Jul 20, 2016 6:45:10 PM hudson.remoting.jnlp.Main$CuiListener status INFO: Connecting to 96.xx159:50000 (retrying:10) java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 

我将不得不看看这个端口50000用于?

您需要公开端口8080和50000,如插件示例中所述configurationhttps://github.com/jenkinsci/kubernetes-plugin/blob/master/src/main/kubernetes/jenkins.yml

我只是想为上述的答案添加更多的解释给新手。

在暴露jenkins UI的同时,还需要公开内部端口50000这是一个jenkins部署的简单服务:

 apiVersion: v1 kind: Service metadata: name: jenkins namespace: jenkins spec: type: NodePort ports: - port: 8080 name: "http" nodePort: 30000 targetPort: 8080 - port: 50000 name: "slave" nodePort: 30010 targetPort: 50000 selector: app: jenkins 

对于Jenkins UI的外部访问,在上面的configuration中正在使用nodePort 。 我正在将端口8080暴露给nodePort 30000(jenkins UI现在将在node_ip:30000处可用)并将pod端口50000暴露给nodeport 30010。

一旦svc被创build:

 $ kubectl get svc -n jenkins NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE jenkins 10.233.5.94 <nodes> 8080:30000/TCP,50000:30010/TCP 23m 

现在添加Jenkins Tunnel jenkins_ip:30010

感谢@csanchez我有解决scheme。

在这里输入图像说明

问题是我在k8上运行jenkins服务器,我没有在k8中指定一个固定的端口(我让k8select端口)。 所以改变jenkins隧道的configuration解决了它。

更好的解决scheme是按照build议固定端口,然后进行更改。