Что такое GitOps?

«Что такое GitOps?» — вопрос из категории Архитектура и DevOps-практики, который задают на 29% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

GitOps — это операционная модель для управления инфраструктурой и развертывания приложений, где Git-репозиторий является единственным источником истины (Single Source of Truth). Все изменения в системе (конфигурация инфраструктуры, манифесты приложений) описываются декларативно в коде и версионируются в Git. Специальные операторы (например, ArgoCD, Flux) автоматически синхронизируют реальное состояние кластера с желаемым состоянием, описанным в репозитории.

Ключевые принципы GitOps:

  1. Декларативность: Состояние всей системы (Kubernetes, облачные ресурсы) описывается в виде кода (YAML, Helm, Terraform).
  2. Версионирование и аудит: Все изменения проходят через Git, что даёт полную историю, возможность отката (git revert) и ревью кода.
  3. Автоматическая синхронизация: Инструменты непрерывно сравнивают желаемое состояние из Git с фактическим в кластере и автоматически применяют изменения.
  4. Закрытый цикл: Если состояние кластера отклоняется от Git (например, из-за ручного вмешательства), система автоматически возвращает его к заданной конфигурации.

Пример декларативного приложения для ArgoCD (Application CRD):

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-microservice
  namespace: argocd
spec:
  project: default
  source:
    repoURL: 'https://github.com/my-org/infrastructure.git'
    targetRevision: HEAD
    path: 'apps/my-microservice/overlays/production'
  destination:
    server: 'https://kubernetes.default.svc'
    namespace: production
  syncPolicy:
    automated:
      prune: true # Автоматически удалять ресурсы, удалённые из Git
      selfHeal: true # Автоматически исправлять дрейф конфигурации

Преимущества для DevOps:

  • Скорость и безопасность: Развертывания становятся предсказуемыми и повторяемыми.
  • Согласованность: Идентичное состояние между dev, staging и production средами.
  • Восстановление при сбое: Полное восстановление кластера — это git clone и kubectl apply.
  • Коллаборация: Инфраструктурный код проходит тот же процесс ревью, что и код приложения.