Нужно поднять дев и стейджинг окружение, настроить CI/CD

Цена договорная
06 сентября 2021, 12:23 • 4 отклика • 42 просмотра
ТЗ DevOps - dev/staging

  1. Верхнеуровневое описание работ:
    • Работа должна быть выполнена используя подход Infrastructure as Code
    • Работа должна быть задокументирована, например, разворачивая kubernetes кластер:

      • Нужно описать последовательность выполнения действий и команд для развёртки кластера.
      • Обязательные и необязательные environment variables, config files, config maps.
      • Установленные в кластер CRDs, Operators, DaemonSets
      • Интеграции сторонних SaaS поставщиков и их credentials важные для их работы.
      • Описание соответствия High Availability сервисов которые мы деплоим или используем.(сервис А в 5 экземплярах на 3х хостах, БД имеет 3 хоста, 2 из которых standby реплики)
      • Всё это должно быть явно прописано в readme или wiki проекта инфраструктуры.
    • Провайдеры:
      • Digital Ocean

        • Kubernetes
        • MySQL
        • Redis
        • Container Registry
      • Hetzner Cloud - CI/CD Runner
      • Backblaze B2 - S3
      • Github & Github Actions
      • Sentry - Errors and performance monitoring
      • Datadog - Logs
    • Скоуп данного ТЗ:
      • Development environment

        • Kubernetes кластер с 2 нодами
        • Loadbalancer
        • Managed Mysql без реплик
        • Managed Redis без реплик
        • S3 хранилище для файлов
        • Возможно использование PVC
        • Интеграция Sentry

          • Sentry Relay
        • Интеграция Datadog

          • Datadog agent
      • Staging environment

        • Kubernetes кластер с 2 нодами
        • Loadbalancer
        • Managed Mysql без реплик
        • Managed Redis без реплик
        • S3 хранилище для файлов
        • Возможно использование PVC
        • Интеграция Sentry

          • Sentry Relay
        • Интеграция Datadog

          • Datadog Agent
      • Наверное можно объединить development и staging окружения
      • На данном этапе продакшн окружение не требуется.
      • CI/CD:

        • Github actions
        • Dedicated CI/CD Runner на Hetzner cloud
        • Сборка приложений бэкенда (PHP, Laravel + Octane RoadRunner)
        • Сборка frontend приложений (VueJs и NuxtJs)
        • Возможность деплоя отдельных веток приложений
        • Managed Container Registry
      • Документация
  2. Dev & staging envs
    • Бюджет на дев+стейдж environment - 230$ в месяц
    • Кластеры:
      • Думаем использовать 2 кластера - dev и staging
        В каждом по 2 ноды (2.5GB RAM, 2 shared vCPU)
      • Можно объединить в 1 кластер, 2 ноды по 6GB RAM, 4 shared vCPU или 3 ноды по 2.5GB RAM, 2 shared vCPU
      • В каждый кластер нужно будет развернуть:

        • 2 инстанса бекенд приложений (api)

          • PHP 8 + Laravel, запуск через Laravel Octane + Roadrunner
        • 2 инстанса бекенд приложений (workers)

          • PHP 8 + Laravel, демоны
        • 2 инстанса фронтенд приложений

          • NodeJs + Nuxt
        • 2 инстанса фронтенд приложений

          • Nginx+static JS
        • На каждой ноде Sentry Relay
        • На каждой ноде Datadog Agent
      • Балансеры и внешний трафик:

        • SSL termination на балансере, LetsEncrypt
        • Возможно потребуется 2 балансера, 1 для статики, другой для API
    • БД - Managed MySQL
      • 4GB RAM + 2 vCPU без резервирования
    • Кеш - Managed Redis
      • 1.2GB RAM без резервирования
    • S3 хранилище на Backblaze B2
  3. CI/CD:
    • Container registry на Digital Ocean
    • Self-hosted CI/CD Runner на Hetzner Cloud
    • Автоматический деплой develop ветки
    • Автоматический деплой staging ветки
    • Возможность деплоя веток у которых название подходит к шаблону (например staging/*)
    • Максимальное снижение трафика из Container registry

      • Минимальный размер образов
      • Кеширование зависимостей в CI/CD pipeline
      • Запуск пайплайнов только при условии выкатки на dev/staging
  4. Интеграции
    • Логирование в Datadog
    • Ошибки приложений и APM в Sentry
  5. Планируемый production
    • Kubernetes:

      • 3 nodes:

        • 6GB RAM, 4 shared vCPU
    • MySQL:

      • 4GB RAM, 2 vCPU
      • 2 standby nodes
    • Redis:

      • 1.2GB RAM
      • 1 standby node