Развертывание экземпляра 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 указаны в матрице совместимости версий. Рекомендуется развертывать экземпляры 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 внешние зависимости должны соответствовать следующим условиям:
Класс хранилища вложенийдолжен поддерживать многозвёздочный режим чтения и записи (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