您好,登錄后才能下訂單哦!
這篇文章主要介紹在K8S上安裝Jenkins有哪些常見問題,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
最開始用的是jenkins:2.60.3-alpine(這個已經(jīng)是Jenkins鏡像的最高版本了),這個版本太低,在安裝插件時基本上都不成功,如下圖
后來換成jenkins:latest,這個應(yīng)該是最新的吧,結(jié)果 版本還是一樣的,只不過Linux不是Apline的。
后來終于明白了是鏡像錯了(而不是版本的問題),是要用Jenkinsci, 而不是Jenkins。我用了當(dāng)時排在第一位的jenkinsci/jenkins:2.150.1-slim,安裝之后,上面的插件錯誤全部消失了,真不容易。
但當(dāng)安裝Kubernetes Plugin插件時,提示需要 2.150.3(我的是2.150.1),這也太坑了。只好再次重裝,這次用的是jenkinsci/jenkins:2.154-slim,還好終于成功了。不過這個其實還是以前的鏡像,最新的在“jenkins/jenkins”。
錯誤信息如下:
Forbidden!Configured service account doesn't have access. Service account may have been revoked. User "system:serviceaccount:default:default" cannot get services in the namespace "default"
錯誤原因是沒有建立service account。解決辦法是先創(chuàng)建“service-account.yaml”文件,然后運行如下命令:
kubectl create clusterrolebinding service-reader-pod --clusterrole=service-reader --serviceaccount=default:default
再次運行,錯誤消失。
在Jenkins主頁面,進入Manage Jenkins-》System Log-》All Jenkins Logs, 錯誤信息如下。
SEVERE: http://192.168.50.4:30080/ provided port:50000 is not reachable java.io.IOException: http://192.168.50.4:30080/ provided port:50000 is not reachable at org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver.resolve(JnlpAgentEndpointResolver.java:303) at hudson.remoting.Engine.innerRun(Engine.java:527) at hudson.remoting.Engine.run(Engine.java:488)
這個錯誤主要是和Kubernetes-plugin配置有關(guān)。在Jenkins主頁面,進入Manage Jenkins-》Configure System》,在“http://192.168.50.4:30080/configure” 里有兩個“Jenkins URL”,不要弄混了。
第一個是“Jenkins Location”下的“Jenkins URL”, 它是宿主機訪問Jenkins的地址。
第二個是“Cloud”下的“Jenkins URL”, 它是從虛擬機訪問Jenkins的地址。
在上圖中,我開始時用的是“http://192.168.50.4:30080/” ,但這個是從宿主機訪問Jenkins的Url,不是從虛機內(nèi)部訪問的Url。
你可以用如下命令,找到Kubernetes的“Jenkins Url”
vagrant@ubuntu-xenial:~$ sudo minikube service k8sdemo-jenkins-service --url http://10.0.2.15:30080 http://10.0.2.15:32289
鍵入如下命令測試URL。
vagrant@ubuntu-xenial:~$ curl http://10.0.2.15:30080 Authentication required
這就說明URL是好的。
“Jenkins Url”改了之后,地址是對的,但還是不通。運行項目時,頁面顯示如下信息:
“Console Output”(在Jenkins->salve-test->#13中,其中#13是build #)顯示如下信息:
Running in Durability level: MAX_SURVIVABILITY [Pipeline] Start of Pipeline[Pipeline] podTemplate[Pipeline] {[Pipeline] node Still waiting to schedule task ‘testpod-d56038a0-45a2-41d1-922d-2879e3610900-0hr0m-sfv8s’ is offline
后來發(fā)現(xiàn)還有一個參數(shù)要填寫,就是“Jenkins tunnel”。如下圖所示。
填寫之后原來的信息沒有了,而且出現(xiàn)了“Agent discovery successful”,這個信息是原來沒有的。但又有新的錯誤。
可用如下方法查看系統(tǒng)日志,在Jenkins主頁面,選擇Manage Jenkins-》System Log-》All Jenkins Logs, 信息是這樣的:
INFO: Agent discovery successful Agent address: http://10.0.2.15 Agent port: 50000 Identity: 3e:1b:5f:48:f7:5b:f8:6d:ea:49:1d:b9:44:9a:2f:6c Oct 30, 2019 12:18:51 AM hudson.remoting.jnlp.Main$CuiListener status INFO: Handshaking Oct 30, 2019 12:18:51 AM hudson.remoting.jnlp.Main$CuiListener status INFO: Connecting to http://10.0.2.15:50000 Oct 30, 2019 12:18:51 AM hudson.remoting.jnlp.Main$CuiListener error SEVERE: null java.nio.channels.UnresolvedAddressException at sun.nio.ch.Net.checkAddress(Net.java:101) at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622) at java.nio.channels.SocketChannel.open(SocketChannel.java:189) at org.jenkinsci.remoting.engine.JnlpAgentEndpoint.open(JnlpAgentEndpoint.java:203) at hudson.remoting.Engine.connectTcp(Engine.java:678) at hudson.remoting.Engine.innerRun(Engine.java:556) at hudson.remoting.Engine.run(Engine.java:488)
它的原因是“JenkinsTunnel”的地址還是不對,可用如下方法找到“Jenkins tunnel”地址:
vagrant@ubuntu-xenial:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d15e30169568 f793ea0abe00 "/sbin/tini -- /usr/…" 15 minutes ago Up 15 minutes k8s_k8sdemo-jenkins-container_k8sdemo-jenkins-deployment-675dd574cb-2thn2_default_fb10e438-0231-4fd2-8dbd-d9e2f0bb9d09_0 vagrant@ubuntu-xenial:~$ docker inspect d15e |grep _8080 "K8SDEMO_JENKINS_SERVICE_PORT_8080_TCP_ADDR=10.100.3.79", "K8SDEMO_JENKINS_SERVICE_PORT_8080_TCP=tcp://10.100.3.79:8080", "K8SDEMO_JENKINS_SERVICE_PORT_8080_TCP_PROTO=tcp", "K8SDEMO_JENKINS_SERVICE_PORT_8080_TCP_PORT=8080",
根據(jù)上面信息,Jenkins容器地址是“tcp://10.100.3.79:8080”,把8080換成50000就可以了。最終結(jié)果是“10.100.3.79:50000”,注意不要添加“http”。
當(dāng)使用的鏡像文件是“k8sdemo-backend:latest”或“k8sdemo-backend:1.0”時,“Console Output”顯示錯誤如下:
Running in Durability level: MAX_SURVIVABILITY [Pipeline] Start of Pipeline[Pipeline] podTemplate[Pipeline] {[Pipeline] nodeStill waiting to schedule task All nodes of label ‘testpod-2971e0ce-e023-475f-b0ec-6118c5699188’ are offline Aborted by admin[Pipeline] // node [Pipeline] } [Pipeline] // podTemplate [Pipeline] End of Pipeline Finished: ABORTED
查看Pod, 錯誤是“ImagePullBackOff”:
vagrant@ubuntu-xenial:~$ kubectl get pod NAME READY STATUS RESTARTS AGE envar-demo 1/1 Running 15 28d k8sdemo-backend-deployment-6b99dc6b8c-tbl4v 1/1 Running 7 12d k8sdemo-database-deployment-578fc88c88-mm6x8 1/1 Running 9 17d k8sdemo-jenkins-deployment-675dd574cb-bt7rx 1/1 Running 2 2d testpod-2971e0ce-e023-475f-b0ec-6118c5699188-xwwqq-vv59p 2/3 ImagePullBackOff 0 38s
查看鏡像:
vagrant@ubuntu-xenial:~$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE jfeng45/k8sdemo-backend 1.0 f48d362fdebf 11 days ago 14.4MB k8sdemo-backend 1.0 f48d362fdebf 11 days ago 14.4MB k8sdemo-backend latest f48d362fdebf 11 days ago 14.4MB
這里一共有三個“k8sdemo-backend”鏡像,它們的“Image ID”都是一樣的,之所以有三個是因為我用如下命令創(chuàng)建了tag
docker tag k8sdemo-backend jfeng45/k8sdemo-backend:1.0
但創(chuàng)建了之后,就只有“jfeng45/k8sdemo-backend:1.0”(最晚創(chuàng)建的)能夠用在Jenkins的Pipeline腳本里,其他兩個都會報錯。修改了正確的鏡像文件之后就運行成功了。
當(dāng)用以下命令刪除pv時,命令遲遲不能返回。
kubectl delete pv k8sdemo-jenkins-pv
當(dāng)你查看時,狀態(tài)(status)顯示一直是“Terminating”,但總是不能結(jié)束退出。pvc也是一樣。
vagrant@ubuntu-xenial:~$ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE k8sdemo-backend-pv 1Gi RWO Retain Bound default/k8sdemo-backend-pvclaim standard 13d k8sdemo-database-pv 1Gi RWO Retain Bound default/k8sdemo-database-pvclaim standard 18d k8sdemo-jenkins-pv 1Gi RWO Retain Terminating default/k8sdemo-jenkins-pvclaim standard 6d8h
這個主要原因是用到它們的服務(wù)和部署還在運行,先把服務(wù)和部署刪除之后,pv和pvc的刪除操作就馬上結(jié)束,順利返回了。
完整源碼的github鏈接:https://github.com/jfeng45/k8sdemo/tree/0.1
注意,本文的程序在0.1(tag)下,這個程序的主分支以后還會修改。
下面是程序的目錄結(jié)構(gòu),黃色部分是與本文有關(guān)的配置文件。
以上是在K8S上安裝Jenkins有哪些常見問題的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。