Обновить
0.51

Serverless *

Технологии бессерверных вычислений

Сначала показывать
Порог рейтинга

Запуск GitLab Runner в Yandex Cloud Serverless Containers

Я Павел Елисеев, старший разработчик в команде Serverless в Yandex Cloud. Мы реализовали сценарий использования сервиса — Serverless GitLab Runner. В посте покажу архитектуру и поделюсь кодом решения.

GitLab Runner — агент, выполняющий задачи (jobs) из CI/CD‑пайплайнов GitLab. Он получает инструкции от GitLab, запускает сборку, тесты или деплой в нужной среде и передаёт результат обратно.

Раннер работает в разных окружениях:

  • на общих серверах GitLab (shared runners);

  • на выделенных VM;

  • в K8s‑кластере.

В первом варианте репозитории должны размещаться на gitlab.com. В случае Managed GitLab или self‑hosted GitLab развёртывание выполняется самостоятельно.

Для shared‑раннеров free‑tier ограничен 400 мин./мес. Учёт идёт по формуле (duration × price-factor), так что число доступных минут зависит от используемого типа раннера. А за пределами лимита нужна привязка не российской банковской карты.

Serverless‑сценарии пытались реализовать на Cloud Functions, что требовало отдельной VM и сложной конфигурации. А мы хотели объединить плюсы serverless‑модели с CI‑задачами:

  • оплата за время

  • масштабирование за секунды

  • изоляция выполнения

  • отсутствие инфраструктурной рутины

Архитектура

GitLab Runner работает по модели pull: запускает процесс, устанавливающий long‑polling‑соединение с GitLab API, и ожидает появления задач.

Пришла задача — раннер выбирает executor:

  • shell — job выполняется в текущем окружении

  • docker — под job создаётся отдельный контейнер со всеми зависимостями

Эта модель плохо подходит для serverless‑окружения, где нельзя держать постоянно активный процесс.

Для перехода на push‑модель используем GitLab Webhooks — HTTP‑уведомления о событиях. С появлением задач GitLab отправляет вебхук в Serverless Container, который:

  • запускает раннер;

  • получает информацию о задаче;

  • выполняет её и возвращает результат в GitLab.

Так, выполнение задачи инициируется событием, а не постоянным опросом API.

Для упрощённого развёртывания есть лёгкий образ раннера с поддержкой docker-executor, размещённый в Container Registry. Раннер автоматически загружает и запускает контейнер, указанный в конфигурации job. Секреты для аутентификации в GitLab API хранятся в Lockbox.
Для упрощённого развёртывания есть лёгкий образ раннера с поддержкой docker-executor, размещённый в Container Registry. Раннер автоматически загружает и запускает контейнер, указанный в конфигурации job. Секреты для аутентификации в GitLab API хранятся в Lockbox.

GitLab требует от обработчика вебхуков быстрого ответа без ошибки. А выполнение задачи может занимать часы. Поэтому вебхуки обрабатываются асинхронно:

  1. GitLab отправляет вебхук.

  2. Платформа проверяет авторизацию и сразу отвечает 202 Accepted.

  3. Обработка выполняется асинхронно в фоне.

Платформа решает, запускать ли новый экземпляр контейнера. Когда job завершается, контейнер остаётся активным какое‑то время, чтобы обработать вызовы без cold‑start.

GitLab не отправляет событие «создание job», поэтому раннер сперва проверяет, есть ли задачи со статусом pending.

Для docker‑executor требуется dockerd. Инициализация демона и подготовка окружения выполняются 1 раз при старте контейнера. Если job найдётся, запускается эфемерный раннер, исполняющий ровно 1 задачу.

Раннер загружает docker‑образ, выполняет команды, передаёт результат обратно через GitLab API.

Используемые возможности Serverless Containers

  1. Эфемерные диски до 10 ГБ на контейнер

  2. Асинхронный запуск контейнеров

  3. Таймаут выполнения до 1 часа

  4. Docker внутри Serverless Containers. Это не Docker‑in‑Docker: внутри serverless‑контейнера jobs исполняются без отдельного демона Docker, но с аналогичной логикой. Примеры есть в исходном коде.

Важные особенности serverless‑подхода

  • Эфемерность: кеш между вызовами отсутствует. Для хранения артефактов используйте Object Storage или свои базовые образы.

  • Загрузка образов: выполняется при каждом запуске. Рекомендуем использовать оптимизированные образы и близкий реестр (Cloud Registry), а при критичных требованиях к скорости старта — перейти на shell‑executor, собрав образ с установленным раннером и нужными зависимостями.

  • Ограничение времени: не более 1 часа. Для длинных задач разделите пайплайн на этапы с промежуточным сохранением результатов.

  • Ограничение по диску: до 10 ГБ.

