问题描述
我们正在使用名为 Tilt (https://tilt.dev/) 的 K8s 开发工具,该工具使用大量微服务构建堆栈的开发映像,并允许实时重新加载等。
我已使用具有 10 个副本的 buildx create
将远程构建器 pod 部署到 AWS K8s 集群。然而,分拆构建似乎只使用其中两个 pod 进行实际构建(基于我在集群中看到的 cpu 和内存指标),另外 8 个处于空闲状态。向上运行会启动所有微服务的并发映像构建,因此最好将构建步骤分散到所有 10 个正在运行的构建器 pod。
我怀疑这是因为我们的项目目前存在于 monorepo 中,并且在项目的根级别使用相同的 Dockerfile.dev 来构建所有图像 (在构建时使用 {{1} })
-
我的怀疑是否正确?很难说,但它似乎是基于 Dockerfile 上下文的 buildx 负载平衡。如果是这样,是否可以覆盖此行为?
解决方法
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 上。