Argo CD — это специализированный инструмент доставки приложений в Kubernetes, созданный на основе GitOps-подхода. Он отслеживает изменения в Git-репозиториях и автоматически синхронизирует их с Kubernetes-кластерами. Вся конфигурация и логика развёртывания описываются декларативно и живут в Git — Argo CD просто следит за тем, чтобы кластер соответствовал этому описанию.
Основная идея: Git хранит текущее «правильное» состояние инфраструктуры, а Argo CD проверяет, совпадает ли оно с реальной ситуацией в кластере. Если возникают отличия — система либо применяет нужные изменения автоматически, либо сигнализирует оператору о несоответствии.
Ключевые возможности Argo CD:
- 📦 Синхронизация с Git — автоматическое применение изменений, как только они попадают в репозиторий;
- 🔄 Автоматическое восстановление — если в кластере кто-то внёс правки вручную, Argo CD может вернуть его в нужное состояние;
- 📊 Визуализация — веб-интерфейс, показывающий дерево ресурсов, их статусы и историю изменений;
- 🧩 Поддержка разных форматов — Helm-чарты, Kustomize, plain YAML, Jsonnet;
- 💾 Откаты — простое восстановление предыдущего состояния через
git revert; - 🔐 RBAC и интеграция с SSO — контроль доступа для команд и проектов.
Манифесты подключаются в виде Application-ресурсов (CRD), в которых указывается путь к репозиторию, ветка, стратегия синхронизации и целевой namespace.
Argo CD особенно полезен в командах, где:
- конфигурация и код хранятся в Git;
- есть несколько окружений (dev/stage/prod);
- важны повторяемость, контроль и откат.
Инструмент легко интегрируется с другими компонентами Argo-экосистемы (например, Argo Workflows, Argo Events), а в сочетании с CI-системами вроде GitHub Actions, GitLab CI или Jenkins образует полный GitOps-пайплайн.
В современных DevOps-практиках Argo CD стал стандартом для управления Kubernetes-инфраструктурой — особенно в проектах, где важны прозрачность, отказоустойчивость и автоматизация процессов развертывания.
📄 Пример Application (Argo CD + Helm)
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: redis-app
namespace: argocd
spec:
project: default
source:
repoURL: https://charts.bitnami.com/bitnami
chart: redis
targetRevision: 17.10.1
helm:
values: |
architecture: standalone
auth:
enabled: false
destination:
server: https://kubernetes.default.svc
namespace: redis
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
🔧 Что здесь происходит:
- Разворачивается Helm-чарт Redis из внешнего репозитория Bitnami.
- Указана конкретная версия чарта (
17.10.1). - Настраиваются значения Helm (встроенно через
helm.values). - Argo CD автоматически создаёт namespace
redis, если его нет (CreateNamespace=true). - Включена автоматическая синхронизация:
prune: true— удаляет ресурсы, которых больше нет в Git;selfHeal: true— восстанавливает состояние, если в кластере что-то изменено вручную.
🔁 Памятка: типы синхронизации в Argo CD
| Режим | Описание |
|---|---|
| Manual | Все изменения вносятся вручную через UI/CLI (Sync по запросу). |
| Automated | Argo CD сам применяет все изменения из Git, как только они появляются. |
| Prune | Удаляет «лишние» ресурсы — те, что больше не описаны в Git. |
| SelfHeal | Восстанавливает состояние, если ресурсы были изменены вручную в кластере. |