Spinnaker

Spinnaker — это современная open-source платформа для управления непрерывной доставкой (Continuous Delivery), которая позволяет автоматизировать процессы сборки, тестирования и развертывания приложений. Будучи открытым программным обеспечением, Spinnaker предоставляет широкие возможности для интеграции с различными инструментами и сервисами, что делает его универсальным решением для команд разработчиков. Он успешно работает с такими популярными системами, как Jenkins (для CI-процессов), GitLab (для управления репозиториями и пайплайнами), Docker (для контейнеризации), Kubernetes (для оркестрации) и многими другими облачными платформами. Благодаря своей гибкости, Spinnaker может быть легко адаптирован под нужды конкретной команды или проекта, предоставляя мощные инструменты для создания сложных конвейеров доставки. Открытый исходный код платформы позволяет сообществу разработчиков активно участвовать в её развитии, добавляя новые функции, исправляя ошибки и расширяя список поддерживаемых интеграций, что делает Spinnaker ещё более привлекательным выбором для компаний любого масштаба.

Давайте немного пройдемся по архитектуре Spinnaker и основной терминологии.

Сервисы Spinnaker:

Spinnaker состоит из одиннадцати таких сервисов:

Сервисы
Сервисы

● Deck: Этот микросервис представляет собой браузерный пользовательский интерфейс, отвечающий за визуализацию текущего состояния облачных ресурсов. Это фронтенд-сервис для Spinnaker. Deck взаимодействует с микросервисом Gate.

● Gate: Gate, как следует из названия, является API-шлюзом, который соединяет все остальные сервисы. Gate отвечает за все коммуникации между пользовательским интерфейсом и другими сервисами бэкенда. Он обрабатывает аутентификацию и авторизацию для API подсервисов и ресурсов в Spinnaker. Также он отвечает за API-вызовы к Spinnaker.

● Orca: Этот сервис является координационным движком Spinnaker. Основная ответственность этого сервиса — управление ad-hoc операциями, такими как этапы и задачи в пайплайне, а также координация с другими сервисами. Он обеспечивает плавную и корректную передачу состояний и исполнений подсервисов. Наименьшая единица в Orca — это задача. Пайплайны состоят из этапов, а этапы — из задач.

● CloudDriver: Этот сервис отвечает за взаимодействие с различными облачными провайдерами, включая AWS, Kubernetes и другие. Он также занимается кэшированием/индексацией всех ресурсов, развернутых в облаке. CloudDriver делает Spinnaker мультиоблачным приложением.

● Front50: Этот сервис отвечает за отслеживание всей метаинформации, доступной для проектов, приложений, пайплайнов и уведомлений.

● Roscoe: Этот сервис, по сути, является «пекарней», отвечающей за создание постоянных образов виртуальных машин для облачных провайдеров, которые будут развернуты. В основном он создает образы машин (например, GCE images, AWS AMIs, Azure VM images).

● Igor: Этот сервис отвечает за подключение и запуск пайплайнов для платформ непрерывной интеграции, таких как Jenkins, Travis и других, в Spinnaker. Он отвечает за запуск задач и последующую отчетность о текущем состоянии выполняющихся или завершенных задач.

● Echo: Этот сервис отвечает за обработку событий, таких как отправка уведомлений (email, Slack и т.д.), а также управляет всеми входящими вебхуками в Spinnaker. Он также известен как шина событий для Spinnaker.

● Fiat: Этот сервис является сервисом авторизации Spinnaker. Он отвечает за предоставление пользователям прав доступа к аккаунтам, сервисным аккаунтам и приложениям.

● Kayenta: В управлении выпуском приложений раннее обнаружение проблем при развертывании новой версии очень важно. Эта система предупреждения для обнаружения проблем называется Canary-анализом. Этот сервис отвечает за автоматизацию Canary-анализа для Spinnaker.

● Halyard: Этот сервис является конфигурационным движком Spinnaker. Он управляет жизненным циклом всех вышеупомянутых сервисов. Он взаимодействует с этими сервисами только во время установки, настройки и обновления Spinnaker.

Терминология Spinnaker:

Приложение (Application)

Приложение в Spinnaker представляет то, что обычно находится в одном репозитории кода. Во многих случаях приложение напрямую соответствует микросервису.