Сценарий Serverless GitLab Runner позволяет выполнять CI/CD‑задачи GitLab, оплачивая лишь время выполнения job. Serverless Containers дают возможности для CI‑нагрузок: асинхронные вызовы, часовой таймаут, эфемерный диск и поддержку docker‑executor внутри контейнера.

Теги:
+17
Комментарии0

Бессерверные вычисления: почему ваш код может стать заложником провайдера

Бессерверная архитектура обещает не думать об инфраструктуре, но скрывает риски vendor lock-in, которые проявятся слишком поздно. Пока вы наслаждаетесь отсутствием серверов, ваша бизнес-логика медленно превращается в заложника облачного провайдера.

Проблема:

  • Cold start в критичных приложениях достигает 10-15 секунд

  • Стоимость непредсказуема при скачках нагрузки

  • Локальная разработка и отладка превращаются в квест

Реальные кейсы:

python

# Проблема: разрыв между продакшеном и локальной средой
def lambda_handler(event, context):
    # На локальной машине работает
    # В AWS Lambda падает с таймаутом
    return expensive_operation()  # 25+ секунд

Что мониторим в бессерверной среде:

  1. Performance

    • Холодные/горячие старты

    • Потребление памяти

    • Execution duration

  2. Безопасность

    • Права IAM-ролей

    • Доступ к секретам

    • Цепочки вызовов функций

  3. Экономика

    • Стоимость вызова

    • Количество параллельных исполнений

    • Использование сторонних сервисов

Когда бессервер оправдан:

  • Обработка событий с неравномерной нагрузкой

  • Фоновые задачи (генерация отчетов, ночные джобы)

  • API с низким RPS

Альтернативы:

  • Kubernetes + Knative — гибридный подход

  • Cloudflare Workers — edge-вычисления

  • Self-hosted FaaS — полный контроль

Вывод:
Бессерверные технологии — мощный инструмент, но требуют тщательного проектирования и постоянного мониторинга затрат. Прежде чем погружаться в serverless, оцените, готовы ли вы к зависимости от вендора и непредсказуемым расходам.

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии0

Как работать с новым сервисом для контейнерной разработки — узнайте на IT-конференции GoCloud про облака📝

Всем привет!

На прошлой неделе приглашали вас на конференцию GoCloud про облака, а сегодня расскажем про один из докладов программы.

💭Тема: Как разработать и запустить приложения с помощью сервиса Cloud.ru Evolution Container Apps

📅 Когда: 21 марта в 12:35 мск

Вы узнаете, как разрабатывать и разворачивать cloud native приложения и микросервисы с помощью serverless-технологии. А еще покажем сценарии использования сервиса Cloud.ru Evolution Container Apps при разработке full-stack и веб-приложений.

👉 Зарегистрироваться на GoCloud

Полезное в блоге:

Теги:
Всего голосов 4: ↑3 и ↓1+2
Комментарии1

«Циан» перенесла за 6 недель более 500 микросервисов, 2 монолитных приложения и 500 ТБ своих данных на платформу Yandex Cloud без перерывов в работе сервиса, включая Terraform и Salt.

Миграция проходила в рамках совместной работы специалистов «Циан» и поддержки Yandex Cloud. На облачную платформу они перенесли системы управления базами данных, очереди сообщений и поисковую систему. Данные поступают в объектное хранилище. Для эффективной работы с микросервисами компания использует Yandex Managed Service for Kubernetes.

Технологический стек компании включает Python, C#, Node.js. Работа с данными велась в PostgreSQL, MSSQL, Cassandra, Elasticsearch; приём и отправка сообщений — в RabbitMQ и Kafka.

Подготовительный этап миграции в Yandex Cloud занял 4 месяца. Из них 2 месяца ушло на проверку осуществимости миграции.

За полтора месяца миграции микросервисы и один монолит перенесли в Yandex Managed Service for Kubernetes, а монолит на Windows IIS — на виртуальные машины Compute Cloud. Для хранения данных используют объектное хранилище Object Storage, для гибкой работы с документоориентированными моделями данных — Managed Service for MongoDB, для эксплуатации и администрирования реляционных баз данных — Managed Service for PostgreSQL и Managed Service for MySQL.

Чтобы избежать даунтаймов, пришлось сделать утилиту для миграции микросервисов, развернуть несколько кластеров на Vanilla Kubernetes, синхронизатор эндпоинтов, перейти на нереплицируемые SSD для работы MSSQL.

Теги:
Рейтинг0
Комментарии0