Ответ
Самым сложным был проект по построению отказоустойчивой мультирегиональной платформы для SaaS-продукта на базе Kubernetes (EKS) с полным циклом GitOps. Основная сложность заключалась в обеспечении нулевого времени простоя при отказе целого региона AWS и соблюдении требований GDPR (данные европейских пользователей не должны покидать eu-central-1).
Архитектура и ключевые решения:
-
Мультикластерный GitOps с ArgoCD: Мы использовали ArgoCD ApplicationSet для синхронизации конфигураций между кластерами в us-east-1 и eu-central-1. Базовые манифесты хранились в Git, а регион-специфичные настройки (например, endpoint базы данных) инжектились через Kustomize overlays.
# Пример ApplicationSet для мультикластерного деплоя apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: core-apps spec: generators: - clusters: {} # Автоматическое обнаружение управляемых кластеров template: metadata: name: '{{name}}-user-service' spec: project: default source: repoURL: 'git@github.com:company/gitops.git' targetRevision: main path: 'apps/user-service/overlays/{{name}}' # overlays/us-east-1 или /eu-central-1 destination: server: '{{server}}' namespace: production syncPolicy: automated: prune: true selfHeal: true -
Трафик и отказоустойчивость: Для управления трафиком использовался Istio с Multi-Primary репликацией между регионами. Мы настроили DestinationRule с outlier detection и VirtualService с правилами маршрутизации, основанными на локации пользователя (определяемой по GeoIP) и health-check'ах сервисов.
-
Stateful-сервисы (базы данных): Для PostgreSQL использовался CloudNativePG оператор с асинхронной репликацией из eu-central-1 в us-east-1. Основная сложность — обеспечение консистентности и отработка failover'а с минимальными потерями данных. Мы написали кастомные скрипты на Bash, интегрированные в ArgoCD Rollouts для проверки целостности реплики перед переключением трафика.
-
Мониторинг и observability: Развернули Thanos для глобального сбора метрик из всех регионов в единый endpoint. Логи агрегировались через Loki, а трассировка — через Tempo. Это позволило быстро диагностировать кросс-региональные проблемы.
Итог: Система успешно выдерживала плановые отключения целого региона для техобслуживания, автоматически перераспределяя трафик. Время восстановления (RTO) составило менее 2 минут, а целевая точка восстановления (RPO) для критичных данных — менее 30 секунд.