Масштабируем и ускоряем сборки с помощью buildkit и Kubernetes
О теории можно почитать здесь https://docs.docker.com/build/architecture
Данная стать представляет из себя инструкцию по применению.
Берем какое-нибудь web-приложение с большим количеством зависимостей:
git clone https://github.com/quay/quay.git && cd quay
time docker build --no-cache .
real 8m38.954s
Сборка занимает примерно 8 минут без кэша. Примерно похожие результаты получаются если использовать podman/buildah с crun вместо runc.
Создаем сборочную ферму в Кубере с помощью buildx:
docker buildx create --platform amd64 --append --name kube-build-farm --driver kubernetes --driver-opt loadbalance=random --driver-opt replicas=2 --driver-opt namespace=buildx --driver-opt limits.cpu=1 --config ./config.toml --bootstrap
В config.toml указываем локальные директории под кэш:
cache-to = ["type=local,dest=/tmp/cache,mode=max"]
cache-from = ["type=local,src=/tmp/cache,mode=max"]
Видим как buildx разворачивает воркеров в Кубере:
kubectl get all -n buildx
NAME READY STATUS RESTARTS AGE
pod/kube-build-farm0-7949dd94db-frp6d 1/1 Running 0 30m
pod/kube-build-farm0-7949dd94db-qzhhz 1/1 Running 0 30m
Теперь можно собирать в Кубере с помощью
docker build
, или можно использовать Docker compose с buildkit:
COMPOSE_DOCKER_CLI_BUILD=1 \
DOCKER_BUILDKIT=1 \
DOCKER_DEFAULT_PLATFORM=linux/amd64 \
docker-compose build
Получаем масштабируемость и прозрачность процессов для DevOps, DevSecOps и SRE. Теперь можно использовать богатый инструментарий Kubernetes для работы со сборками и тестами.