← Infrastructure as Code
12 мин · средне · Урок 3 из 5

GitOps: git как источник правды

Pull-деплой из git, агент в кластере, drift detection и чем GitOps отличается от обычного push-CI.

Push против pull

В обычном CI/CD пайплайн сам ходит в кластер и применяет изменения: kubectl apply, helm upgrade. Это push-модель — снаружи толкают состояние внутрь. У неё есть слабые места: пайплайну нужен доступ в кластер (а это широкие права наружу), и никто не следит, что в кластере осталось ровно то, что задеплоили.

GitOps переворачивает это в pull-модель. Внутри кластера живёт агент (Argo CD, Flux), который сам следит за git-репозиторием с манифестами и подтягивает изменения. Снаружи в кластер никто не ходит.

Git — единственный источник правды

Главный принцип: желаемое состояние кластера целиком описано в git. Хочешь выкатить новую версию — делаешь коммит (или merge в нужную ветку), который меняет манифест. Агент видит изменение и применяет его.

developergit push gitманифесты, источник правды заметил коммит Argo CD в кластересверяет и применяет apply сверка кластерфактическое состояние дрейф: правка мимо git снаружи в кластерникто не ходит
Агент тянет манифесты сам и крутит цикл сверки, поэтому правка мимо git живёт до следующей синхронизации.

Отсюда следствия:

Drift detection

Агент не просто применяет изменения по событию, он постоянно сверяет желаемое (git) с фактическим (кластер). Если кто-то залез руками и поменял что-то мимо git, это дрейф — и агент его видит.

Дальше два режима. В режиме оповещения агент помечает приложение как OutOfSync и показывает разницу. В режиме автосинхронизации он сам возвращает кластер к состоянию из git, затирая ручную правку. Так ручные изменения в обход git не выживают — это и держит «git = правда».

Что GitOps не делает

GitOps отвечает за доставку (continuous delivery), а не за сборку. Образ по-прежнему собирает обычный CI: тесты, docker build, push в registry. GitOps включается дальше — когда новый образ нужно выкатить в кластер.

Типичная связка: CI собирает образ и обновляет тег в git-репозитории с манифестами, а GitOps-агент подхватывает это и катит в кластер.

Что важно запомнить

GitOps — это pull-доставка: агент в кластере (Argo CD, Flux) сам тянет манифесты из git, наружу доступ не нужен.

Git — единственный источник правды о состоянии кластера. Выкат и откат — обычные git-операции с историей и ревью.

Агент постоянно сверяет git с кластером и лечит дрейф; ручные правки в обход git не выживают. Сборку образа по-прежнему делает обычный CI.

В следующих треках это соединяется с Kubernetes: манифесты из git, которые катит агент, — это те же Deployment и Service.

Прошли материал до конца? Отметьте урок пройденным.