Поиск по сайту:

Как настроить Minio в качестве общего кэша для GitLab CI


Minio — это собственная система хранения объектов, совместимая с API-интерфейсами Amazon S3. В этом руководстве мы будем использовать Minio для настройки общего кэширования для GitLab Runner в качестве альтернативы облачному объектному хранилищу.

В чем проблема?

Конвейеры GitLab CI поддерживают кеш для ускорения будущих запусков. Кэши хранятся локально на каждом экземпляре бегуна по умолчанию. Вместо этого вы можете использовать поставщика хранилища объектов, чтобы включить режим «общего» кеша.

Совместное кэширование обеспечивает одновременный доступ к кэшу нескольких заданий. Параллельный доступ не поддерживается, если вы используете локальное кэширование с исполнителем конвейера Docker. Это может привести к снижению производительности конвейера из-за пропущенных попаданий в кэш.

Несмотря на то, что восстановление кеша должно выполняться на основе «максимальных усилий», то есть ваши задания не должны требовать, чтобы кеш включал содержимое из более раннего задания, на практике многие люди используют кеш. для передачи данных между их заданиями. В настоящее время это не работает, если у вас есть несколько заданий, которые выполняются параллельно и пытаются восстановить один и тот же кеш.

Самостоятельное размещение установки Minio вместе с вашим инстансом GitLab позволяет получить более надежное восстановление кеша, которое по-прежнему предсказуемо работает с параллельными заданиями. Вот как установить Minio и настроить GitLab Runner для использования его для кэширования.

Установка Минио

Minio Server можно загрузить в виде отдельного двоичного файла или пакетов .deb и .rpm. В этом руководстве мы сосредоточимся на пакете Debian. Если вы используете двоичный файл напрямую, вам потребуется вручную добавить служебный скрипт Minio в свою реализацию init, чтобы Minio запустился на вашем компьютере.

Загрузите и установите .deb Minio, следуя инструкциям на веб-сайте, чтобы получить последнюю версию. Это добавит сервер Minio в вашу систему и зарегистрирует определение его службы.

Предполагается, что Minio будет выполняться как пользователь minio-user. Создайте эту учетную запись пользователя сейчас:

sudo useradd -r minio-user -s /sbin/nologin

Затем создайте каталог данных Minio. Все файлы, загруженные в ваше хранилище объектов, будут сохранены в этом месте. Мы используем /mnt/minio для целей этого руководства. Используйте chown, чтобы предоставить вашему minio-user право собственности на каталог.

sudo mkdir -p /mnt/minio
sudo chown -R minio-user:minio-user /mnt/minio
sudo chmod -R 0775 /mnt/minio

Создание файла конфигурации Minio

Minio автоматически загружает значения конфигурации из файла /etc/default/minio. Создайте этот файл сейчас и добавьте следующее содержимое:

MINIO_ROOT_USER="minio"
MINIO_ROOT_PASSWORD="P@$$w0rd"
MINIO_OPTS="--address :9600 --console-address :9601"
MINIO_VOLUMES="/mnt/minio"

Первые две строки определяют учетные данные для первоначального пользователя Minio root. Измените пароль на безопасное значение.

Строка MINIO_OPTS содержит настройки сервера Minio. Мы явно устанавливаем прослушивающий порт на 9600 (по умолчанию) и открываем веб-консоль Minio на 9601. Директива MINIO_VOLUMES определяет, где Minio будет хранить ваши данные. Это устанавливается в каталог, установленный ранее.

Затем измените владельца файла конфигурации на minio-user. Minio может не запуститься, если владелец указан неверно:

sudo chown minio-user:minio-user /etc/default/minio

Запустите службу Minio и войдите в веб-консоль в браузере по адресу localhost:9601. Используйте свои учетные данные пользователя root для входа в систему.

sudo service minio start

Настройка Minio для GitLab

Следующий шаг — создание корзины, в которую GitLab будет загружать кеши пайплайна. Нажмите ссылку «Корзины» на боковой панели консоли Minio, затем синюю кнопку «Создать корзину» в правом верхнем углу.