Кластер (Cluster)

Группа серверов (Server Group) представляет региональное представление серверов, тогда как кластер — это глобальное представление групп серверов.

Выполнение (Execution)

Когда запускается pipeline, конечный результат называется выполнением (execution).

Pipeline

Pipeline в Spinnaker — это последовательность этапов (stages), связанных вместе, которые могут выполняться последовательно или параллельно. Все pipeline определяются в контексте приложения. Типичный pipeline включает этапы для «создания образов», «тестирования» и «развертывания». Процесс «создания образов» также часто называют «bake».

Проект (Project)

Проект в Spinnaker — это логическая группа приложений. Например, можно создать проект под названием «Spinnaker», и его приложениями будут «Deck», «Orca», «Clouddriver» и т.д. Spinnaker предоставляет удобный dashboard для каждого проекта, чтобы визуализировать его приложения и статус каждого из них.

Группа серверов (Server Group)

С точки зрения Amazon Web Services (AWS), группа серверов представлена группой автоматического масштабирования (Auto Scaling Group, ASG). Все приложения, развернутые с помощью Spinnaker, размещаются в группах серверов.

Этап (Stage)

В рамках pipeline задачи, которые выполняются, называются этапами (stages).

Триггер (Trigger)

Триггер — это точка входа в pipeline.

Имя приложения (Application Name)

«Имя» — это название вашего приложения в Spinnaker.

Стек (Stack)

Стек можно рассматривать как тег, который вы присваиваете всему, что хотите интегрировать вместе. Окружения (environments) обычно являются хорошим примером того, что можно пометить с помощью стека. Если у вас есть приложение с ELB, кэшем и ASG, обычно вы хотите запускать интеграционные тесты в staging-окружении отдельно от production-окружения. В этом случае вы присвоите staging ELB, кэшу и ASG стек «staging», а prod ELB, кэшу и ASG — стек «prod».
Обратите внимание, что имена стеков определяются пользователем в интерфейсе конфигурации Spinnaker (UI).

Деталь (Detail)

Деталь также определяется пользователем и может быть любой дополнительной информацией, которую вы хотите указать для вашего кластера и группы серверов.

Версия инфраструктуры (Infrastructure Version)

Номер версии инфраструктуры, например, v011, v012 и т.д. Это значение добавляется автоматически и не определяется пользователем.

webhook

Spinnaker использует «вебхуки» (webhooks) двумя способами: как триггер для выполнения pipeline и как этап, который может выполнять произвольные вызовы к другому сервису. Если вы ищете информацию о настройке триггера вебхука, который можно использовать для запуска pipeline, сообщество open source предлагает очень хорошее руководство по этому вопросу.

webhook
webhook

В Spinnaker есть тип этапа под названием «Webhook», который позволяет этапу выполнять вызовы к API в процессе выполнения pipeline.

Пример пайплайн который добавляет пользователя в Keycloack:

Keycloack
Keycloack

Spinnaker — это мощная платформа для управления непрерывной доставкой (Continuous Delivery) программного обеспечения, разработанная Netflix и активно поддерживаемая сообществом. Она предоставляет инструменты для автоматизации процессов развертывания приложений в облаке или на локальных серверах, поддерживая множество облачных провайдеров, таких как AWS, Google Cloud, Kubernetes и Azure. Spinnaker позволяет создавать сложные конвейеры (pipelines), которые охватывают все этапы жизненного цикла приложения: от сборки и тестирования до развертывания и мониторинга. Платформа особенно ценится за её гибкость, масштабируемость и возможность интеграции с различными инструментами CI/CD, системами контроля версий и мониторинга.

В будущем, если появится возможность, я планирую более подробно рассказать о Spinnaker, его архитектуре, ключевых концепциях и практических примерах использования. Особое внимание будет уделено тому, как Spinnaker помогает командам организовать безопасные и эффективные процессы развертывания, включая стратегии канареечных релизов, blue-green деплоев и автоматического отката в случае ошибок. Также я рассмотрю интеграцию Spinnaker с другими популярными инструментами, такими как Jenkins, GitHub Actions и Keycloak, чтобы продемонстрировать, как эти технологии могут работать вместе для создания надежной системы доставки программного обеспечения.

© Habrahabr.ru