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

от автора

О теории можно почитать здесь.

Это больше инструкция по применению.

  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 buildix use kube-build-farm && docker buildix build ., или можно использовать Docker compose с buildkit:

COMPOSE_DOCKER_CLI_BUILD=1 \ DOCKER_BUILDKIT=1 \ DOCKER_DEFAULT_PLATFORM=linux/amd64 \ docker-compose build 

Получаем масштабируемость и прозрачность процессов для DevOps, DevSecOps и SRE. Теперь можно использовать богатый инструментарий Kubernetes для работы со сборками и тестами.

upd:

Сравниваем сборку в kubernetes:

time docker buildx --builder kube-build-farm build . --no-cache 10:32.01 total 

И на локальной машине (desktop-linux – Mac m1):

time docker buildx --builder desktop-linux build . --no-cache 13:41.42 total 

Особенно заметной разница становится когда нужно собирать под разные архитектуры.
Сначала создаем builder для Куба:

docker buildx create --platform amd64 --append --name kube-build-farm --driver kubernetes --driver-opt loadbalance=random --driver-opt replicas=6 --driver-opt namespace=kbuild  --driver-opt=qemu.install=true --driver-opt limits.cpu=2 --bootstrap 

--driver-opt=qemu.install=true – это флаг нужен для установки qemu в контейнерах.

  • Можно собирать сразу для нескольких платформ:

time docker buildx --builder kube-build-farm build --platform linux/amd64,linux/arm64 . --no-cache 
  • Можно сократить в несколько раз сборку сложного приложения в Docker compose в несколько раз

time COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose build --builder kube-build-farm --no-cache

20:45.86 total

vs

80~ минут на Mac m1


ссылка на оригинал статьи https://habr.com/ru/articles/788882/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *