【问题标题】:Docker buildx - Select specific nodes for build monorepo supportDocker buildx - 选择特定节点来构建 monorepo 支持
【发布时间】:2021-06-26 23:30:20
【问题描述】:

我们正在使用一个名为 Tilt 的 K8s 开发工具(https://tilt.dev/),它使用大量微服务构建堆栈的开发映像并允许实时重新加载等。

我已经使用 buildx create 将远程构建器 pod 部署到 AWS K8s 集群,并具有 10 个副本。但是,分离构建似乎只使用其中两个 pod 进行实际构建(基于我在集群中看到的 CPU 和内存指标),另外 8 个处于空闲状态。运行向上倾斜会启动所有微服务的并发映像构建,因此将构建步骤分散到所有 10 个正在运行的构建器 pod 中是理想的。

我怀疑这是因为我们的项目当前存在于 monorepo 中,并且在项目的根级别使用相同的 Dockerfile.dev 来构建所有图像 (在构建时使用 --build-arg 传递的次要配置)

  1. 我的怀疑正确吗?很难说,但似乎 buildx 负载平衡基于 Dockerfile 上下文。如果是这样,是否可以覆盖此行为?

  2. 或者,有没有办法手动选择 buildx 节点?编写一个循环遍历现有远程节点以分散构建负载的选择器很容易

【问题讨论】:

    标签: docker kubernetes monorepo docker-buildkit buildx


    【解决方案1】:

    FWIW -我通过执行以下操作找到了可行的解决方法:

    #!/usr/bin/env bash
    for dir in myMonorepoServices/*; do
      # get the name of the service folder
      SERVICE=$(echo $dir | cut -d'/' -f 2)
    
      echo "? ? ? Creating a remote builder for $SERVICE... ? ? ?"
      $(docker buildx create --name $SERVICE-docker-builder --driver kubernetes --driver-opt replicas=1,namespace=docker-builder --use)
      docker buildx inspect --bootstrap
    
    done
    

    这会在远程集群上创建一个单独的“命名”构建器 pod,我可以使用 --builder 标志直接定位它,如下所示:

    docker buildx build --builder=myServiceName-docker-builder

    并不是真正意义上的“负载平衡”,但这确实可以确保每个服务都构建在自己的专用 pod 上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多