[英]How to run Jenkins with Docker on Kubernetes?
我正在嘗試在 Kubernetes 上執行 Jenkins 和 Docker CLI 容器。 這是我的步驟:
我使用以下方法創建 pod:
kubectl --kubeconfig my-kubeconfig.yml run my-jenkins-pod --image=trion/jenkins-docker-client --restart=Never
它基於圖像https://hub.docker.com/r/trion/jenkins-docker-client創建一個 pod
我使用以下方法創建部署:
kubectl --kubeconfig my-kubeconfig.yml apply -f /kub/kube
/kub/kube
包含我已配置為jenkins-deployment-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:
返回:
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.war webroot:EnvVars.masterEnvVars.get("JENKINS_HOME") 2021-04-03 11:15:42.899+0000 [id=1] INFO org.eclipse.jetty.util .log.Log#initialized:記錄已初始化@274ms 到 org.eclipse.jetty.util.log.JavaUtilLog 2021-04-03 11:15:43.012+0000 [id=1] INFO winstone.Logger#logInternal:開始提取戰爭文件 2021-04-03 11:15:44.369+0000 [id=1] 警告 oejshandler.ContextHandler#setContextPath: Empty contextPath 2021-04-03 11:15:44.416+0000 [id=1] INFO org.Z6B7B655DD22FAA3F10677C512493A8A jetty.server.Server#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] INFO oejwStandardDescriptorProcessor#visitServlet: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet 2021-04- 03 11:15:44.695+0000 [id=1] 信息 oejssDefaultSessionIdManager#doStart: DefaultSessionIdManager workerName=node0 2021-04-03 11:15:44.695+0000 [id=1] 信息 oejssDefaultSessionIdManager#doStart: 沒有設置 SessionScavenger,使用默認值2021-04-03 11:15:44.696+0000 [id=1] INFO oejserver.session.HouseKeeper#startScavenging: node0 每 660000ms 清理一次 2021-04-03 11:15:45.081+ WebAppMain#contextInitialized:Jenkins 主目錄:/var/jenkins_home 位於:EnvVars.masterEnvVars.get("JENKINS_HOME") 2021-04-03 11:15:45.203+0000 [id=1] INFO oejshandler.ContextHandler#doStart: w.@24f43aa3{Jenkins v2.286,/,fi le:///var/jenkins_home/war/,AVAILABLE}{/var/jenkins_home/war} 2021-04-03 11:15:45.241+0000 [id=1] INFO oejserver.AbstractConnector#doStart: 已啟動 ServerConnector@4f0f2942 {HTTP/1.1, (http/1.1)}{0.0.0.0:8080} 2021-04-03 11:15:45.241+0000 [id=1] INFO org.eclipse.jetty.server.Server#doStart: 開始@ 2616 毫秒 2021-04-03 11:15:45.245+0000 [id=21] INFO winstone.Logger#logInternal: Winstone Servlet 引擎正在運行:controlPort=disabled 2021-04-03 11:15:46.479+0000 [id=26] INFO jenkins.InitReactorRunner$1#onAttained: Started initialization 2021-04-03 11:15:46.507+0000 [id=26] INFO jenkins.InitReactorRunner$1#onAttained: Listed all plugins 2021-04-03 11:15:47.654+0000 [id=27] INFO jenkins.InitReactorRunner$1#onAttained: Prepared all plugins 2021-04-03 11:15:47.660+0000 [id=26] INFO jenkins.InitReactorRunner$1#onAttained: Started all plugins 2021-04-03 11 :15:47.68 0+0000 [id=27] INFO jenkins.InitReactorRunner$1#onAttained: Augmented all extensions 2021-04-03 11:15:48.620+0000 [id=26] INFO jenkins.InitReactorRunner$1#onAttained: System config loaded 2021-04 -03 11:15:48.621+0000 [id=26] INFO jenkins.InitReactorRunner$1#onAttained: System config adapted 2021-04-03 11:15:48.621+0000 [id=27] INFO jenkins.InitReactorRunner$1#onAttained:已加載所有作業 2021-04-03 11:15:48.622+0000 [id=27] INFO jenkins.InitReactorRunner$1#onAttained:所有作業的配置已更新 2021-04-03 11:15:48.704+0000 [id=40] INFO hudson.model.AsyncPeriodicWork#lambda$doRun$0: 開始下載元數據 2021-04-03 11:15:48.722+0000 [id=40] INFO hudson.util.Retrier#start: 嘗試 #1 進行操作檢查更新服務器 2021-04-03 11:15:49.340+0000 [id=26] 信息 jenkins.install.SetupWizard #在里面:
****************************************************** *********** Jenkins 需要初始設置。 已創建管理員用戶並生成密碼。 請使用以下密碼繼續安裝:ab5dbf74145c405fb5a33456d4b97436 這也可以在以下位置找到:/var/jenkins_home/secrets/initialAdminPassword
****************************************************** *********** 2021-04-03 11:16:08.107+0000 [id=27] INFO jenkins.InitReactorRunner$1#onAttained:完成初始化 2021-04-03 11:16:08.115+0000 [id=20] INFO hudson.WebAppMain$3#run: Jenkins 完全啟動並運行 2021-04-03 11:16:08.331+0000 [id=40] INFO hmDownloadService$Downloadable#load: 獲取 hudson 的更新數據文件.tasks.Maven.MavenInstaller 2021-04-03 11:16:08.332+0000 [id=40] INFO hudson.util.Retrier#start:在嘗試 #1 2021-04-03 11 時成功執行了操作檢查更新服務器:16:08.334+0000 [id=40] INFO hudson.model.AsyncPeriodicWork#lambda$doRun$0: 完成下載元數據。 19,626 毫秒
Jenkins 服務器是否在 8080 端口啟動? 由於此日志消息:
11:15:45.241+0000 [id=1] INFO oejserver.AbstractConnector#doStart: 已啟動 ServerConnector@4f0f2942{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} 2021-04-03
我嘗試將jenkins-deployment-yaml
更改為指向端口8080
而不是50000
,從而導致更新的jenkins-deployment-yaml
:
apiVersion: v1
kind: Service
metadata:
name: my-jenkins-pod
spec:
ports:
- protocol: "TCP"
port: 8080
但是當我嘗試訪問http://161.61.222.16:5001/時返回相同的錯誤
我的端口映射不正確嗎? 這是將 docker 集線器上可用的現有 docker 容器添加到 Kubernetes 集群的正確方法嗎?
更新:
命令kubectl describe services 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 拒絕連接。 嘗試:
檢查連接 檢查代理和防火牆 ERR_CONNECTION_REFUSED
嘗試通過瀏覽器訪問http://161.61.222.16:5001/返回:
此頁面不工作 161.61.222.16 沒有發送任何數據。 ERR_EMPTY_RESPONSE
似乎端口5001
已公開/可訪問,但未發送任何數據。
我還嘗試在端口5001
和30878
上訪問10.214.12.12
,但兩個請求都超時。
您需要從運行容器的主機外部使用http://161.61.222.16:30878/ 。 端口 5001 只能在集群內部使用內部 IP 訪問(在您的情況下為 9.5.52.28)。 每當您公開您的部署時,會自動(也可以手動定義)其中一個 NodePort(默認情況下在 30000 - 32767 之間)分配給服務以進行外部請求。
有關服務詳細信息,您需要運行以下命令。 命令 output 將為您提供 NodePort 和其他詳細信息。
kubectl describe services my-service
請查看相關 kubernetes 文檔
此外,據我在日志中看到的,您還使用端口 5001 配置了服務,但 Jenkins 使用 8080。 嘗試將目標服務端口從 5001 更改為 8080
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.