当前位置: 首页 > 知识库问答 >
问题:

如何在Kubernetes上与Docker一起管理Jenkins?

乜裕
2023-03-14

我正试图处决詹金斯

我创建的pod使用:

kubectl --kubeconfig my-kubeconfig.yml run my-jenkins-pod --image=trion/jenkins-docker-client --restart=Never

它根据图像创建一个podhttps://hub.docker.com/r/trion/jenkins-docker-client

我使用以下方法创建部署:

kubectl --kubeconfig my-kubeconfig.yml apply -f /kub/kube

/kub/kube包含jenkins部署yaml,我已将其配置为:

apiVersion: v1
kind: Service
metadata:
  name: my-jenkins-pod
spec:
  ports:
    - protocol: "TCP"
      port: 50000
      targetPort: 5001
  selector:
    app: my-jenkins-pod
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-jenkins-pod
spec:
  selector:
    matchLabels:
      app: my-jenkins-pod
  replicas: 1
  template:
    metadata:
      labels:
        app: my-jenkins-pod
    spec:
      containers:
        - name: ml-services
          image: trion/jenkins-docker-client
          ports:
            - containerPort: 5001

要访问Jenkins容器,我使用以下方式公开IP:

kubectl --kubeconfig my-kubeconfig.yml expose deployment my-jenkins-pod --type=LoadBalancer --name=my-jenkins-pod-public

要返回我使用的Jenkins和Docker映像的IP,请执行以下操作:

kubectl --kubeconfig my-kubeconfig.yml get services my-jenkins-pod-public

其中返回:

NAME                    TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)          AGE
my-jenkins-pod-public   LoadBalancer   9.5.52.28   161.61.222.16   5001:30878/TCP   10m

为了测试我打开URL在位置:

http://161.61.222.16:5001/

其中返回:

This page isn’t working
161.61.222.16 didn’t send any data.
ERR_EMPTY_RESPONSE

服务似乎已启动,但端口映射不正确?

pod my-jenkins-pod的日志包含:

运行于:/usr/share/jenkins/jenkins。warwebroot:EnvVars。大师。获取(“詹金斯之家”)2021-04-03 11:15:42.899 0000[id=1]信息组织。日食码头。util。日志Log#initialized:在274ms处将已初始化日志记录到组织。日食码头。util。日志JavaUtilLog 2021-04-03 11:15:43.0120000[id=1]信息温斯顿。Logger#LoginInternal:开始从war文件2021-04-03 11:15:44.369 0000[id=1]提取警告o.e.j.s.handler。ContextHandler#setContextPath:空contextPath 2021-04-03 11:15:44.416 0000[id=1]信息组织。日食码头。服务器服务器#doStart:jetty-9.4.39。v20210325;建成时间:2021-03-25T14:42:11.471Z;git:9fc7ca5a922f2a37b84ec9dbc26a5168cee7e667;jvm 1.8.0_282-b08 2021-04-03 11:15:44.653 0000[id=1]信息o.e.j.w.StandardDescriptorProcessor#visitServlet:不支持/的JSP,找不到组织。日食码头。jsp。JettyJspServlet 2021-04-03 11:15:44.695 0000[id=1]信息o.e.j.s.s.DefaultSessionIdManager#doStart:DefaultSessionIdManager workerName=node0 2021-04-03 11:15:44.695 0000[id=1]信息o.e.j.s.s.DefaultSessionIdManager#doStart:No SessionCavenger集合,使用默认值2021-04-03 11:15:44.696 0000[id=1]信息o.e.j。一场管家#开始清理:节点0每660000ms清理一次2021-04-03 11:15:45.0810000[id=1]信息哈德逊。WebAppMain#contextInitialized:Jenkins home directory:/var/Jenkins_home位于:EnvVars。大师。获取(“詹金斯之家”)2021-04-03 11:15:45.203 0000[id=1]信息o.e.j.s.handler。ContextHandler#doStart:start w.@24f43aa3{Jenkins v2.286,/,file:///var/jenkins_home/war/,可用{/var/jenkins_home/war}2021-04-03 11:15:45.2410000[id=1]信息o.e.j.server。AbstractConnector#doStart:已启动ServerConnector@4f0f2942{HTTP/1.1,(HTTP/1.1)}{0.0.0.0:8080}2021-04-03 11:15:45.2410000[id=1]信息组织。日食码头。服务器服务器#doStart:Started@261ms2021-04-03 11:15:45.2450000[id=21]INFO winstone。Logger#LoginInternal:Winstone Servlet引擎运行:controlPort=disabled 2021-04-03 11:15:46.479 0000[id=26]信息jenkins。InitReactorRunner$1#已获得:已开始初始化2021-04-03 11:15:46.507 0000[id=26]信息jenkins。InitReactorRunner$1#OnTained:列出了所有插件2021-04-03 11:15:47.654 0000[id=27]信息jenkins。InitReactorRunner$1#已获得:准备好所有插件2021-04-03 11:15:47.6600000[id=26]信息jenkins。InitReactorRunner$1#已获得:已启动所有插件2021-04-03 11:15:47.680 0000[id=27]信息jenkins。InitReactorRunner$1#已获得:增加了所有扩展2021-04-03 11:15:48.6200000[id=26]信息jenkins。InitReactorRunner$1#已获取:系统配置已加载2021-04-03 11:15:48.621 0000[id=26]信息jenkins。InitReactorRunner$1#已获得:系统配置已调整2021-04-03 11:15:48.621 0000[id=27]信息jenkins。InitReactorRunner$1#已获取:已加载所有作业2021-04-03 11:15:48.622 0000[id=27]信息jenkins。InitReactorRunner$1#已获得:所有作业的配置已更新2021-04-03 11:15:48.704 0000[id=40]INFO hudson。模型AsyncPeriodicWork#lambda$doRun$0:开始下载元数据2021-04-03 11:15:48.722 0000[id=40]信息hudson。util。检索器#开始:尝试#1执行操作检查更新服务器2021-04-03 11:15:49.3400000[id=26]信息jenkins。安装设置向导#初始化:

************************************************************* Jenkins初始设置是必需的。已创建管理员用户并生成密码。请使用以下密码继续安装:ab5dbf74145c405fb5a33456d4b97436也可以在以下网址找到: /var/jenkins_home/secrets/initialAdminPassword

*************************************************************2021-04-03 11:16:08.107 0000[id=27]詹金斯信息。初始化反应器运行程序$1#已完成:已完成初始化2021-04-03 11:16:08.115 0000[id=20]信息hudson。WebAppMain$3#运行:Jenkins已完全启动并运行2021-04-03 11:16:08.331 0000[id=40]INFO h.m.DownloadService$Downloadable#加载:已获得哈德逊的更新数据文件。任务。专家MavenInstaller 2021-04-03 11:16:08.3320000[id=40]哈德逊信息。util。检索器#启动:在尝试时成功执行了操作检查更新服务器#1 2021-04-03 11:16:08.334 0000[id=40]INFO hudson。模型AsyncPeriodicWork#lambda$doRun$0:已完成元数据下载。19626毫秒

Jenkins服务器是否在端口8080启动?由于此日志消息:

11:15:45.241 0000[id=1]信息o.e.j.服务器。AbstractConnector#doStart:已启动ServerConnector@4f0f2942{HTTP/1.1,(HTTP/1.1)}{0.0.0.0:8080}2021-04-03

我尝试将jenkins部署yaml更改为指向端口8080,而不是50000,结果更新了jenkins部署yaml

apiVersion: v1
kind: Service
metadata:
  name: my-jenkins-pod
spec:
  ports:
    - protocol: "TCP"
      port: 8080

但当我试图访问http://161.61.222.16:5001/时返回相同的错误

我的端口映射不正确吗?这是将docker中心上可用的现有docker容器添加到库伯内特斯集群的正确方法吗?

更新:

命令kubectl描述服务my-jenkins-pod-Public的结果是:

