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

Как включить прокси-сервер зависимостей GitLab для образов Docker


GitLab имеет встроенный прокси-сервер зависимостей, который кэширует исходные образы Docker. Ранее являвшаяся премиальной функцией, Dependency Proxy была открыта и стала доступна для всех версий GitLab в ноябре 2020 года как часть GitLab 13.6.

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

Включение прокси-сервера зависимостей

Доступность Dependency Proxy контролируется настройкой уровня экземпляра. Включение прокси-сервера зависимостей требует перенастройки GitLab. Это приведет к короткому периоду простоя.

Чтобы включить эту функцию, добавьте следующую строку в файл /etc/gitlab/gitlab.rb вашей установки:

gitlab_rails["dependency_proxy_enabled"] = true

Сохраните файл и выполните следующую команду в своем терминале:

sudo gitlab-ctl reconfigure

Инструкции выше предназначены для установки GitLab Omnibus. Если вы установили из исходного кода, прокси-сервер зависимостей должен быть включен в вашем файле config/gitlab.yml.

Использование прокси-сервера зависимостей

Dependency Proxy работает только с группами GitLab. В настоящее время вы не можете использовать его с автономными личными проектами.

Эта функция обычно используется в сценариях конвейера CI. При ссылке на образ в конвейере добавьте к имени Docker Hub префикс переменной CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX. Эта переменная автоматически преобразуется в URL-адрес прокси-сервера зависимостей для вашей активной группы GitLab.

image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/nodejs:latest

Этот конвейер будет выполнять свою работу в контейнере nodejs:latest. Изображение будет загружено через прокси-сервер зависимостей. Последующие запуски конвейера не должны будут попадать в Docker Hub, если исходный образ фактически не изменится.

Вы также можете получить доступ к прокси-серверу зависимостей вручную, вне GitLab CI. Сначала вы должны пройти аутентификацию с помощью docker login. Вам нужно будет использовать свое имя пользователя и пароль GitLab или ваше имя пользователя и личный токен доступа.

docker login gitlab.example.com --username username --password password

После аутентификации вы можете docker pull с помощью GitLab Dependency Proxy. Замените example-group в приведенном ниже URL-адресе названием группы, которую вы хотите использовать. Полученное изображение будет кэшировано в прокси-сервере зависимостей этой группы.

docker pull gitlab.example.com/example-group/dependency_proxy/containers/nodejs:latest

Если вы также используете реестр контейнеров GitLab (для хранения изображений, которые вы создаете), обратите внимание, что прокси-сервер зависимостей является полностью отдельным и имеет другой URL-адрес. В то время как Container Registry обычно предоставляется на собственном субдомене (например, registry.example.com), доступ к Dependency Proxy осуществляется через то же имя хоста, что и веб-интерфейс GitLab.

Как работает прокси-сервер зависимостей

Прокси-сервер зависимостей представляет собой еще один реестр Docker. Если вы хотите использовать прокси-сервер, вы входите в docker, а затем docker pull как обычно.

Если прокси-сервер зависимостей уже кэшировал образ, он вернет его напрямую, без использования Docker Hub. В противном случае образ извлекается из Docker Hub, кэшируется в прокси-сервере и возвращается в интерфейс командной строки Docker.

GitLab будет пытаться связаться с Docker Hub для каждого docker pull, даже если доступно кэшированное изображение. Это связано с тем, что прокси-сервер должен проверять, был ли обновлен образ в Docker Hub.

Эта процедура не влияет на ограничение скорости Docker. Docker разрешает бесплатные запросы HEAD для сравнения версий манифеста образа. Если Docker указывает, что кешированное изображение устарело, GitLab извлечет свежую версию (что приведет к превышению ограничения скорости). В противном случае кешированное изображение будет возвращено без добавления к вашему лимиту скорости Docker Hub.

Эти характеристики делают прокси-сервер зависимостей идеальным для конвейеров непрерывной интеграции. Войдя в прокси-сервер, вы можете безопасно docker pull при каждом запуске конвейера, не нарушая ограничение скорости Docker Hub.

Настройка параметров прокси-сервера зависимостей

Dependency Proxy может использовать значительный объем хранилища с течением времени. Вы кэшируете изображения из Docker Hub; эти изображения могут быть довольно большими в зависимости от того, что вы используете.

GitLab позволяет настроить место хранения. Установите параметр dependency_proxy_storage_path в /etc/gitlab/gitlab.rb, если вы хотите использовать выделенный накопитель.

gitlab_rails["dependency_proxy_storage_path"] = "/mnt/my-storage-drive"

При установке исходного кода вместо этого следует установить свойство storage_path в разделе dependency_proxy файла config/gitlab.yml.

Вы также можете хранить кэшированные изображения в службе хранения объектов, такой как Amazon S3. Вот пример конфигурации Omnibus в /etc/gitlab/gitlab.rb:

gitlab_rails["dependency_proxy_object_store_enabled"] = true
 
# This is the S3 bucket name
gitlab_rails["dependency_proxy_object_store_remote_directory"] = "gitlab-dependency-proxy"
 
gitlab_rails["dependency_proxy_object_store_connection"] = {
    "provider" => "AWS",
    "region" => "eu-west-1",
    "aws_access_key_id" => "AWS_ACCESS_KEY_ID",
    "aws_secret_access_key" => "AWS_SECRET_ACCESS_KEY"
}

Для повышения производительности GitLab будет кэшировать изображения локально, а затем в фоновом режиме загружать их на S3. Если вы предпочитаете загружать напрямую на S3, установите для параметра dependency_proxy_object_store_direct_upload значение true.

Вы должны перенастроить GitLab (sudo gitlab-ctl reconfigure) после внесения изменений в настройки хранилища. Затем прокси-сервер зависимостей будет хранить кэшированные изображения, используя вашу новую конфигурацию.

Освобождение хранилища

GitLab никогда не удаляет кэшированные данные Dependency Proxy. Вы можете просмотреть содержимое кэша групп, выбрав Packages & Registries > Dependency Proxy на его боковой панели. На этом экране можно включить или отключить прокси-сервер зависимостей для группы и просмотреть общий объем хранимых данных. Однако вы не можете использовать пользовательский интерфейс для очистки старых BLOB-объектов.

Если вам нужно освободить хранилище, вы должны использовать GitLab API. Существует единственная конечная точка, которая позволяет очистить все данные прокси-сервера зависимостей, хранящиеся для определенной группы.

Создайте личный токен доступа, щелкнув свой профиль в правом верхнем углу, нажав «Токены доступа» на левой боковой панели и добавив новый токен доступа с областью действия api.

Затем используйте curl, чтобы удалить кэш прокси-сервера зависимостей группы:

curl --request DELETE --header "PRIVATE-TOKEN: <Access-Token>" https://gitlab.example.com/api/v4/groups/<Group-Id>/dependency_proxy/cache

Чтобы найти идентификатор своей группы, посетите домашнюю страницу группы, которую хотите очистить. Идентификатор группы будет отображаться рядом с ее названием.

Заключение

Включение прокси-сервера зависимостей — это простой шаг, который повышает отказоустойчивость ваших конвейеров. Если Docker Hub выйдет из строя, прокси-сервер по-прежнему будет предоставлять вашему конвейеру кешированные версии изображений.

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




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