騰訊云彈性容器集群eks搭建jenkins動(dòng)態(tài)agent遇到的問(wèn)題

首先我們需要在agent pod中完成編譯,構(gòu)建鏡像,推送鏡像,kubectl觸發(fā)更新。顯然我們需要把需要的工具打包成容器鏡像,基礎(chǔ)鏡像為了方便選擇了centos7的鏡像。
在構(gòu)建jenkins-agent 鏡像時(shí)卻遇到了幾個(gè)問(wèn)題。

鏡像中可以使用docker 嗎?

[root@4e1e6d1c770d /]# docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@4e1e6d1c770d /]# systemctl start docker
Failed to get D-Bus connection: Operation not permitted

在我嘗試啟動(dòng)docker服務(wù)的時(shí)候卻報(bào)錯(cuò)了
但是問(wèn)題來(lái)了:Failed to get D-Bus connection: Operation not permitted

這個(gè)問(wèn)題從字面意思是:無(wú)法獲取D總線連接:不允許操作
于是去網(wǎng)上查


image.png

那就給他權(quán)限執(zhí)行一下

[root@base4 ~]# docker exec -it f2386757dccef bash
[root@f2386757dcce /]# docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@f2386757dcce /]# systemctl start docker
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

這時(shí)候我的心是崩潰的。后面詢問(wèn)大佬才知道,容器里不能虛擬容器了,這里違背常理的


image.png

那我就知道了

[root@base4 ~]# docker run -itd -v /var/run/docker.sock:/var/run/docker.sock    jenkins/build-tools 
jenkins/build-tools     jenkins/build-tools:v3  jenkins/build-tools:v5  jenkins/build-tools:v7
jenkins/build-tools:v1  jenkins/build-tools:v4  jenkins/build-tools:v6  
[root@base4 ~]# docker run -itd -v /var/run/docker.sock:/var/run/docker.sock    jenkins/build-tools:v
v1  v3  v4  v5  v6  v7  
[root@base4 ~]# docker run -itd -v /var/run/docker.sock:/var/run/docker.sock    jenkins/build-tools:v1 
ffbb25b7ab2941339b192aa36f406c35b790fc8c4ee48f97f989234909b17f7f
[root@base4 ~]# docker exec -it ffbb25b7ab29 bash
[root@ffbb25b7ab29 /]# docker ps
CONTAINER ID   IMAGE                                          COMMAND   CREATED          STATUS          PORTS     NAMES
ffbb25b7ab29   jenkins/build-tools:v1                         "bash"    12 seconds ago   Up 11 seconds             quizzical_euclid
f2386757dcce   jenkins/build-tools:v1                         "init"    6 minutes ago    Up 5 minutes              nervous_herschel
ba1461878116   centos                                         "init"    7 minutes ago    Up 7 minutes              eloquent_bassi

這樣問(wèn)題確實(shí)解決了,但新的問(wèn)題又出現(xiàn)了。

我們的k8s集群使用的時(shí)騰訊云的彈性集群,沒(méi)有docker.sock文件可以掛載呀,這怎么辦?

解決方案一

我在想docker有沒(méi)有api之類的,本機(jī)開(kāi)通api,讓其他機(jī)器調(diào)用
查看官網(wǎng)得知,docker確實(shí)是有Remote API,但是默認(rèn)沒(méi)有打開(kāi)
編輯vim /usr/lib/systemd/system/docker.service
在ExecStart=/usr/bin/dockerd 后增加-H=tcp://0.0.0.0:2375
增加后:

image.png

重啟服務(wù)

sudo systemctl daemon-reload
sudo service docker restart

檢查端口

image.png

如何使用:

 docker -H 10.2.0.3:2375 ps
-H 指定docker 的地址

進(jìn)入容器測(cè)試:

 docker -H 10.2.0.3:2375 ps

解決方案二

當(dāng)我把這個(gè)問(wèn)題告訴了我之前一起學(xué)習(xí)的同學(xué),他一下子就想到了解決方案。什么docker on docker ,docker in docker. 一些我沒(méi)聽(tīng)過(guò)的東西。最后他告訴我是有現(xiàn)成的開(kāi)源工具不需要依賴docker 守護(hù)鏡像就可以完成鏡像構(gòu)建的.在cicd這塊完全可以代替docker 完成 pull,push,build等操作。

工具如下

GitHub - genuinetools/img:獨(dú)立、無(wú)守護(hù)進(jìn)程、非特權(quán) Dockerfile 和 OCI 兼容容器映像生成器。

在Release這里可以下載到最新的包


image.png

可以通過(guò)介紹中的命令一鍵安裝到你的系統(tǒng)中


image.png

使用上完全兼容docker 的命令
拉取鏡像

./img-linux-amd64 pull nginx
image.png

修改tag

./img-linux-amd64 tag nginx:latest nginx:v1
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容