腾讯云弹性容器集群eks搭建jenkins动态agent遇到的问题

首先我们需要在agent pod中完成编译,构建镜像,推送镜像,kubectl触发更新。显然我们需要把需要的工具打包成容器镜像,基础镜像为了方便选择了centos7的镜像。
在构建jenkins-agent 镜像时却遇到了几个问题。

镜像中可以使用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

在我尝试启动docker服务的时候却报错了
但是问题来了:Failed to get D-Bus connection: Operation not permitted

这个问题从字面意思是:无法获取D总线连接:不允许操作
于是去网上查


image.png

那就给他权限执行一下

[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.

这时候我的心是崩溃的。后面询问大佬才知道,容器里不能虚拟容器了,这里违背常理的


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

这样问题确实解决了,但新的问题又出现了。

我们的k8s集群使用的时腾讯云的弹性集群,没有docker.sock文件可以挂载呀,这怎么办?

解决方案一

我在想docker有没有api之类的,本机开通api,让其他机器调用
查看官网得知,docker确实是有Remote API,但是默认没有打开
编辑vim /usr/lib/systemd/system/docker.service
在ExecStart=/usr/bin/dockerd 后增加-H=tcp://0.0.0.0:2375
增加后:

image.png

重启服务

sudo systemctl daemon-reload
sudo service docker restart

检查端口

image.png

如何使用:

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

进入容器测试:

 docker -H 10.2.0.3:2375 ps

解决方案二

当我把这个问题告诉了我之前一起学习的同学,他一下子就想到了解决方案。什么docker on docker ,docker in docker. 一些我没听过的东西。最后他告诉我是有现成的开源工具不需要依赖docker 守护镜像就可以完成镜像构建的.在cicd这块完全可以代替docker 完成 pull,push,build等操作。

工具如下

GitHub - genuinetools/img:独立、无守护进程、非特权 Dockerfile 和 OCI 兼容容器映像生成器。

在Release这里可以下载到最新的包


image.png

可以通过介绍中的命令一键安装到你的系统中


image.png

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

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

修改tag

./img-linux-amd64 tag nginx:latest nginx:v1
image.png

你可能感兴趣的:(腾讯云弹性容器集群eks搭建jenkins动态agent遇到的问题)