Что такое Spinnaker?

Spinnaker — это open-source, multi-cloud платформа непрерывной доставки, разработанная Netflix. Она обеспечивает безопасные, надежные и быстрые развертывания приложений в различных облачных провайдерах и Kubernetes кластерах.

Основные возможности Spinnaker

  • Multi-cloud deployment — поддержка AWS, GCP, Azure, Kubernetes
  • Deployment strategies — blue/green, canary, rolling deployments
  • Pipeline management — визуальные пайплайны развертывания
  • Automated rollbacks — автоматический откат при проблемах
  • Manual judgments — ручное подтверждение критических этапов
  • Chaos engineering — встроенная интеграция с Chaos Monkey
  • Compliance — аудит и контроль развертываний

Архитектура Spinnaker

  • Deck — веб-интерфейс пользователя
  • Gate — API gateway для всех запросов
  • Orca — оркестрация пайплайнов и задач
  • Clouddriver — взаимодействие с облачными провайдерами
  • Front50 — хранение метаданных приложений и пайплайнов
  • Rosco — сборка образов (AMI, Docker)
  • Igor — интеграция с системами CI

Установка Spinnaker

 1# Установка через Halyard (рекомендуемый способ)
 2curl -O https://raw.githubusercontent.com/spinnaker/halyard/master/install/debian/InstallHalyard.sh
 3sudo bash InstallHalyard.sh
 4
 5# Конфигурация облачного провайдера (AWS)
 6hal config provider aws enable
 7hal config provider aws account add my-aws-account \
 8  --account-id 123456789012 \
 9  --assume-role role/SpinnakerManagedRole
10
11# Конфигурация Kubernetes
12hal config provider kubernetes enable
13hal config provider kubernetes account add my-k8s-account \
14  --kubeconfig-file ~/.kube/config \
15  --context my-context
16
17# Конфигурация хранилища
18hal config storage s3 edit \
19  --access-key-id YOUR_ACCESS_KEY \
20  --secret-access-key YOUR_SECRET_KEY \
21  --region us-west-2 \
22  --bucket spinnaker-artifacts
23
24# Развертывание Spinnaker
25hal config version edit --version 1.30.0
26hal deploy apply

Создание Application и Pipeline

 1// Создание приложения через API
 2{
 3  "name": "myapp",
 4  "email": "team@company.com",
 5  "description": "My application deployment",
 6  "cloudProviders": ["aws", "kubernetes"],
 7  "platformHealthOnly": false,
 8  "platformHealthOnlyShowOverride": false
 9}
10
11// Пример Pipeline конфигурации
12{
13  "name": "Deploy to Production",
14  "application": "myapp",
15  "stages": [
16    {
17      "type": "bake",
18      "name": "Bake AMI",
19      "baseOs": "ubuntu",
20      "baseLabel": "release",
21      "package": "myapp-${trigger.buildInfo.number}.deb",
22      "regions": ["us-west-2"]
23    },
24    {
25      "type": "deploy",
26      "name": "Deploy to Staging",
27      "clusters": [
28        {
29          "provider": "aws",
30          "cloudProvider": "aws",
31          "account": "my-aws-account",
32          "region": "us-west-2",
33          "strategy": "redblack",
34          "capacity": {
35            "min": 2,
36            "max": 4,
37            "desired": 2
38          }
39        }
40      ]
41    },
42    {
43      "type": "manualJudgment",
44      "name": "Manual Approval",
45      "instructions": "Please verify staging deployment",
46      "judgmentInputs": [
47        {"value": "continue"},
48        {"value": "rollback"}
49      ]
50    },
51    {
52      "type": "deploy",
53      "name": "Deploy to Production",
54      "clusters": [
55        {
56          "provider": "aws",
57          "strategy": "rollingredblack",
58          "maxRemainingAsgs": 2,
59          "delayBeforeDisableSec": 0,
60          "delayBeforeScaleDownSec": 900
61        }
62      ]
63    }
64  ],
65  "triggers": [
66    {
67      "type": "jenkins",
68      "master": "my-jenkins",
69      "job": "myapp-build",
70      "enabled": true
71    }
72  ]
73}

