Что можно делать с помощью ArgoCD?

«Что можно делать с помощью ArgoCD?» — вопрос из категории CI/CD, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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 является единственным источником истины.