Развертывание экземпляра GitLab
В этом документе представлена подписка на GitLab Operator и функциональность развертывания экземпляра GitLab.
Gitlab не поддерживает развертывание в пространствах имён с политикой SPA (Security Policy Admission), установленной в значение Restricted, по следующим причинам:
-
Init контейнер требует прав root: GitLab использует init контейнеры для инициализации прав доступа к директории PVC, что требует прав root, не разрешённых при политике Restricted.
-
Компонент Gitaly требует специальных системных вызовов: Компонент Gitaly требует определённых системных вызовов, несовместимых с
seccompProfile, настроенным какRuntimeDefault.
Рекомендация: Создайте выделенное пространство имён для развертывания GitLab и убедитесь, что политика безопасности в нём не установлена в Restricted. При развертывании GitLab с использованием хранилища hostPath политика безопасности пространства имён должна быть настроена как Privileged.
Содержание
Предварительные требованияПланирование развертыванияОсновная информацияПланирование ресурсов до развертыванияПланирование конфигурации после развертыванияРазвертывание экземпляраРазвертывание из шаблонаGitLab Quick StartРазвертывание из шаблона GitLab High AvailabilityРазвертывание из YAMLYAML-фрагменты на основе планирования развертыванияПолный пример YAML: одиночный экземпляр, node storage, сетевой доступ NodePortПолный пример YAML: высокая доступность, класс хранилища, сетевой доступ IngressСледующие шагиНастройка Single Sign-On (SSO)Настройка HTTPSНастройка панели мониторингаНастройка внешнего балансировщика нагрузки (LB)Предварительные требования
-
Этот документ применим к версиям GitLab 17 и выше, предоставляемым платформой. Он отделён от платформы и основан на технологиях, таких как Operator.
-
Убедитесь, что GitLab Operator был развернут (подписан) в целевом кластере, то есть экземпляр GitLab может быть создан через GitLab Operator.
Планирование развертывания
GitLab поддерживает различные конфигурации ресурсов для удовлетворения различных сценариев заказчиков. В разных сценариях требуемые ресурсы и настройки могут значительно отличаться. Поэтому в этом разделе рассматриваются аспекты, которые следует учитывать при планировании развертывания экземпляра GitLab, а также влияние ключевых решений, чтобы помочь пользователям принимать обоснованные решения для последующих развертываний.
Основная информация
-
GitLab Operator, предоставляемый платформой, основан на официальном сообществе GitLab Operator с улучшениями корпоративного уровня, такими как поддержка IPv6, ARM и исправления уязвимостей безопасности. Он полностью совместим с сообществом по функциональности и повышает удобство развертывания GitLab через опциональные и настраиваемые шаблоны.
-
Экземпляр GitLab включает несколько компонентов, таких как
Gitaly— компонент для доступа к Git-репозиториям,PostgreSQL— компонент для хранения метаданных приложения и информации о пользователях, иRedis— компонент для кэширования и др. Платформа предоставляет профессиональные PostgreSQL Operator и Redis Operator, поэтому при развертывании экземпляра GitLab ресурсы Redis и PostgreSQL не развертываются напрямую, а доступ к ним осуществляется через настройку соответствующих учётных данных для существующих экземпляров.
Планирование ресурсов до развертывания
Планирование ресурсов до развертывания — это планирование ресурсов, которое необходимо определить до развертывания и которое вступает в силу во время развертывания. Основное содержание включает:
Высокая доступность
-
GitLab поддерживает развертывание с высокой доступностью. Основные последствия и ограничения этого режима:
-
Каждый компонент будет развернут с несколькими репликами
-
Сетевой доступ больше не поддерживает
NodePort, требуется доступ через доменные имена, настроенные черезIngress -
Метод хранения больше не поддерживает
node storage, требуется доступ черезStorageClassилиPVC
-
Ресурсы
Согласно рекомендациям и практике сообщества, экземпляр GitLab без высокой доступности может работать с минимум 3 ядрами CPU и 6Gi памяти, а в режиме высокой доступности требуется минимум 18 ядер CPU и 22Gi памяти для стабильной работы.
Хранилище
-
Для GitLab можно использовать общие методы хранения, предоставляемые платформой, такие как классы хранилищ, persistent volume claims, node storage и др.
-
Для хранилища Gitaly рекомендуется класс хранилища TopoLVM
-
Node storage не подходит для режима
высокой доступности, так как хранит файлы в указанном пути на узле хоста
-
-
Кроме того, GitLab поддерживает объектное хранилище. В этом режиме требуется отдельная адаптация метода доступа к хранилищу. Обратитесь к поставщику за подробностями.
Сеть
-
Платформа предоставляет два основных метода сетевого доступа:
NodePortиIngress-
NodePortтребует указания HTTP и SSH портов и обеспечения их доступности.NodePortне подходит для режимавысокой доступности -
Ingressтребует указания доменного имени и обеспечения корректного разрешения доменного имени
-
-
Платформа поддерживает протокол HTTPS, который необходимо настроить после развертывания экземпляра. Подробнее см. Настройка HTTPS.
Redis
-
Версия компонента Redis, необходимая GitLab, — v6. Рекомендуется развертывать экземпляры Redis с помощью Redis Operator, предоставляемого платформой, а затем завершать интеграцию Redis через настройку учётных данных доступа.
- Доступ к Redis осуществляется путём настройки ресурса
secretс определённым форматом содержимого. Подробнее см. Настройка Redis, PostgreSQL и учётных данных.
- Доступ к Redis осуществляется путём настройки ресурса
PostgreSQL
-
Версия компонента PostgreSQL, необходимая GitLab, — v14. Рекомендуется развертывать экземпляры PostgreSQL с помощью PostgreSQL Operator, предоставляемого платформой, а затем завершать интеграцию PostgreSQL через настройку учётных данных доступа.
- Доступ к PostgreSQL осуществляется путём настройки ресурса
secretс определённым форматом содержимого. Подробнее см. Настройка Redis, PostgreSQL и учётных данных.
- Доступ к PostgreSQL осуществляется путём настройки ресурса
-
Примечание: в режиме высокой доступности компонент Gitaly работает в режиме кластера и требует дополнительной учётной записи PostgreSQL, настроенной аналогично вышеописанному способу, для доступа к отдельной базе данных. Это могут быть две разные базы данных в одном экземпляре PostgreSQL.
Учётные данные
При создании экземпляра GitLab необходимо настроить root-аккаунт и его пароль. Это делается путём настройки ресурса secret. Подробнее см. Настройка Redis, PostgreSQL и учётных данных.
Планирование конфигурации после развертывания
Планирование конфигурации после развертывания — это настройки, которые не нужно определять до развертывания, но которые можно выполнить по мере необходимости через стандартизированные операции после развертывания. Сюда входят, например, Single Sign-On (SSO), настройка HTTPS, настройка внешнего балансировщика нагрузки и др. Подробнее см. Следующие шаги.
Развертывание экземпляра
GitLab Operator, предоставляемый платформой, предлагает два метода развертывания: развертывание из шаблонов и развертывание из YAML.
Платформа предоставляет два встроенных шаблона: шаблон GitLab Quick Start и шаблон GitLab High Availability, а также поддерживает пользовательские шаблоны для удовлетворения конкретных сценариев заказчиков.
Информация о встроенных шаблонах и развертывании из YAML приведена ниже:
Развертывание из шаблона GitLab Quick Start
Этот шаблон используется для быстрого создания облегчённого экземпляра GitLab, подходящего для сценариев разработки и тестирования, не рекомендуется для производственных сред.
- Вычислительные ресурсы: 3 ядра CPU, 6Gi памяти
- Метод хранения: используется локальное node storage, требуется настройка IP узла хранения и пути
- Сетевой доступ: используется метод NodePort, IP узла совпадает с IP хранилища, требуется указание портов
- Зависимые сервисы: требуется настройка учётных данных доступа к существующим Redis и PostgreSQL
- Другие настройки: требуется настройка учётных данных аккаунта, функция SSO по умолчанию отключена
Завершите развертывание, заполнив соответствующую информацию согласно подсказкам шаблона.
Развертывание из шаблона GitLab High Availability
Развёртывание экземпляра GitLab с высокой доступностью требует более высокой конфигурации ресурсов и обеспечивает более высокий стандарт доступности.
- Вычислительные ресурсы: 18 ядер CPU, 22Gi памяти
- Метод хранения: используется класс хранилища для хранения Gitaly — компонента репозитория кода
- Сетевой доступ: используется метод Ingress, требуется указание доменного имени
- Зависимые сервисы: требуется настройка учётных данных доступа к существующим Redis и PostgreSQL, а также отдельные учётные данные для другой независимой базы данных в экземпляре PG для компонента Gitaly
- Другие настройки: требуется настройка учётных данных аккаунта, функция SSO по умолчанию отключена
Для обеспечения высокой доступности GitLab внешние зависимости должны соответствовать следующим условиям:
attachment storage classдолжен поддерживать многозвёздное чтение и запись (ReadWriteMany)- Экземпляры
RedisиPostgreSQLдолжны быть высокодоступными - Сетевой балансировщик нагрузки должен быть высокодоступным; при использовании ALB должен быть настроен VIP
- В кластере должно быть более 2 узлов
Завершите развертывание, заполнив соответствующую информацию согласно подсказкам шаблона.
Развертывание из YAML
Развертывание из YAML — это самый базовый и мощный способ развертывания. Здесь мы предоставляем соответствующие YAML-фрагменты для каждого аспекта из раздела Планирование развертывания, а затем два полных примера YAML для разных сценариев, чтобы помочь пользователям понять метод конфигурации YAML и при необходимости внести изменения.
YAML-фрагменты на основе планирования развертывания
Высокая доступность
В режиме высокой доступности Gitaly должен использовать кластерный режим, а остальные компоненты должны иметь не менее 2 реплик. Фрагмент конфигурации YAML для развертывания с высокой доступностью:
Хранилище
Хранение данных GitLab включает две основные части:
- Хранилище Gitaly: хранит данные репозитория кода
- Хранилище вложений: хранит аватары пользователей, загруженные изображения и др.
В настоящее время поддерживаются три метода конфигурации хранилища: класс хранилища, PVC и локальное node storage.
Фрагмент конфигурации класса хранилища:
Фрагмент конфигурации PVC:
Фрагмент конфигурации локального node storage:
Сетевой доступ
Сетевой доступ включает два основных метода: доступ по доменному имени и доступ через NodePort.
Фрагмент конфигурации доступа по доменному имени:
Метод NodePort требует настройки двух портов: HTTP и SSH.
Фрагмент конфигурации доступа NodePort:
Конфигурация учётных данных доступа к Redis
Это относится к фрагменту конфигурации в экземпляре GitLab для учётных данных Redis после настройки ресурса secret с учётными данными Redis:
Пример для standalone:
Пример для Sentinel:
Конфигурация учётных данных доступа к PostgreSQL
Это относится к фрагменту конфигурации в экземпляре GitLab для учётных данных PostgreSQL после настройки ресурса secret с учётными данными PostgreSQL, включая случай настройки двух баз данных PostgreSQL в режиме высокой доступности:
Конфигурация root-аккаунта
Это относится к фрагменту конфигурации в экземпляре GitLab для учётных данных аккаунта после настройки ресурса secret с учётными данными аккаунта:
Полный пример YAML: одиночный экземпляр, node storage, сетевой доступ NodePort
Полный пример YAML: высокая доступность, класс хранилища, сетевой доступ Ingress
Следующие шаги
Настройка Single Sign-On (SSO)
Настройка SSO включает следующие шаги:
- Зарегистрировать клиент аутентификации SSO в глобальном кластере
- Подготовить конфигурацию аутентификации SSO
- Настроить экземпляр GitLab для использования конфигурации аутентификации SSO
Создайте следующий ресурс Oauth2Client в глобальном кластере для регистрации клиента аутентификации SSO.
Подготовьте содержимое конфигурации согласно комментариям в JSON ниже.
Сохраните содержимое конфигурации в секрет и создайте его в пространстве имён, где расположен экземпляр GitLab.
Отредактируйте экземпляр GitLab, добавив следующую конфигурацию:
Включение SSO для платформ с самоподписанными сертификатами
Если платформа доступна по HTTPS и использует самоподписанный сертификат, необходимо смонтировать CA самоподписанного сертификата в экземпляр GitLab следующим образом:
В пространстве имён cpaas-system глобального кластера найдите секрет с именем dex.tls, получите содержимое ca.crt из секрета, сохраните его как новый секрет и создайте в пространстве имён экземпляра GitLab.
Сертификат должен быть в формате PEM.
Отредактируйте экземпляр GitLab для использования этого CA:
Настройка HTTPS
После развертывания экземпляра GitLab вы можете настроить HTTPS по мере необходимости.
Сначала создайте секрет TLS-сертификата в пространстве имён, где расположен экземпляр.
Затем отредактируйте YAML-конфигурацию экземпляра GitLab для включения доступа по HTTPS:
Настройка панели мониторинга
GitLab Operator по умолчанию поддерживает панель мониторинга центра операций платформы. При развертывании GitLab Operator и экземпляра GitLab метрики GitLab будут автоматически настроены и доступны для просмотра на панели мониторинга центра операций.
Настройка внешнего балансировщика нагрузки (LB)
Настройка внешнего балансировщика нагрузки (LB) для GitLab