首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes Jenkins插件-奴隶总是离线

Kubernetes Jenkins插件-奴隶总是离线
EN

Stack Overflow用户
提问于 2016-07-20 17:15:34
回答 7查看 14.2K关注 0票数 10

我试着用Jenkins/Kubernetes插件和Jenkins一起安排码头奴隶。

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

我的问题是,所有的奴隶都是脱机的,所以作业无法执行:

我已经在我的本地机顶盒上尝试过这一点,使用minikube,以及在一个由我们的操作系统组托管的K8集群上。我试过詹金斯1.9和詹金斯2,我总是得到同样的结果。截图来自Jenkins 1.642.4,K8 v1.2.0

这是我的配置。请注意,当我单击“测试连接”时,我会获得成功。另外,请注意,我不需要任何凭据(这是我所能看到的与文档示例的唯一区别)。

Jenkins日志一遍又一遍地显示了以下内容:

代码语言:javascript
复制
    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时,我看到了以下内容:

代码语言:javascript
复制
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

有什么想法吗?

更新: csanchez建议的更多日志信息

代码语言:javascript
复制
 ➜  docker git:(master) ✗ kubectl get pods --namespace default -o wide
NAME                   READY     STATUS    RESTARTS   AGE       NODE
docker-6bb647254a2a4   1/1       Running   0          1m        96.x.x.159

➜  docker git:(master) ✗ kubectl log docker-6bafbac10b392

    Jul 20, 2016 6:45:10 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Connecting to 96.x.x.159: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端口是干什么用的?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-07-20 19:13:12

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

票数 2
EN

Stack Overflow用户

发布于 2018-01-16 21:12:37

在Kubernetes中运行jenkins时,服务名称可以由jenkins主和奴隶解析。

配置它的最佳方法是使用内部DNS并将jenkins url设置为:

代码语言:javascript
复制
http://jenkins:8080

(假设您调用了您的服务jenkins,并且您的服务端口为8080)

不需要隧道。

这种方法的好处是,它可以在不重新配置的情况下重新启动jenkins。

第二个好处是,您不必将Jenkins暴露给外部世界,从而限制安全风险。

票数 4
EN

Stack Overflow用户

发布于 2017-09-27 15:55:43

我只想为新手提供更多的解释。

在公开jenkins的同时,您还需要公开内部端口50000,这里是一个用于jenkins部署的简单服务:

代码语言:javascript
复制
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的外部访问,上面的配置中使用了nodePort。我将端口8080公开给nodePort 30000 (jenkins现在可在node_ip:30000上使用),并将pod端口50000公开给nodeport 30010。

在创建svc之后:

代码语言:javascript
复制
$ 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_ip:30010添加为Jenkins Tunnel

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38486848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档