Ответ
ArgoCD — это декларативный инструмент GitOps для непрерывной доставки (CD) в Kubernetes. В моей практике мы использовали его для следующих задач:
1. Автоматическая синхронизация состояния кластера. ArgoCD постоянно сравнивает желаемое состояние (манифесты в Git-репозитории) с реальным состоянием в кластере и автоматически применяет изменения. Это основа GitOps.
2. Централизованное управление развертываниями в нескольких кластерах и неймспейсах. Из одной инстанции ArgoCD можно управлять множеством приложений. Мы использовали это для staging и production окружений в разных кластерах.
# Пример Application манифеста, определяющего, что и куда развертывать
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: payment-service-prod
spec:
project: default
source:
repoURL: 'https://git.company.com/kubernetes-manifests.git'
targetRevision: main
path: apps/payment-service/overlays/prod # Используем Kustomize
destination:
server: 'https://production-k8s.cluster.company.com'
namespace: production
syncPolicy:
automated:
prune: true # Автоматически удалять ресурсы, удаленные из Git
selfHeal: true # Автоматически исправлять дрейф конфигурации
3. Визуализация и отладка. Веб-интерфейс ArgoCD показывает дерево ресурсов приложения (Deployments, Services, ConfigMaps), их статус и здоровье, что упрощает понимание, что сейчас развернуто.
4. Откат (Rollback) до любой версии, закоммиченной в Git.
Если развертывание новой версии (targetRevision: feature-branch) вызывает проблемы, можно одним кликом синхронизировать приложение с предыдущим стабильным коммитом (targetRevision: main@a1b2c3d). История Git становится историей релизов.
5. Поддержка различных инструментов описания инфраструктуры. ArgoCD умеет рендерить манифесты не только из чистых YAML-файлов, но и с помощью:
- Helm Charts (используя
values.yamlиз репозитория). - Kustomize для наложения патчей в разных окружениях.
- Jsonnet, Ksonnet.
6. Управление доступом и проектами (Projects). Можно ограничивать, какие репозитории, кластеры и типы ресурсов могут быть развернуты в рамках определенного проекта, что важно для безопасности.
В итоге, ArgoCD превращает процесс доставки в Kubernetes из набора ручных kubectl apply в управляемый, отслеживаемый и воспроизводимый поток, где Git является единственным источником истины.