0

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

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

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

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

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

4

1 回答 1

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 上。

于 2021-04-01T16:52:31.127 回答