【问题标题】:Concurrent access to docker.sock on k8s在 k8s 上并发访问 docker.sock
【发布时间】: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


【解决方案1】:

您可以做的其中一件事是在 rkt 上运行构建,同时在 docker 上运行 kubernetes?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2020-05-30
    • 2020-08-14
    相关资源
    最近更新 更多