Развертывание экземпляра SonarQube
В этом документе описываются подписка на SonarQube Operator и функциональность развертывания экземпляров SonarQube.
SonarQube не поддерживает развертывание в пространствах имен с политикой SPA (Security Policy Admission), установленной в Restricted или Baseline, по следующим причинам:
- Init Container требует привилегий root: SonarQube использует init containers для инициализации прав доступа к каталогу PVC, что требует привилегий root, не разрешенных политикой
Restricted. - InitSysctl требует привилегированных разрешений: По умолчанию SonarQube использует контейнеры initSysctl для настройки параметров sysctl (таких как
vm.max_map_countиfs.file-max), необходимых для Elasticsearch. Для изменения параметров ядра на уровне системы требуются разрешенияprivileged.
Рекомендация: Создайте отдельное пространство имен для развертывания SonarQube и убедитесь, что для него установлена политика безопасности privileged.
Содержание
Предварительные требованияПланирование развертыванияОсновная информацияПланирование ресурсов перед развертываниемНе используйте сетевое хранилище в качестве backend-хранилищаРазвертывание экземпляраРазвертывание на основе шаблонаQuickstart TemplateРазвертывание на основе шаблона Production TemplateРазвертывание из YAMLКонфигурация ресурсовСетевая конфигурацияКонфигурация хранилищаКонфигурация учетных данных доступа к PostgreSQLКонфигурация учетной записи администратораПолный пример YAMLКонфигурация SSOИспользование в кластерах только с IPv6Предварительные требования
-
Этот документ применим к SonarQube версии 9.9.5 и выше, предоставляемой платформой. Он отделен от платформы с использованием таких технологий, как Operator.
-
Убедитесь, что SonarQube Operator был развернут (оформлена подписка) в целевом кластере, то есть создание экземпляров через SonarQube Operator уже доступно.
Планирование развертывания
SonarQube поддерживает различные конфигурации ресурсов, чтобы соответствовать сценариям разных клиентов. В разных сценариях требуемые ресурсы, конфигурации и т. д. будут существенно отличаться. Поэтому в этом разделе рассматривается, какие аспекты необходимо учитывать при планировании развертывания перед созданием экземпляра SonarQube, а также каков эффект от принятия тех или иных решений. Это поможет пользователям выполнить последующее развертывание конкретного экземпляра на основе этой информации.
Основная информация
- SonarQube Operator, предоставляемый платформой, основан на официальном SonarQube Chart сообщества и дополнен корпоративными возможностями, такими как поддержка IPv6 и исправления уязвимостей безопасности. По функциональности он полностью совместим с версией сообщества, а с точки зрения пользовательского опыта повышает удобство развертывания SonarQube за счет дополнительных настраиваемых шаблонов и других механизмов.
Планирование ресурсов перед развертыванием
Планирование ресурсов перед развертыванием подразумевает принятие решений до начала развертывания, которые вступят в силу в процессе развертывания.
Дополнительные рекомендации по ресурсам среды см. в официальной документации: https://docs.sonarsource.com/sonarqube-community-build/server-installation/server-host-requirements
Не используйте сетевое хранилище в качестве backend-хранилища
Не используйте StorageClass, PVC или другое удаленно подключаемое хранилище на основе сетевого хранилища для постоянного хранения SonarQube в production-средах. SonarQube внутренне использует Elasticsearch, а в официальных требованиях SonarSource к хосту указано, что для каталога SonarQube data не следует использовать удаленно подключаемое хранилище, такое как NFS, SMB/CIFS или NAS, поскольку оно часто медленнее, имеет большую вариативность задержек и становится единой точкой отказа. В официальном документе также указан затрагиваемый путь как <sonarqubeHome>/data, где хранятся индексы Elasticsearch и где требуется высокая производительность ввода-вывода.
При планировании хранилища для SonarQube используйте локальное хранилище узла или блочное хранилище с хорошей производительностью чтения/записи вместо StorageClass на основе сетевого хранилища. Если в шаблоне развертывания выбран StorageClass, уточните у поставщика хранилища, что он не основан на удаленно подключаемом файловом хранилище.
Связанные ссылки:
- Официальная документация: Требования к хосту SonarQube Server > Рекомендации по аппаратной конфигурации > Диск
Развертывание экземпляра
Развертывание на основе шаблона Quickstart Template
Этот шаблон используется для быстрого создания легковесного экземпляра SonarQube, подходит для сценариев разработки и тестирования и не рекомендуется для production-среды.
- Ресурсы вычислений: 800m CPU, 4 Gi памяти
- Хранилище: использовать локальное хранилище узла, настроить IP-адрес и путь узла хранения
- Сетевой доступ: использовать NodePort для доступа к сервису, использовать IP узла совместно с хранилищем и указать порт
Развертывание на основе шаблона Production Template
Этот шаблон используется для быстрого создания production-экземпляра SonarQube, подходит для production-сценариев и рекомендуется для production-среды.
- Ресурсы вычислений: 8 CPU cores, 16 Gi памяти
- Хранилище: использовать PVC storage, настроить storage class
- Сетевой доступ: использовать Domain для доступа к сервису.
Развертывание из YAML
Конфигурация ресурсов
Для SonarQube достаточно настроить общие ресурсы, например:
Дополнительные сведения см. в описании ресурсов в SonarQube Chart
Сетевая конфигурация
Сетевые конфигурации делятся на два типа:
- Сетевая конфигурация на основе ingress
- Сетевая конфигурация на основе NodePort
Сетевая конфигурация на основе ingress поддерживает протоколы https и http. Предварительно в кластере должен быть развернут ingress controller.
Сетевая конфигурация на основе NodePort:
Конфигурация хранилища
Конфигурации хранилища в основном делятся на три категории:
- Конфигурация хранилища на основе StorageClass
- Конфигурация хранилища на основе PVC
- Конфигурация хранилища на основе HostPath
Конфигурация хранилища на основе StorageClass:
Не выбирайте StorageClass на основе сетевого хранилища для постоянного хранения SonarQube. Используйте backend-хранилище с низкой задержкой и высокой производительностью чтения/записи.
Конфигурация хранилища на основе PVC:
Конфигурация хранилища на основе HostPath:
Конфигурация учетных данных доступа к PostgreSQL
На платформе заранее необходимо создать экземпляр PostgreSQL, а также создать в PostgreSQL базу данных для использования.
Поддерживаемые версии PostgreSQL для SonarQube 25.1.0 — с 13 по 17.
Доступ к PostgreSQL осуществляется путем настройки secret-ресурса со специальным содержимым. Подробности см. в Настройка PostgreSQL и учетных данных доступа к учетной записи.
Использование secret для учетных данных доступа к PG в YAML SonarQube:
Конфигурация учетной записи администратора
При инициализации экземпляра SonarQube необходимо настроить учетную запись администратора и ее пароль. Это выполняется путем настройки secret-ресурса. Подробности см. в Настройка PostgreSQL и учетных данных доступа к учетной записи.
Укажите это для SonarQube через YAML:
Полный пример YAML
NodePort, PVC, PostgreSQL, учетная запись администратора
Конфигурация SSO
Настройка SSO включает следующие шаги:
Зарегистрируйте клиент аутентификации SSO в глобальном кластере
- Создайте следующий ресурс OAuth2Client в глобальном кластере, чтобы зарегистрировать клиент аутентификации SSO.
- Настройте экземпляр SonarQube для использования аутентификации SSO
Добавьте конфигурацию SSO в экземпляр SonarQube:
Включение SSO для платформ с использованием самоподписанных сертификатов
Если доступ к платформе осуществляется по https и используется самоподписанный сертификат, необходимо примонтировать CA самоподписанного сертификата к экземпляру SonarQube. Метод следующий:
В пространстве имен cpaas-system глобального кластера найдите secret с именем dex.tls, извлеките из него содержимое ca.crt и tls.crt, сохраните его как новый secret и создайте его в пространстве имен экземпляра SonarQube.
Отредактируйте экземпляр SonarQube, чтобы использовать этот CA:
Использование в кластерах только с IPv6
При развертывании в кластере только с IPv6 необходимо явно настроить параметры протокола IPv6, поскольку Java по умолчанию поддерживает dual-stack. Добавьте следующую конфигурацию, чтобы обеспечить корректное подключение: