Автоматическое масштабирование CI с помощью Kraken CI

Kraken CI — это современная локальная система CI/CD с открытым исходным кодом, которая обладает высокой масштабируемостью и ориентирована на тестирование. Kraken CI имеет лицензию Apache 2.0. Исходный код системы доступен на странице Kraken CI GitHub.

Вступление

Обслуживание нескольких машин может быть дорогостоящим для Kraken CI. Когда нет большого потока сборок, некоторые машины простаивают и тратят энергию впустую. Решением этой проблемы стало автоматическое масштабирование. Суть его заключается в том, что машины динамически создаются агентами Kraken в зависимости от текущих потребностей. Если намечается новый поток со многими заданиями по сборке или тестированию, то будут созданы новые машины. Когда поток заданий завершается, машины прекращают работу, избавляя систему от лишних затрат.

В настоящее время автоматическое масштабирование Kraken CI поддерживает виртуальные машины AWS EC2.

Мы уделим внимание следующим моментам:

  • как получить доступ к AWS;
  • как настроить параметры и работу созданных машин;
  • как определить задание для AWS.

Подробную информацию о конфигурации можно найти в документации Kraken docs.

Глобальные облачные настройки

Чтобы получить доступ к определенному облачному провайдеру, необходимо настроить глобальные параметры. Для этого в веб-интерфейсе Kraken на странице “Настройки” (Settings) нужно открыть вкладку “Облако” (Cloud). Там будет форма для сбора учетных данных облачных провайдеров:

Глобальные настройки в облаке AWS

В случае AWS предусмотрены два ключа доступа: обязательный (Access Key) и секретный (Secret Access Key). После заполнения этой формы и сохранения настроек можно проверить, работают ли они, нажав кнопку тестового доступа (Test Access).

Подготовка облачной среды

В случае AWS также требуется назначить надлежащие разрешения, чтобы Kraken мог создавать или уничтожать экземпляры EC2. Список всех необходимых разрешений выглядит следующим образом:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:DescribeInstances",
                "ec2:TerminateInstances",
                "ec2:CreateKeyPair",
                "ec2:CreateTags",
                "ec2:DescribeRegions",
                "ec2:RunInstances",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeInstanceTypeOfferings",
                "ec2:DescribeVpcs",
                "ec2:CreateSecurityGroup",
                "ec2:DeleteKeyPair",
                "ec2:DescribeInstanceStatus"
            ],
            "Resource": "*"
        }
    ]
}

Конфигурация в группах агентов

Указав учетные данные облачных провайдеров, переходим к настройке аспектов создания новых машин. Это можно сделать на странице Kraken “Агенты” (Agents) во вкладке “Группы Агентов” (Agent Groups). Создадим новую группу агентов, нажав кнопку “Добавить новую группу” (Add New Group) и назвав ее aws-t2-micro. Вновь созданные сведения будут представлены на отдельной вкладке. На этой вкладке есть раздел “Развертывание Агентов” (Agents Deployment). Развертывание может быть как ручным (по умолчанию), так и автоматическим для конкретного поставщика облачных услуг. К примеру, для Amazon Web Services можно задать следующие параметры:

Группа агентов с настройками AWS

Выберите любой регион, который вам подходит. Установите ограничение на количество экземпляров. Если оно будет равным 2, у вас не будет больше 2 работающих машин. В данный момент поле “AMI по умолчанию” остается пустым.

Затем в графе “Опции виртуальной машины” (VM options) перейдем на уровень AWS free и выберем тип экземпляра t2.micro. Остальные формы оставляем пустыми. “Сценарий инициализации” (Init Script) также может быть пустым.

Чтобы обезопасить ваш бюджет от “съедения” незадействованными экземплярами, установите параметры в графе “Уничтожение” (Destruction): 1 задание / 10 минут. Таким образом, созданная машина будет остановлена после выполнения 1 задания. В случае простоя более 10 минут, она также будет уничтожена.

Определение задания

Теперь, чтобы использовать определенную нами группу агентов aws-t2-micro, нужно подготовить проект с веткой и стадией. Более подробную информацию об этом можно найти во Вводном руководстве. Сейчас сосредоточимся на определении задания.

{
    "parent": "root",
    "triggers": {
        "parent": True
    },
    "configs": [],
    "jobs": [{
        "name": "hello",
        "timeout": 500,
        "steps": [{
            "tool": "shell",
            "cmd": "echo 'hello world'"
        }],
        "environments": [{
            "system": "ami-0967f290f3533e5a8",
            "agents_group": "aws-t2-micro",
            "config": "default"
        }]
    }]
}

По сравнению с обычными заданиями Kraken, здесь нет большой разницы. В секции определенных сред (environments) отмечаем группу агентов: aws-t2-micro. Что нового, так это системное поле, в котором указывается AMI-идентификатор — отображение AWS EC2.

Запуск

Теперь, когда назначено задание группе агентов с настроенным развертыванием, для него нужно создать новую машину, если агенты недоступны в Kraken.

Изменим представление на представление результатов ветвления (Branch Results) и запустим новый поток, нажав кнопку “Запустить поток” (Run Flow). На странице выполнения в списке заданий отображается наше задание AWS:

Задание, выполненное в AWS EC2

Вот и все!

Читайте также:

Читайте нас в Telegram, VK и Яндекс.Дзен


Перевод статьи Michal Nowikowski, Autoscaling CI with Kraken CI

Предыдущая статьяЗвучащий UI: роль звуков в интерфейсе
Следующая статьяОсновы обработки естественного языка за 10 минут