Argo CD

⌘K

Argo CD

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 по запросу).
AutomatedArgo CD сам применяет все изменения из Git, как только они появляются.
PruneУдаляет «лишние» ресурсы — те, что больше не описаны в Git.
SelfHealВосстанавливает состояние, если ресурсы были изменены вручную в кластере.