GitOps: управление инфраструктурой из Git
Коротко: Желаемое состояние приложений и инфраструктуры хранится в репозитории Git, а инструмент автоматически согласует с ним работающие системы.
Подробнее: В GitOps Git — единственный источник истины. Изменения вносятся не ручными командами на сервере, а как коммит или pull request. Агент в кластере (например, Argo CD или Flux) постоянно сравнивает желаемое состояние в репозитории с фактическим и исправляет отклонения.
Подробности
Принципы
- Декларативность: файлы описывают, что должно работать (YAML для Kubernetes), а не шаги для этого.
- Версионирование: у каждого изменения есть автор, время и причина, и его можно отменить (
git revert). - Автоматическое применение: агент принимает одобренные изменения.
- Самовосстановление: если что-то изменено вручную, агент сбрасывает это (обнаружение дрейфа).
Pull вместо push
Классические конвейеры отправляют (push) изменения в кластер со своими учётными данными. В GitOps агент в кластере забирает (pull) изменения из репозитория. Кластеру не нужно выдавать учётные данные конвейеру, что повышает безопасность, а состояние прослеживается в любой момент.
Типичный поток
- Разработчики меняют файл манифеста (например, новый тег образа) в ветке.
- Pull request с ревью и автоматическими проверками.
- После слияния агент обнаруживает изменение.
- Агент применяет его и сообщает статус.
Откат означает: отменить коммит.
Подводные камни
Секреты (пароли) не должны попадать в репозиторий открытым текстом; для этого существуют инструменты вроде Sealed Secrets или SOPS. Разделяйте код приложения и конфигурацию окружения, иначе каждое изменение кода запускает сборку конфигурации. GitOps наиболее эффективен вместе с инфраструктурой как кодом.
См. также: Инфраструктура как код, Основы Kubernetes, Git, Конвейер CI/CD