Один центральный кластер держит kubeconfig'и остальных и пушит desired state. Работает, пока кластеров три и они в одной сети. На масштабе банка, страховой или edge-флота этот паттерн ломается в трёх местах сразу.
Где ломается hub-and-spoke
Blast radius. Hub держит admin-kubeconfig каждого spoke. Компрометация одного компонента управляющего кластера — это компрометация всего флота, не «инцидент в одном environment». Token rotation помогает мало: пока токен живой, у hub'а полный доступ к prod.
Сетевая модель. Hub нужен прямой inbound к API server каждого spoke. На AWS это межрегиональные security group'ы и пиринги; на edge-инфраструктуре, где spoke сидит за NAT, это не работает без VPN или туннеля.
Compliance. Регулируемые отрасли запрещают inbound в production-кластер из любой внешней сети — а hub в этой картине внешний. Требование аудитора, не ограничение архитектуры; hub-and-spoke этот барьер не обходит.
К этому добавляется операционный потолок: один application-controller-под упирается в CPU и память на 5000+ Applications. ArgoCD v3 (начало 2026) даёт horizontal scaling controller'а, до этого приходится шардировать через ARGOCD_CONTROLLER_REPLICAS с round-robin по cluster ID. На пятидесяти spoke с сотнями Applications в каждом без sharding'а control plane становится bottleneck.
Per-cluster local
Каждый кластер запускает собственный ArgoCD, который смотрит только на свой subset gitops-репозитория. Blast radius при компрометации — один кластер. Сетевая модель тривиальная: ArgoCD ↔ K8s API всегда локально, через https://kubernetes.default.svc. Sharding не нужен, потому что 5000 Applications не оказываются на одном controller'е — они физически разнесены по кластерам.
Цена — отсутствие единого pane-of-glass и N инстансов, которые нужно обновлять синхронно. UI ArgoCD показывает только локальный кластер; on-call с тремя продами держит три вкладки. ApplicationSet matrix-generator работает локально, но только с двумя child-генераторами одновременно — больше не поддерживается. Локальный кластер при этом нужно перерегистрировать через явный cluster-Secret с уникальным именем, потому что дефолтное in-cluster ломает matching по {{name}}.
Per-cluster local выигрывает там, где compliance запрещает централизацию, где сеть spoke'а недоверенная, и где fleet'у в принципе не нужна централизованная audit-консоль.
Pull-mode: третий вариант
Sveltos Addon Controller в pull-mode (с v1.0.0, стабилизация в v1.4.0) переворачивает направление: spoke сам инициирует outbound к hub и подтягивает desired state. Hub при этом не держит admin-токены spoke'ов — он держит SA-токены, которыми spoke ходит к нему read-only за собственным конфигом. Компрометация hub'а становится компрометацией read-only API, а не админского доступа к флоту.
Use cases — регулируемые отрасли (банки, healthcare), edge и IoT (POS-системы, factory floors, корабли с intermittent connectivity), air-gapped окружения (только outbound), multi-cloud с единой моделью GitOps поверх AWS/GCP/Azure/on-prem. Argo CD core движется в ту же сторону через argocd-agent (KubeCon EU 2025) и Akuity Platform, но Sveltos pull-mode на начало 2026 — самая зрелая production-implementation.
Когда какой паттерн
Per-cluster local — air-gapped, edge, compliance-restricted spokes, отсутствие сетевой связности между кластерами. Хороший дефолт для команды, которой не нужен единый dashboard.
Hub-and-spoke — централизованный governance, fleet до десятка кластеров в одной сети, команда выигрывает от единого UI. Готовьте sharding controller'а заранее, если суммарно идёт к 1000+ Applications.
Pull-mode — всё, где hub-and-spoke ломается о compliance или сетевую модель, а per-cluster local не подходит из-за требования к централизованному control plane.
Гибрид жизнеспособен: ArgoCD hub-and-spoke для app delivery в trusted-сегменте, Sveltos pull-mode для compliance-restricted сегмента. Не стартовая архитектура — итог эволюции, когда часть кластеров уезжает в edge или в регулируемый периметр.
Отдельный случай — managed Argo CD на EKS Capabilities. AWS управляет installation, upgrades и HA; цена — Argo живёт снаружи кластера, https://kubernetes.default.svc как destination не работает, EKS нужно регистрировать как remote target. Identity Center обязателен. Это hub-and-spoke с zero ops на самом hub'е, но с теми же compliance-ограничениями, что у self-hosted hub.