Deployment Strategies

 1# Blue/Green Deployment
 2strategy: redblack
 3maxRemainingAsgs: 2
 4delayBeforeDisableSec: 0
 5delayBeforeScaleDownSec: 0
 6scaleDown: true
 7rollback:
 8  onFailure: true
 9
10# Canary Deployment
11strategy: canary
12canary:
13  canaryConfig:
14    metricsAccountName: my-prometheus
15    scopes:
16      - scopeName: default
17        controlScope: myapp-control
18        experimentScope: myapp-canary
19    judge:
20      name: NetflixACAJudge-v1.0
21analysis:
22  - name: success-rate
23    query: "avg(rate(http_requests_total{job='myapp',status=~'2..'}[1m]))"
24    threshold: 0.95
25
26# Rolling Deployment  
27strategy: rollingredblack
28maxRemainingAsgs: 3
29delayBeforeDisableSec: 0
30delayBeforeScaleDownSec: 300

Интеграция с CI системами

 1# Конфигурация Jenkins интеграции
 2hal config ci jenkins enable
 3hal config ci jenkins master add my-jenkins \
 4  --address https://jenkins.company.com \
 5  --username spinnaker \
 6  --password-file /path/to/password
 7
 8# Конфигурация GitHub интеграции
 9hal config artifact github enable
10hal config artifact github account add my-github \
11  --token-file /path/to/github-token
12
13# Конфигурация Docker Registry
14hal config provider docker-registry enable
15hal config provider docker-registry account add my-registry \
16  --address https://registry.company.com \
17  --username spinnaker \
18  --password-file /path/to/registry-password

Когда использовать Spinnaker

  • Multi-cloud развертывания
  • Сложные deployment strategies (canary, blue/green)
  • Enterprise требования к безопасности и compliance
  • Необходимость в automated rollbacks
  • Команды, работающие с микросервисами
  • Критически важные production системы

Преимущества Spinnaker

  • Multi-cloud native — поддержка всех major облачных провайдеров
  • Advanced deployment strategies — sophisticated подходы к развертыванию
  • Battle-tested — проверен в Netflix и других крупных компаниях
  • Visual pipelines — интуитивный графический интерфейс
  • Automated rollbacks — автоматическое восстановление при сбоях
  • Compliance ready — аудит и контроль развертываний

Недостатки Spinnaker

  • Сложность установки и настройки
  • Высокие требования к ресурсам
  • Крутая кривая обучения
  • Может быть избыточным для простых проектов
  • Ограниченная поддержка on-premise
  • Активное развитие может приводить к breaking changes

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

  • ArgoCD — для Kubernetes-focused развертываний
  • Flux — GitOps подход
  • Harness — коммерческая CD платформа
  • GitLab CI/CD — интегрированное решение
  • Azure Pipelines — для Microsoft экосистемы

Best Practices

  • Начни с простых пайплайнов и постепенно усложняй
  • Используй manual judgments для критических развертываний
  • Настрой proper monitoring и alerting
  • Регулярно делай бэкапы конфигурации
  • Используй canary deployments для рискованных изменений
  • Мониторь производительность Spinnaker компонентов

FAQ

Подходит ли Spinnaker для продакшена?

Да, Spinnaker используется в production крупными компаниями как Netflix, Google, Microsoft. Это зрелая платформа для enterprise развертываний.

Какие требования к инфраструктуре?

Spinnaker требует значительных ресурсов: минимум 8GB RAM и 4 CPU cores для всех компонентов. Рекомендуется Kubernetes кластер для развертывания.

Сложно ли мигрировать на Spinnaker?

Миграция может быть сложной из-за специфичной архитектуры. Рекомендуется постепенная миграция, начиная с менее критичных приложений.