Ответ
GitOps — это операционная модель для управления инфраструктурой и развертывания приложений, где Git-репозиторий является единственным источником истины (Single Source of Truth). Все изменения в системе (конфигурация инфраструктуры, манифесты приложений) описываются декларативно в коде и версионируются в Git. Специальные операторы (например, ArgoCD, Flux) автоматически синхронизируют реальное состояние кластера с желаемым состоянием, описанным в репозитории.
Ключевые принципы GitOps:
- Декларативность: Состояние всей системы (Kubernetes, облачные ресурсы) описывается в виде кода (YAML, Helm, Terraform).
- Версионирование и аудит: Все изменения проходят через Git, что даёт полную историю, возможность отката (git revert) и ревью кода.
- Автоматическая синхронизация: Инструменты непрерывно сравнивают желаемое состояние из Git с фактическим в кластере и автоматически применяют изменения.
- Закрытый цикл: Если состояние кластера отклоняется от 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. - Коллаборация: Инфраструктурный код проходит тот же процесс ревью, что и код приложения.