Развертывание экземпляра 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Развертывание из YAMLФрагменты YAML на основе планирования развертыванияПолный пример 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 не подходит для режима
high availability, так как хранит файлы в указанном пути на хост-ноде
-
-
Кроме того, GitLab поддерживает объектное хранилище. В этом режиме требуется отдельная адаптация метода доступа к хранилищу. Обратитесь к поставщику за деталями.
Сеть
-
Платформа предоставляет два основных метода сетевого доступа:
NodePortиIngress-
NodePortтребует указания HTTP и SSH портов и обеспечения их доступности.NodePortне подходит для режимаhigh availability -
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 для развертывания с высокой доступностью:
Хранилище {storage}
Хранение данных 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 Metrics будет автоматически настроен и доступен для просмотра на панели мониторинга центра операций.
Настройка внешнего балансировщика нагрузки (LB)
Настройка внешнего балансировщика нагрузки (LB) для GitLab