Как же воплотить GitOps на практике? В экосистеме Kubernetes появились специальные инструменты, реализующие описанный pull-подход. Наиболее популярные из них –
Argo CD и
Flux CD. Оба проекта приняты в CNCF и к 2022 году достигли статуса
Graduated (т.е. промышленно зрелые решения). Многие компании уже используют их для управления сотнями кластеров.
Argo CD – готовое «из коробки» решение для GitOps. Оно устанавливается в кластер Kubernetes как контроллер, непрерывно сверяющий актуальное состояние кластера с состоянием в Git-репозитории и применяющий изменения при
расхождениях. Argo CD удобен наличием веб-интерфейса: можно визуально наблюдать, какие приложения развёрнуты, в каком они состоянии, есть ли дрейф и т.д. (помимо UI, доступен и CLI). Инструмент поддерживает работу с чистыми YAML-манифестами, Helm-чартами, Kustomize и др. Argo CD часто выбирают команды разработчиков приложений за наглядность и простоту: настроив его один раз, вы через веб-UI контролируете все деплои. Например, можно зарегистрировать приложение, указав репозиторий и путь к манифестам – Argo будет отслеживать коммиты и автоматически синхронизировать кластер с репозиторием. В случае расхождения (скажем, кто-то удалил ресурс вручную или наоборот, в Git появилась новая конфигурация) Argo CD либо сам приведёт кластер к желаемому состоянию, либо пометит дрейф и даст сигнал для ручного решения – в зависимости от заданной политики синхронизации.
Flux CD – более «низкоуровневый» GitOps-инструмент, подходящий для платформ-инженеров. По сути, Flux – это
набор контроллеров в Kubernetes, каждый из которых отвечает за свою часть
работы (контроллер источников, контроллер приложений/кустомизаций, контроллер Helm-релизов и т.д.). Flux не предоставляет собственного UI – управление идёт через декларативные объекты (Custom Resources) и CLI. Зато он очень гибкий: можно комбинировать разные репозитории и источники конфигураций (Git, хранилища S3/OCI и пр.) под разные сценарии
доставки. Flux CD хорошо интегрируется с экосистемой Kubernetes: вы описываете в кластере объекты типа GitRepository (источник конфигурации) и Kustomization/HelmRelease (что и как применять), а кластер сам подтягивает нужные YAML из репозитория и разворачивает их. Flux славится тем, что легко расширяется под нужды инфраструктурной команды и отлично подходит для управления настройками самого кластера и базовых сервисов. Многие облачные платформы (AWS, Azure и др.) включают Flux в состав своих GitOps-решений по
умолчанию.