Запуск внешних агентов для нагрузочного тестирования
Yandex Load Testing можно использовать для нагрузочного тестирования сервисов с помощью внешних агентов.
Внешний агент — физический или виртуальный сервер с инструментом для тестирования и генераторами нагрузки, который размещен вне сервиса Load Testing.
Запуск и просмотр результатов нагрузочного тестирования с внешнего агента идентичны работе с агентом Load Testing. Подробнее см. Как начать работать с Yandex Load Testing.
Нагрузочное тестирование с внешнего агента применяется в следующих случаях:
- цель тестирования состоит из нескольких виртуальных машин, а суммарный входящий и исходящий трафик с них превышает возможности агента Load Testing;
- запросы, которые направляются в цель тестирования, требуют много вычислительных мощностей;
- агент должен размещаться в собственной инфраструктуре по правилам информационной безопасности;
- вычислительные ресурсы ВМ Compute Cloud ограничены.
Чтобы провести нагрузочное тестирование с внешнего агента:
- Подготовьте облако к работе.
- Подготовьте инфраструктуру.
- Настройте окружение.
- Установите внешний агент.
- Запустите внешний агент.
- Создайте тест.
- Посмотрите результаты тестирования.
Если подключенный внешний агент вам больше не нужен, удалите его из Load Testing.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
На стадии Preview использование сервиса Load Testing не тарифицируется.
Подготовьте инфраструктуру
Настройте сервисный аккаунт
-
Создайте сервисный аккаунт, например
sa-loadtest
, в каталоге, где будет подключен внешний агент. -
Назначьте сервисному аккаунту роли
loadtesting.editor
иloadtesting.generatorClient
. -
Создайте авторизованные ключи для сервисного аккаунта.
Сохраните открытый и закрытый ключи единым файлом, для этого нажмите кнопку Скачать файл с ключами.
Создайте секрет с авторизованными ключами
-
В консоли управления
выберите каталог, где будет подключен внешний агент. -
В списке сервисов выберите Lockbox.
-
Нажмите кнопку Создать секрет.
-
В поле Имя введите имя секрета, например
secret-loadtest
. -
В блоке Версия:
- в поле Ключ введите неконфиденциальный идентификатор, например
key-loadtest
; - в поле Значение загрузите файл с открытым и закрытым авторизованными ключами.
- в поле Ключ введите неконфиденциальный идентификатор, например
-
Нажмите кнопку Создать.
Сохраните имя и ключ секрета.
Настройте окружение
-
Установите и инициализируйте интерфейс командной строки Yandex Cloud.
-
Установите
и запустите Docker. -
Аутентифицируйтесь в Container Registry от имени пользователя или с помощью Docker Credential Helper.
Используйте эндпоинт реестра с Docker-образами внешних агентов:
cr.yandex/yc/
.
Установите внешний агент
-
Скачайте Docker-образ с внешним агентом, в терминале выполните команду:
docker pull cr.yandex/yc/ya-lt-agent:latest
Результат:
latest: Pulling from yc/ya-lt-agent df6635ed1257: Pull complete 7a51fa4387ba: Pull complete Digest: sha256:fad262e94a8b4021b13336ae31c738ec1e77eb6a8971528429c67d2827f1e47b Status: Downloaded newer image for cr.yandex/yc/ya-lt-agent:latest cr.yandex/yc/ya-lt-agent:latest
-
Скачайте файл с открытым и закрытым авторизованными ключами из Lockbox:
yc lockbox payload get <имя_секрета> \ --key <ключ_секрета> \ > <имя_файла>
Где:
<имя_секрета>
— имя секрета с авторизованными ключами, напримерsecret-loadtest
.<ключ_секрета>
— неконфиденциальный идентификатор секрета с авторизованными ключами, напримерkey-loadtest
.<имя_файла>
— имя файла, в который сохраняются авторизованные ключи, напримерsecret-key.json
.
Важно
В среде Windows при выполнении команды используйте консоль командной строки CMD. В Powershell файл скачивается с некорректной кодировкой. Убедитесь, что кодировка скачанного файла —
UTF-8
. -
Создайте конфигурационный файл для внешнего агента, например
config.yaml
, и скопируйте в него следующие параметры:client_workdir: '/var/lib/tank_agent/client' tankapi_host: localhost tankapi_port: 8083 load_testing_host: 'loadtesting.api.cloud.yandex.net' load_testing_port: '443' logging_host: 'ingester.logging.yandexcloud.net' logging_port: '443' object_storage_url: 'https://storage.yandexcloud.net' storage_file: '/tmp/yandex-tank/storage.data' iam_token_service_url: 'iam.api.cloud.yandex.net:443' agent_id_file: '/run/agentid' private_key: '/run/sa_key.json' agent_name: <имя_внешнего_агента> folder_id: <идентификатор_каталога>
Где:
agent_name
— имя внешнего агента, напримерexternal-agent
.folder_id
— идентификатор каталога, где будет подключен внешний агент.
Запустите внешний агент
-
Чтобы запустить Docker-контейнер с внешним агентом, в терминале выполните команду:
docker run \ -it \ --mount type=bind,source=<путь_к_файлу_с_авторизованными_ключами>,target=/run/sa_key.json \ --mount type=bind,source=<путь_к_конфигурационному_файлу>,target=/run/config.yaml \ --env LOADTESTING_AGENT_CONFIG=/run/config.yaml \ cr.yandex/yc/ya-lt-agent:latest
Где:
<путь_к_файлу_с_авторизованными_ключами>
— абсолютный путь к файлу с авторизованными ключами, например/home/user/secret-key.json
.<путь_к_конфигурационному_файлу>
— абсолютный путь к конфигурационному файлу, например/home/user/config.yaml
.
Также конфигурацию внешнего агента можно задать с помощью переменных окружения для разных Docker-контейнеров.
Пример запуска внешнего агента с переменными окружения
docker run \ -it \ --mount type=bind,source=<путь_к_файлу_с_авторизованными_ключами_в_ОС_хоста>,target=/run/sa_key.json \ --env LOADTESTING_AGENT_CONFIG=<путь_к_конфигурационному_файлу_в_контейнере> \ --env LOADTESTING_AGENT_NAME='<имя_внешнего_агента>' \ --env LOADTESTING_FOLDER_ID='<идентификатор_каталога>' \ --env LOADTESTING_SA_KEY_FILE=<путь_к_файлу_с_авторизованными_ключами_в_контейнере> \ cr.yandex/yc/ya-lt-agent:latest
Где:
LOADTESTING_AGENT_CONFIG
— (обязательный параметр) путь к конфигурационному файлу внешнего агента в контейнере.LOADTESTING_AGENT_NAME
— имя внешнего агента.LOADTESTING_FOLDER_ID
— идентификатор каталога.LOADTESTING_SA_KEY_FILE
— путь к файлу с авторизованными ключами в контейнере.
Вместо файла с авторизованными ключами можно использовать следующие переменные окружения:
LOADTESTING_SA_ID
— идентификатор сервисного аккаунта.LOADTESTING_SA_KEY_ID
— идентификатор авторизованного ключа сервисного аккаунта.LOADTESTING_SA_KEY_PAYLOAD
— значение закрытого авторизованного ключа сервисного аккаунта.
Внешний агент авторизуется с помощью JWT.
При каждом запуске Docker-контейнера внешний агент будет получать новый идентификатор в Load Testing. Вы можете сохранить один и тот же идентификатор между запусками, например, чтобы привязать результаты тестирования к конкретному агенту. Для этого используйте том Docker для хранения файла с идентификатором внешнего агента (параметр
agent_id_file
в конфигурационном файле агента). Данные в томе хранятся независимо от Docker-контейнера: если вы остановите или удалите контейнер, то том и данные в нем останутся.Пример запуска внешнего агента с постоянным идентификатором
Создайте том Docker, например
external_agent_1_volume
:docker volume create external_agent_1_volume
Запустите внешний агент с подключенным томом:
docker run \ -it \ --mount source=external_agent_1_volume,target=/run \ --mount type=bind,source=<путь_к_файлу_с_авторизованными_ключами>,target=/run/sa_key.json \ --mount type=bind,source=<путь_к_конфигурационному_файлу>,target=/run/config.yaml \ --env LOADTESTING_AGENT_CONFIG=/run/config.yaml \ cr.yandex/yc/ya-lt-agent:latest
-
Проверьте, что внешний агент доступен в Load Testing:
Консоль управления-
В консоли управления
выберите сервис Load Testing. -
На панели слева перейдите на вкладку
Операции. -
Убедитесь, что операция Register an agent успешно завершена.
-
На панели слева перейдите на вкладку
Агенты. -
Убедитесь, что внешний агент, например
external-agent
, находится в статусеReady for test
.
-
Создайте тест
Выполните нагрузочное тестирование. В поле Агенты выберите внешний агент, например external-agent
.
Посмотрите результаты тестирования
- В консоли управления
выберите сервис Load Testing. - На панели слева перейдите на вкладку Тесты.
- Выберите созданный ранее тест и посмотрите результаты.
Как удалить созданные ресурсы
Чтобы удалить внешний агент из Load Testing:
- В консоли управления
выберите сервис Load Testing. - На панели слева перейдите на вкладку
Агенты. - Напротив агента, который вы хотите удалить, нажмите
и выберите Удалить. - Подтвердите удаление.