Ответ
В экосистеме Kubernetes Argo CD является де-факто стандартом для GitOps. Я использовал его в нескольких продакшен-средах для управления состоянием кластеров.
Почему Argo CD?
- Декларативный и интуитивный: Вы определяете желаемое состояние приложений в Git (Helm charts, Kustomize, plain YAML), а Argo CD непрерывно сравнивает его с реальным состоянием в кластере и при необходимости синхронизирует.
- Многоуровневая синхронизация: Поддерживает сложные зависимости между ресурсами (например, сначала Namespace, потом ConfigMap, потом Deployment).
- Визуализация и отладка: Web UI и CLI показывают дерево ресурсов, их статус (Healthy, Synced, OutOfSync) и события, что критично для оперативного реагирования.
- Безопасность: Интеграция с SSO (OIDC, LDAP), RBAC на уровне проектов и приложений, возможность хранения секретов в зашифрованном виде (например, с помощью Sealed Secrets или внешнего Vault).
Пример Application манифеста для Argo CD:
# application.yaml в Git-репозитории с конфигами
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app-production
namespace: argocd
spec:
project: default
source:
repoURL: 'git@github.com:myorg/config-repo.git'
targetRevision: HEAD
path: apps/my-app/overlays/production # Используем Kustomize
destination:
server: 'https://kubernetes.default.svc'
namespace: my-app-prod
syncPolicy:
automated:
prune: true # Автоматически удалять ресурсы, удалённые из Git
selfHeal: true # Автоматически исправлять дрейф конфигурации
syncOptions:
- CreateNamespace=true # Создать namespace, если его нет
Альтернативы и их ниши:
- Flux CD — легковесный, больше «инфраструктура как код», хорошо интегрируется в пайплайны Terraform. Часто выбирают за его операторную модель и поддержку уведомлений.
- Jenkins X — больше ориентирован на автоматизацию всего жизненного цикла (CI+CD), а не только на синхронизацию.
В моей практике Argo CD выигрывает за счёт UI, широкой поддержки инструментов оформления манифестов (Helm, Kustomize, Jsonnet) и активного сообщества.