Name:                     my-jenkins-pod-public
Namespace:                default
Labels:                   <none>
Annotations:              kubernetes.digitalocean.com/load-balancer-id: d46ae9ae-6e8a-4fd8-aa58-43c08310059a
Selector:                 app=my-jenkins-pod
Type:                     LoadBalancer
IP Families:              <none>
IP:                       10.245.152.228
IPs:                      10.245.152.228
LoadBalancer Ingress:     161.61.222.16
Port:                     <unset>  5001/TCP
TargetPort:               5001/TCP
NodePort:                 <unset>  30878/TCP
Endpoints:                10.214.12.12:5001
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

试图通过浏览器访问http://161.61.222.16:30878/返回:

无法访问此站点159。65.211.46拒绝连接。尝试:

检查连接检查代理和防火墙错误\u连接被拒绝

试图访问http://161.61.222.16:5001/通过浏览器返回:

此页面无法工作161.61.222.16未发送任何数据。错误\u空\u响应

似乎端口5001是公开的/可访问的,但没有发送任何数据。

我还尝试在端口5001上访问10.214.12.12

共有1个答案

郭单鹗
2023-03-14

你需要使用http://161.61.222.16:30878/从运行容器的主机外部。端口5001仅可在集群内部通过内部IP访问(9.5.52.28在您的情况下)。无论何时公开部署,都会自动(也可以手动定义)将其中一个NodePort(默认值介于30000-32767之间)分配给服务以进行外部请求。

有关服务详细信息,您需要运行以下命令。命令输出将为您提供NodePort和其他详细信息。

kubectl describe services my-service

请检查相关kubernetes留档

此外,您还使用端口5001配置了服务,但据我在日志中看到的,Jenkins使用的是8080。尝试将服务的目标端口从5001更改为8080

 类似资料:
  • 我最近安装了privacy vpn,结果发现启用的openvpn会破坏Docker。 当我尝试运行时,我得到以下错误 禁用vpn可以解决这个问题(不过,我宁愿不禁用它)。有没有办法使这两者和平共处?我使用debian jessie,我的openvpn有以下版本字符串 null

  • 在我的活动中,我调用startActivityForResult主活动的第二个活动。在我的第二个活动中,有一些方法可以完成此活动(可能没有结果),但是,其中只有一个方法返回结果。 例如,在主活动中,我调用第二个活动。在本次活动中,我将检查手机的一些功能,例如它是否有摄像头。如果没有,我将关闭此活动。另外,在准备MediaRecorder或MediaPlayer的过程中,如果出现问题,我将关闭此活动

  • 在我的活动中,我通过调用主活动中的第二个活动。在我的第二个活动中,有一些方法完成这个活动(可能没有结果),然而,只有其中一个返回一个结果。 如果它的设备有一个摄像头并且录制完成了,那么在录制完视频之后,如果用户点击done按钮,那么我会将结果(录制视频的地址)发送回主活动。 如何检查主活动的结果?

  • 我花了几个小时调试我的系统,我不知道这里发生了什么。 我正在使用一个简单的文件,用于在我的Ubuntu 20.04 LTS系统上启动mariadb和adminer实例。 docker-compose.yml: 一位同事测试了这个,它100%的时间都在他们的系统上工作。然而,在过去的几个小时里,在我的系统中,它只运行了两次。 这是docker compose输出: 尝试使用root:root与管理员

  • 问题内容: 我是hibernate and spring的初学者。我已经了解了hibernate事务划分(至少我是这样认为的)。但是在编码了一些这样的方法之后: 我开始想避免它,并希望在我的方法之外自动完成它,因此我只写了“ //在这里做某事”部分。我已经阅读了TransactionProxyFactoryBean并认为xml配置非常长,必须对要进行事务处理的每个类都进行重复,因此,如果可能的话,

  • 问题内容: 我目前正在构建一个自定义docker映像以用于集成测试。我的要求是使用默认ingester管道和模板映射的自定义配置来设置它。 Dockerfile: 其中 config 是包含以下内容的目录: 设置脚本如下所示: 在Elastic启动并运行后,如何以执行脚本的方式构建和运行映像? 问题答案: 我通常要做的是包括一个像您这样的较暖的脚本,并在开始时添加以下几行。我在Docker中没有其