Комментарии 2
Установка unconfined повышает совместимость и может ускорить сборку. Добавляем необходимую аннотацию к нашим подам
Думаю лучше не отключать apparmor для всех запускаемых джобов.
Можно разрешить включение этой аннотации в джобах на уровне раннера:
[[runners]]
[runners.kubernetes]
pod_annotations_overwrite_allowed = "container.apparmor.security.beta.kubernetes.io/build=unconfined"И далее уже использовать там, где нужно:
build:
stage: build
image:
name: moby/buildkit:rootless
variables:
BUILDKITD_FLAGS: --oci-worker-no-process-sandbox
KUBERNETES_POD_ANNOTATIONS_1: "container.apparmor.security.beta.kubernetes.io/build=unconfined"
printf "%s:%s" "${REGISTRY_USER}" "${REGISTRY_PASSWORD}" | base64 | tr -d '\n'
Тут уже вкусовщина, но я бы заменил на следующую конструкцию:
echo -n "${REGISTRY_USER}:${REGISTRY_PASSWORD}" | base64 -w 0Но думаю всё равно не самая лучшая идея закидывать переменные для доступа к registry в ci и после этого собирать файл, проще сразу же его монтировать как секрет:
[[runners]]
[[runners.kubernetes.volumes.secret]]
"name" = "dockerconfigjson"
"mount_path" = "/docker"
[runners.kubernetes.volumes.secret.items]
".dockerconfigjson" = "config.json"Очень интересны следующие вопросы:
Как обстоят дела с попаданием в кэш, особенно когда команда разрабатывается одновременно в нескольких фича ветках. По моему опыту пришлось использовать несколько бэкэндов для кэша, иначе кэш будет постоянно перезаписываться последней сборкой. Мы используем registry backend, может быть с S3 дела обстоят иначе, на тот момент его не было и как я вижу фича пока только экспериментальная
Не было ли проблем при использовании в закрытой инфраструктуре, где все сертификаты selfsigned? Помню были проблемы с одним из кейсов
Сравнивали ли обычную версию и rootless? Может быть есть цифры насколько снижается производительность?
BuildKit в Kubernetes: мануал по быстрой и автомасштабируемой сборке проектов