Дайте своему ведру имя и нажмите кнопку «Создать ведро» в правом нижнем углу. Ни одна из предлагаемых функций не будет доступна в этой упрощенной установке Minio с использованием одного локального диска. Они не нужны, так как содержимое корзины будет управляться GitLab Runner.

Создав корзину, перейдите на страницу «Пользователи» консоли Minio. Нажмите «Создать пользователя», чтобы добавить учетную запись пользователя для GitLab Runner. Хотя это и не является обязательным, это рекомендуемый шаг, поэтому вам не нужно предоставлять GitLab свои учетные данные пользователя root.

Введите имя пользователя, например gitlab, в поле «Ключ доступа». Введите безопасный пароль в поле «Секретный ключ». Назначьте новому пользователю политику readwrite из списка, затем нажмите кнопку «Сохранить». GitLab требуется доступ для чтения и записи, чтобы он мог загружать и извлекать ваши кешированные данные.

Настройка GitLab Runner

Теперь вы можете интегрировать Minio в GitLab Runner. Откройте файл конфигурации GitLab Runner; это обычно находится в /etc/gitlab-runner/config.toml для комплексных установок GitLab.

Найдите раздел [runners.cache] и добавьте следующие строки:

[runners.cache]
  Type = "s3"
  Shared = true
  [runners.cache.s3]
    AccessKey = "gitlab"
    SecretKey = "P@$$w0rd"
    BucketName = "gitlab"
    Insecure = true
    ServerAddress = "192.168.0.1:9600"

Вот эффект этих значений:

  • Тип — сообщает GitLab, что будет использоваться механизм хранения, подобный S3.
  • Общий — позволяет совместно использовать кеш для параллельных заданий.
  • AccessKey и SecretKey — они должны совпадать с учетными данными для учетной записи пользователя Minio, которую вы создали в консоли Minio.
  • BucketName. Измените это на имя корзины, которую вы создали в консоли Minio.
  • Небезопасный — позволяет GitLab получать доступ к Minio через обычный HTTP. Если вы будете использовать сервер Minio для дополнительных целей, следуйте инструкциям по настройке HTTPS для вашей установки.
  • ServerAddress — добавьте сюда IP-адрес вашего сервера. Это информирует GitLab о деталях подключения к серверу S3.

Перезапустите службу GitLab Runner, чтобы изменения вступили в силу:

sudo gitlab-runner restart

Выполняйте задания CI

Теперь ваши задания CI должны извлекать и отправлять кэши, определенные в вашем .gitlab-ci.yml, на ваш сервер Minio. Это позволяет использовать общие кэши, к которым можно безболезненно обращаться с помощью параллельных заданий.

Когда все заработает, вы увидите строку Uploading cache.zip в журналах заданий CI, которая демонстрирует использование GitLab вашего сервера хранилища объектов. Последующие задания, которые ссылаются на кэш, должны включать в себя cache.zip обновлен и успешно извлечен кэш в верхней части журнала.

Вы можете просмотреть сохраненные в данный момент кеши, проверив свое ведро в консоли Minio. Это также дает вам удобный способ проверить использование диска и удалить старые кеши, чтобы освободить место. GitLab создает каталог для каждого идентификатора вашего проекта. В этой папке вы найдете ZIP-архивы, содержащие ваши кеши, каждый из которых назван по ветке и имени кеша, указанному в вашем .gitlab-ci.yml.

Заключение

Minio легко настраивается как базовая установка, которая работает как общий кеш для GitLab Runner. Это гарантирует надежное использование кэша при одновременном выполнении нескольких заданий. Это стоящее дополнение к вашей собственной установке GitLab.

Хотя во многих случаях совместное кэширование повышает производительность, помните, что это может быть не всегда так. Это добавляет дополнительные накладные расходы в процесс конвейера, поскольку GitLab Runner необходимо сжать кеш вашего задания и загрузить его в Minio, прежде чем зафиксировать успешный результат. Когда более позднее задание восстановит кеш, ZIP-файл необходимо будет извлечь из Minio и распаковать, прежде чем ваш скрипт сможет начать работу. После переключения на объектное хранилище стоит следить за своими собственными конвейерами, чтобы убедиться, что вы получаете ожидаемые результаты.




Все права защищены. © Linux-Console.net • 2019-2024