【发布时间】:2017-06-02 02:56:03
【问题描述】:
我想就以下问题向您寻求帮助/建议。我们使用 Bamboo 作为我们的 CI,并且我们在 k8s 上运行了远程竹代理。
在我们的构建中,我们有一个步骤可以在测试正确运行时创建 Docker 映像。对于远程竹代理,我们通过docker.socket 公开 Docker。当我们只有一个远程竹代理(以测试它是如何工作的)时,一切都正常工作,但最近我们增加了远程代理的数量。现在经常发生构建卡在 docker image build 步骤并且不会移动的情况。我们必须停止构建并再次运行它。通常在日志中没有有用的信息,但偶尔会出现。
2017 年 5 月 24 日 16:04:54 任务“:...”执行失败。
2017 年 5 月 24 日 16:04:54 > Docker 执行失败
2017 年 5 月 24 日 16:04:54 命令行 [docker build -t ...] 返回:
2017 年 5 月 24 日 16:04:54 time="2017-05-24T16:04:54+02:00" level=info msg="设备或资源忙"
这就是我们的k8s deployment 的样子:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: bamboo-agent
namespace: backend-ci
spec:
replicas: 5
template:
metadata:
labels:
app: bamboo-agent
spec:
containers:
- name: bamboo-agent
stdin: true
resources:
.
env:
.
.
.
ports:
- .
volumeMounts:
- name: dockersocket
mountPath: /var/run/docker.sock
volumes:
- hostPath:
path: /var/run/docker.sock
name: dockersocket
这里是Dockerfile,用于远程竹代理。
FROM java:8
ENV CI true
RUN apt-get update && apt-get install -yq curl && apt-get -yqq install docker.io && apt-get install tzdata -yq
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && mv kubectl /usr/local/bin
RUN echo $TZ | tee /etc/timezone
RUN dpkg-reconfigure --frontend noninteractive tzdata
RUN wget -O /usr/local/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64
RUN chmod +x /usr/local/bin/dumb-init
ADD run.sh /root
ADD .dockercfg /root
ADD config /root/.kube/
ADD config.json /root/.docker/
ADD gradle.properties /root/.gradle/
ADD bamboo-capabilities.properties /root
ENTRYPOINT ["/usr/local/bin/dumb-init", "--"]
CMD /root/run.sh
有什么办法可以解决这个问题吗?并且公开docker.socket 是一个好的解决方案还是有更好的方法?
我看过几篇关于Docker in docker的文章,但我不喜欢--privileged模式。
如果您需要其他信息,我会尽力提供。
谢谢。
【问题讨论】:
-
就我个人而言,我对外部工具干扰 k8s 节点的 docker 守护进程感到不安。所以我更喜欢任何需要 docker 守护进程在外部从属设备上运行的 CI 任务,这不是我的 k8s 集群的一部分。
-
你可以配置你的主机 dockerd 和
/var/run/docker.sock一起通过网络监听。它是dockerd开始上的-H选项。网络层将为新连接创建新套接字
标签: docker kubernetes bamboo