Масштабируем и ускоряем сборки с помощью buildkit и Kubernetes

541af5c9b1be6d54fe8a1712812badce.jpg

О теории можно почитать здесь https://docs.docker.com/build/architecture
Данная стать представляет из себя инструкцию по применению.

  1. Берем какое-нибудь web-приложение с большим количеством зависимостей:

git clone https://github.com/quay/quay.git && cd quay
time docker build --no-cache .
real    8m38.954s

Сборка занимает примерно 8 минут без кэша. Примерно похожие результаты получаются если использовать podman/buildah с crun вместо runc.

  1. Создаем сборочную ферму в Кубере с помощью 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
  1. Теперь можно собирать в Кубере с помощью 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 для работы со сборками и тестами.

© Habrahabr.ru