Централизованный vs Децентрализованный ArgoCD
Разворачивая в Kuberentes ArgoCD есть 2 подхода, которые можно использовать, если у вас в контуре несколько кластеров Kubernetes, развертывания в которых неободимо с помощью ArgoCD:
- Централизированный. Когда в одном Kubernetes разворачивается один ArgoCD и к нему подключаются все доступные кластера Kuberentes.
- Децентрализованный. Когда в каждом Kuberentes’e разворачивается свой персональный ArgoCD, который занимается деплоем в этот Kuberentes.
Разберём плюсы и минусы каждого подхода.
Централизированный ArgoCD
Плюсы:
1️⃣ Единый интерфейс. Можно быстро отсортировать проблемные компоненты и понять причину ошибки.
2️⃣ Мощные CRD ApplicationSets (документация). Позволяют описать один компонент и разом раскатить его на все подключённые кластеры.
3️⃣ Удобное обновление ArgoCD. Достаточно обновить в одном месте, и оно сразу применяется ко всем кластерам.
Минусы:
1️⃣ Сетевые сложности. ArgoCD должен иметь доступ к kube-apiserver всех кластеров. Соответственно нужно продумать маршруты до этих API и защитить их.
2️⃣ Единая точка отказа и уязвимость. Если ArgoCD падает, управление всеми кластерами временно недоступно. Слабое место с точки зрения безопасности. Особенно опасно, если подключать кластеры с Cluster-Admin правами (что все и делают).
Децентрализированный ArgoCD
Плюсы:
1️⃣ Полная автономность кластеров. Каждый кластер полностью управляется своим ArgoCD. Если один ArgoCD сломается, это не повлияет на другие кластеры.
2️⃣ Упрощённая безопасность. Нет необходимости прокидывать сетевые доступы к kube-apiserver из централизованного ArgoCD.
3️⃣ Гибкость в настройке. Можно кастомизировать ArgoCD под конкретный кластер. Удобно для multi-tenant окружений, где каждый проект или команда живут в отдельный Kuberentes кластерах и управляет своим ArgoCD.
Минусы:
1️⃣ Больше инфраструктуры и поддержки. Нужно поддерживать N независимых ArgoCD-инсталляций. Дополнительная нагрузка на команду DevOps.
2️⃣ Отсутствие единого интерфейса. Придётся заходить в каждый ArgoCD по отдельности, чтобы мониторить состояние. (Решается мониторингом). Если нужно что-то обновить во всех кластерах, придётся делать это вручную или автоматизировать через внешние инструменты (еще один ArgoCD?).
3️⃣ Сложность в управлении глобальными компонентами. Например, если нужно одновременно обновить общий Helm-чарт во всех кластерах, придётся либо использовать внешние механизмы (типа CI/CD), либо делать это вручную.
🎯 Какой вариант выбрать?
✔ Много кластеров (10+) → Централизованный ArgoCD, но с HA и жёсткими мерами безопасности.
✔ Изолированные кластеры (air-gapped, private) → Локальный ArgoCD в каждом кластере.
✔ Нужна гибкость в управлении → Децентрализованный вариант.
✔ Важно минимизировать затраты на инфраструктуру → Централизованный ArgoCD.
На это все. Вы прекрасны :)