Что такое GitOps
GitOps — operating model для декларативной инфраструктуры и приложений, где Git хранит desired state, а controller/agent приводит runtime-систему к этому состоянию.
OpenGitOps формулирует четыре принципа: declarative desired state, immutable/versioned source of truth, changes через approved Git operations, continuous reconciliation by software agents.
Как работает GitOps
-
Декларативное описание инфраструктуры
Kubernetes manifests, Helm/Kustomize или Terraform/OpenTofu configs описывают desired state. -
Git как источник истины
Репозиторий содержит версионированное состояние. Изменение — commit + review + merge. -
Reconciliation loop GitOps-controller (Argo CD, Flux) сравнивает live state с Git и применяет diff вручную или автоматически, в зависимости от policy.
-
Аудит и откат изменений
История Git даёт audit trail. Rollback обычно делается черезgit revert, чтобы source of truth тоже изменился.
Инструменты
Преимущества
- Audit trail: кто изменил desired state и через какой review.
- Воспроизводимость: окружение можно пересобрать из Git + артефактов.
- Drift detection: controller видит расхождение live state и Git.
- Откат:
git revertвозвращает desired state, controller применяет его.
Ограничения
- GitOps не чинит broken desired state: плохой commit будет воспроизведён так же стабильно, как хороший.
- Auto-sync без policy gates может быстро распространить ошибку.
- Secrets нельзя хранить plaintext в Git; нужны SOPS, Sealed Secrets, External Secrets или Vault-интеграция.
- Для Terraform-style инфраструктуры нужен отдельный controller/workflow, потому что Kubernetes GitOps-controller сам по себе не управляет cloud API без CRD/operator слоя.
- Ручные изменения через
kubectlсоздают drift и могут быть перезаписаны controller'ом.
Практический baseline
- Pin образов по digest или immutable tag, не
latest. - Разделяй app repo и environment/config repo, если нужен controlled promotion.
- Включай diff/health checks перед auto-sync.
- Для prod — policy checks до merge: schema validation, kubeconform, OPA/Kyverno, secret scanning.
- Rollback runbook должен начинаться с
git revert; прямой rollback в controller — аварийная операция.