Установка ТестОпс версии 5.x в Kubernetes
В разделе описывается, как установить и запустить ТестОпс версии 5.х в кластере Kubernetes с помощью нашего официального Helm-чарта.
Инструкция для версии 4.x перенесена в архив. Чтобы установить и запустить ТестОпс, пожалуйста, используйте только актуальную инструкцию.
Кластер Kubernetes — рекомендуемый способ запуска ТестОпс в производственной среде с высокой нагрузкой. Он позволяет масштабировать решение при возрастающей нагрузке и обновлять систему без ее остановки.
Поддержка аутентификации с использованием OpenID доступна, начиная с ТестОпс версии 5.6.0. Для серверного развертывания доступны OpenID, SAML2 и LDAP. Поддержка внешних провайдеров идентификационных данных в SaaS планируется в четвертом квартале 2024 года.
Миграция с ТестОпс версии 4.x
ТестОпс версии 5.х нельзя развернуть поверх версии 4.х. Для обновления необходима миграция данных в одну базу данных, а также переход на новый Helm-чарт.
Перейти на ТестОпс версии 5.х можно только с версии 4.26.5. Обновление с более старых версий приведет к сбоям в системе и потере данных.
Чтобы обновить ТестОпс версии 4.26.5 до версии 5.x, пожалуйста, обратитесь к руководству по миграции.
Перед объединением баз данных мы настоятельно рекомендуем перенести их на отдельный сервер и выполнить все миграции на этом сервере, если ваши базы данных расположены в подах с PVC (Persistent Volume Claim). В будущем такой вариант сэкономит вам время при миграциях и обновлениях.
Также рекомендуем создать резервные копии всех баз данных перед их объединением.
Подготовительные шаги для установки ТестОпс версии 5.x «с нуля»
-
Установите
kubectl
(руководство по установке на сайте Kubernetes). -
Установите Helm (руководство по установке на сайте Helm).
-
Разверните дополнительные сервисы, необходимые для запуска ТестОпс:
- сервер PostgreSQL версии 15 или выше (см. инструкцию по созданию базы данных);
- хранилище, совместимое с S3, такое как Amazon S3, Google Cloud Storage, MinIO или другое решение;
- службу очереди сообщений RabbitMQ;
- службу Redis.
ПримечаниеУстановка без выделенных внешних сервисов тоже возможна (например, в демоверсии ТестОпс), однако такой вариант предназначен только для оценочных целей и официально не поддерживается. Обслуживание и обновление подобной конфигурации могут привести к значительному времени простоя или потере данных. Мы не сможем помочь в решении проблем и восстановлении сервиса.
-
Получите лицензию для ТестОпс:
- Пробную лицензию можно получить, заполнив форму запроса на нашем сайте.
- Коммерческую лицензию можно приобрести через отдел продаж.
-
Получите подробную информацию о настройке аутентификации внутри вашей организации.
Данные, необходимые для настройки, зависят от того, какой подход к аутентификации пользователя вы выберете. Возможные варианты:
-
Стандартная аутентификация с помощью имени пользователя и пароля, реализованная в ТестОпс.
Этот вариант использует SMTP-сервер для отправки приглашений новым пользователям и не требует использования дополнительных сервисов.
-
Аутентификация через внешнего провайдера идентификационных данных (IdP).
Детали, необходимые для этого, могут отличаться в зависимости от типа используемого провайдера идентификационных данных. Подробная информация о настройках находится в соответствующих разделах документации.
-
Загрузка и изменение файла конфигурации
-
Определите номер самой последней (актуальной) версии Helm-чарта по ссылке.
-
Загрузите архив в формате TGZ для актуального релиза Helm-чарта на компьютер, где вы планируете выполнять подготовку конфигурационного файла:
-
При работе на Unix-подобной системе используйте команду
wget
для загрузки архива:wget https://dl.qatools.ru/repository/helm-charts/testops-<latest-release-number>.tgz
где вместо
<latest-release-number>
укажите номер актуальной версии Helm-чарта, например,5.10.2
. -
В других случаях откройте эту страницу и скачайте архив вручную.
-
-
Извлеките файл values.yaml из загруженного архива вручную или с помощью команды:
tar -xzvf testops-<latest-release-number>.tgz testops/values.yaml
где вместо
<latest-release-number>
укажите номер версии загруженного архива. Файл будет извлечен в директорию testops. -
Откройте файл values.yaml в текстовом редакторе.
Файл определяет параметры, которые будут влиять на поведение вашей инстанции ТестОпс. Для типичной настройки выполните следующие действия:
Выбор версии ТестОпс
В параметре version
укажите версию ТестОпс, которую вы хотите использовать, например:
version: 5.10.3
Шаги по установке актуальны для любой версии, начиная с ТестОпс 5.4.0. Мы рекомендуем использовать только последнюю доступную версию, так как она содержит новые возможности и улучшения в ТестОпс, а также исправления ошибок. Чтобы получить список доступных версий, ознакомьтесь с разделом Информация о релизах.
Реестр образов и репозиторий
Чтобы загрузить образ TecтОпс, в разделе image
укажите реес тр образов и репозиторий, из которого будет загружен образ:
image:
registry: reg.qatools.ru
repository: testops
imageName: testops
pullPolicy: IfNotPresent
authRequired:
enabled: true
username: имя пользователя, полученное через отдел продаж
password: пароль, полученный через отдел продаж
credsKubeSecretName: qatools-reg-pull-secret
Настройка URL-адреса ТестОпс
Укажите URL-адрес установки, определив три параметра:
instanceFqdn
— имя хоста, которое пользователи и интеграции, например CI-серверы, будут использовать для доступа к ТестОпс;port
— порт, который пользователи будут использовать для доступа к ТестОпс;network.tls.enabled
— при значенииtrue
контроллер Ingress в Kubernetes будет использовать протокол HTTPS вместо HTTP.
В приведенном ниже примере инстанс ТестОпс доступен по адресу “http://testops.example.com/” (используется порт 80 — стандартный порт для HTTP).
instanceFqdn: testops.example.com
port: 8080
# ...
network:
tls:
enabled: false
# ...
# ...
# ...
Настройка балансировщика нагрузки
Существует множество способов управления входящим и исходящим трафиком в кластере Kubernetes. Выбор лучшего варианта зависит от ваших конкретных потребностей. ТестОпс предлагает два решения для распространенных случаев использования:
- Чтобы использовать сервис Ingress, установите параметру
network.ingress.enabled
значениеtrue
. - Чтобы использовать сервис Istio, установите параметру
network.istio.enabled
значениеtrue
.
Настройка почты для первого администратора
Начиная с версии 5.4.0, необходимо настроить учетные данные SMTP во время установки. Начиная с версии 5.6.0, первый запуск ТестОпс невозможен без использования настроенного SMTP-сервера.
ТестОпс будет использовать учетные данные SMTP для отправки пригласительного письма первому администратору независимо от выбранного основного метода аутентификации. Адрес электронной почты администратора должен быть указан в параметре adminEmail
.
Ниже приведен пример параметров для учетной записи Gmail. Обратите внимание, что Google требует генерировать специальные пароли приложений для SMTP при включенной двухфакторной аутентификации. Другие почтовые службы, например Яндекс Почта, могут предъявлять аналогичные требования.
adminEmail: [email protected]
# ...
smtp:
enabled: true
host: smtp.gmail.com
port: 587
authEnabled: true
from: [email protected]
username: [email protected]
password: Ohku6Zo9gee5aen0
startTLSEnabled: true
startTLSRequired: true
sslEnabled: true
sslTrust: smtp.gmail.com
Настройка аутентификации
Необходимый шаг при развертывании ТестОпс - настройка того, как пользователи (кроме первого администратора) будут регистрироваться и входить в систему.
Ниже приведены примеры конфигурации для различных поставщиков идентификационных данных.
- Аутентификация с именем пользователя и паролем
- LDAP
- SAML2
- OpenID
auth:
primary: system
defaultRole: ROLE_GUEST
Установка defaultRole: ROLE_GUEST
полезна для контроля того, как используются лицензии, — пользователям с ролью ROLE_GUEST
не нужны лицензии, также они не имеют доступа к проектам.
# это пример, который не будет работать без внесения изменений
auth:
primary: ldap
defaultRole: ROLE_GUEST
ldap:
enabled: false
auth:
user: user
pass: SecretPaSSw0rd
referral: follow
url: ldap://ldap.example.com:389
usernamesToLowercase: false
passwordAttribute: userPassword
user:
dnPatterns: ""
searchBase: dc=example,dc=com
searchFilter: (&((objectClass=Person))(uid={0}))
syncRoles: false
uidAttribute: uid
group:
searchBase: ou=qa,ou=Security Groups,dc=example,dc=com
searchFilter: (&(objectClass=Person)(uid={1}))
roleAttribute: cn
userGroupName: allure_users
adminGroupName: allure_admins
# это пример, который не будет работать без внесения изменений
auth:
primary: saml2
saml:
enabled: false
id: "testsaml"
entityId: https://<testops>/api/login/saml2/authenticate/{registrationId}
acsUrl: https://<your-domain>/api/login/saml2/sso/{registrationId}
identityProviderMetadataUri: https:///path/to/metadata.xml
syncRoles: false
firstNameAttribute: firstNameAttribute
lastNameAttribute: lastNameAttribute
emailAttribute: emailAttribute
groups:
groupRoleAttribute: groupRoleAttribute
roleUserGroups: roleUserGroups
roleAdminGroups: roleAdminGroups
Начиная с ТестОпс версии 5.6.0 для серверного развертывания, вы можете использовать IdP, поддерживающих OpenID, для аутентификации пользователей. Эта функция отсутствовала в версиях с 5.0.0 по 5.5.0.
Чтобы настроить OpenID для аутентификации пользователей, настройте параметры в соответствии с настройками вашего решения IdP:
# это пример, который не будет работать без внесения изменений
auth:
primary: openid
defaultRole: ROLE_GUEST
openid:
enabled: true
clientName: testops
clientId: testops
providerName: keycloak
clientSecret: your_client_secret
redirectUri: https://<your-domain>/login/oauth2/code/<add_providerName_here>
scope: openid,email,profile
authorizationGrantType: authorization_code
authorizationUri: http://keycloak/realms/<you_realm>/protocol/openid-connect/auth
userinfoUri: http://keycloak/realms/<you_realm>/protocol/openid-connect/userinfo
issuerUri: http://keycloak/realms/<you_realm>
usernameAttribute: preferred_username
defaultRole: ROLE_GUEST
syncRoles: false
groupRoleAttribute: groupRoleAttribute
roleUserGroups: roleUserGroups
roleAdminGroups: roleAdminGroups
где:
-
primary: openid
— устанавливает OpenID как основной метод аутентификации пользователей. -
openid.enabled
— включает OpenID как метод аутентификации пользователей. -
defaultRole
— определяет роль нового пользователя, зарегистрированного через OpenID.Допустимые роли:
- ROLE_GUEST (гость) — предпочтительный вариант для контроля за тем, как используются лицензии;
- ROLE_USER (стандартный пользователь) — используется, если вы уверены, что человек имеет лицензионное место в ТестОпс;
- ROLE_ADMIN (администратор) — мы рекомендуем избегать этого варианта, так как неопытный пользователь с правами администратора может нарушить процессы и удалить данные.
-
openid.clientName
— устанавливается на стороне IdP для ТестОпс как клиент OpenID. -
openid.clientId
— устанавливается на стороне IdP для ТестОпс как идентификатор клиента OpenID. -
openid.providerName
— краткое название поставщика OpenID, которое отображается на экране входа, например, «Войти через${openid.providerName}
».- Атрибут должен содержать одно слово без пробелов и специальных символов, например, keycloak.
- Атрибут также используется в
openid.redirectUri
(см. ниже).
-
openid.clientSecret
— сгенерирован на стороне IdP для аутентификации клиента (ТестОпс действует как клиент для IdP). -
openid.redirectUri
— URI для перенаправления OpenID, состоит из:- URL-адреса инстанса ТестОпс;
- фиксированной части
/login/oauth2/code/
; - атрибута
providerName
.
Пример —
https://testops.company.com/login/oauth2/code/keycloak
. -
Эндпоинты следующих атрибутов генерируются на стороне OpenID IdP, их значения необходимо взять из конфигурации OpenID:
openid.authorizationUri
,openid.userinfoUri
,openid.issuerUri
.
-
openid.syncRoles
— определяет, должен ли использоваться набор groups для установки глобальных ролей пользователей, если они состоят в определенной группе на стороне IdP. -
openid.roleAdminGroups
— определяет список групп (через запятую), в которых предоставляется роль ROLE_ADMIN. -
openid.roleUserGroups
определяет список групп (через запятую), в которых предоставляет роль ROLE_USER.
Иные параметры настраивать не требуется.
Настройка сервисов хранения данных
Чтобы подключиться к сервисам хранения данных, которые используются в ТестОп с, определите параметры для:
-
подключения к серверу Redis:
redis.host
— имя хоста сервера;redis.port
— порт сервера;redis.auth.password
— пароль для подключения к хранилищу.
-
подключения к базе данных PostgreSQL:
postgresql.enabled
— при значенииtrue
Kubernetes создаст новую базу данных внутри кластера вместо использования параметров подключения. Не рекомендуется для производственной среды;datasources.mainDatasource.dbHost
— имя хоста сервера базы данных;datasources.mainDatasource.dbPort
— порт сервера базы данных;datasources.mainDatasource.dbName
— имя базы данных;datasources.mainDatasource.username
— имя пользователя для подключения к базе данных;datasources.mainDatasource.password
— пароль для подключения к базе данных.
См. раздел Разделение пулов соединений о настройке пулов соединений базы данных для различных типов операций.
-
подключения к серверу RabbitMQ:
rabbitmq.enabled
— при значенииtrue
Kubernetes создаст новый сервер RabbitMQ внутри кластера вместо использования пара метров подключения. Не рекомендуется для производственной среды;rabbitmq.hosts
— список местоположений серверов, разделенных запятыми, в формате AMQP;rabbitmq.auth.username
— имя пользователя для подключения к очереди сообщений;rabbitmq.auth.password
— пароль для подключения к очереди сообщений.
-
подключения к серверу хранения данных, совместимому с S3:
minio.enabled
— при значенииtrue
Kubernetes создаст новый сервер S3 внутри кластера вместо использования параметров подключения. Не рекомендуется для производственной среды;storage.s3.endpoint
— URL-адрес сервера;storage.s3.bucket
— имя бакета S3;storage.s3.region
— имя региона S3;storage.s3.accessKey
— ключ доступа для подключения к бакету;storage.s3.secretKey
— секретный ключ для подключения к бакету.
Некоторые дополнительные параметры могут быть изменены для тонкой настройки производительности или поддержки нестандартных конфигураций сервисов хранения. Проверьте комментарии в файле values.yaml и при необходимости проконсультируйтесь со службой поддержки ТестОпс.
Развертывание ТестОпс
Установка чарта
После подготовки файла values.yaml вы можете установить Helm-чарт и запустить ТестОпс.
-
Откройте терминал.
-
Подключите Kubernetes к репозиторию Helm:
helm repo add qatools https://dl.qatools.ru/repository/helm-charts --username <username> --password <password>
где
username
иpassword
— учетные данные, предоставленные отделом продаж. -
Обновите данные репозитория:
helm repo update
-
Перейдите в директорию, содержащую файл values.yaml, например:
cd ~/testops
Развертывание приложения
-
Разверните ТестОпс с помощью Helm-чарта и сконфигурированного файла values.yaml:
helm upgrade --install testops qatools/testops \
-f values.yaml \
--set probes.enabled=false \
--namespace testops \
--create-namespaceНа этом этапе вам нужно дождаться завершения двух длительных операций:
- Перед запуском каких-либо сервисов Kubernetes должен загрузить необходимые образы из реестра.
- Во время запуска сервис ТестОпс должен инициализировать свою базу данных.
При первом запуске ТестОпс применяет изменения к схеме базы данных. Ее инициализация может занять больше времени, чем указано в таймауте сервиса. Чтобы Kubernetes не останавливал сервисы из-за таймаутов, в команде выше используется аргумент
--set probes.enabled=false
, который отключает проверки готовности и жизнеспособности сервисов. Аргумент используется при каждом обновлении ТестОпс, если в информации о релизах указано, что для релиза необходима миграция данных внутри базы данных. -
Дождитесь готовности развертывания testops-testops.
Используйте
kubectl get all
, чтобы просмотреть статус развертываний и подов. Когда каждый под примет статусRunning
, инициализация ТестОпс будет завершена. -
После завершения инициализации включите проверки готовности и жизнеспособности сервисов, которые были отключены во время установки. Для этого выполните обновление чарта без аргумента
--set probes.enabled=false
:helm upgrade testops qatools/testops -f values.yaml --namespace testops
Первый запуск
При первом запуске ТестОпс необходимо ввести лицензионный ключ. Для этого выполните действия:
-
Запустите ТестОпс.
-
После запуска ТестОпс вам придет письмо с приглашением на адрес, который вы указали в
adminEmail
. В полученном письме нажмите Принять приглашение.ПримечаниеЕсли в браузере появляется ошибка «Невозможно подключиться» (“Unable to connect”) или «Сайт недоступен» (“This site can't be reached”), это может означать, что некоторые сервисы все еще инициализируются.
Если через 5 минут браузер все еще не сможет открыть страницу, обратитесь к разделу Устранение неполадок.
-
В форме принятия приглашения введите полное имя администратора и учетные данные, которые будут использоваться для входа в систему: Имя пользователя и Пароль. Имя пользователя должно быть уникальным в пределах инстанса ТестОпс.
Нажмите Продолжить.
-
В форме активации введите лицензионный ключ, который вы получили от отдела продаж. Убедитесь, что вы указываете ключ без лишних пробелов и других символов.
Нажмите Активировать лицензию.
Обновление
Перед началом обязательно ознакомьтесь с информацией о релизах для версии ТестОпс, на которую вы обновляетесь. В комментариях к релизу может содержаться важная информация о том, как адаптировать конфигурационные файлы или мигрировать данные на новую версию ТестОпс. Если вы пропускаете одну или несколько версий, также прочитайте комментарии к пропущенным версиям.
-
Откройте терминал.
-
Обновите данные репозитория:
helm repo update
-
Перейдите в директорию, содержащую файл values.yaml, например:
cd ~/testops
-
Выполните обновление:
helm upgrade testops qatools/testops -f values.yaml --namespace testops --set probes.enabled=false
На этом этапе вам нужно дождаться завершения двух длительных операций:
- Перед запуском каких-либо сервисов Kubernetes должен загрузить необходимые образы из реестра.
- Во время запуска сервису ТестОпс потребуется повторно инициализировать свою базу данных.
Аргумент
-set probes.enabled=false
, используемый в команде, отключает проверки готовности и жизнеспособности сервисов. Это позволяет Kubernetes не останавливать сервисы из-за таймаутов. Аргумент можно не использовать, если в информации о релизах не указано, что для релиза необходима миграция данных внутри базы данных. -
Дождитесь готовности развертывания testops-testops.
Используйте
kubectl get all
, чтобы просмотреть статус развертываний и подов. Когда каждый под примет статусRunning
, инициализация ТестОпс будет завершена. -
После завершения повторной инициализации включите проверки готовности и жизнеспособности сервисов, которые были отключены во время установки. Для этого снова выполните обновление чарта, но уже без аргумента
-set probes.enabled=false
:helm upgrade testops qatools/testops -f values.yaml --namespace testops
Удаление
Чтобы удалить инстанс ТестОпс, выполните команду:
helm delete testops --namespace testops && kubectl delete namespace testops