GitOps на практике: что именно вы автоматизируете
GitOps — это не «ещё один способ деплоя», а дисциплина управления желаемым состоянием кластера через Git. Репозиторий становится source of truth: что описано в Git, то и должно быть в Kubernetes. Контроллер доставки постоянно сверяет desired state и actual state и устраняет расхождения.
В эксплуатации это даёт несколько вещей, за которые GitOps ценят админы и DevOps:
- Воспроизводимость: новый кластер и новые неймспейсы поднимаются из Git, а не из «памяти команды».
- Аудит: изменения инфраструктуры и релизов привязаны к PR/коммитам.
- Drift detection: «подкрутил руками в проде» превращается в наблюдаемое событие, а не в скрытую поломку.
- Управляемый rollback: revert коммита возвращает конфигурацию, а контроллер приводит кластер к этому состоянию.
GitOps не заменяет CI: CI собирает и тестирует артефакты, а GitOps доставляет и поддерживает декларативное состояние в кластере.
FluxCD и Argo CD: общая цель, разные «точки опоры»
И FluxCD, и Argo CD синхронизируют кластер с источником правды (обычно Git, иногда Helm-репозитории или OCI). Отличия начинают проявляться там, где живёт ежедневная боль: диагностика, права, multi-tenant, порядок применения ресурсов, удобство для разработчиков.
FluxCD: Git-first и Kubernetes-native «конструктор»
FluxCD (Flux toolkit) — набор контроллеров с чёткими обязанностями. Вы декларативно описываете источники (например, Git/Helm/OCI) и то, как эти источники применять (Kustomize/Helm). UI не является обязательным элементом — основной интерфейс это Kubernetes API: статусы CRD, события, логи.
Argo CD: единый центр управления доставкой
Argo CD воспринимается как готовый продукт: UI/API + контроллеры, ориентированные на удобство day-2 операций. Он даёт дерево ресурсов, diff, историю синхронизаций и понятные статусы «на ладони». При этом важно не превратить UI в «ручной деплой», иначе Git-first растворится в кликах.
Если вы разворачиваете Kubernetes на одном узле (k3s/k0s/microk8s) на VDS, GitOps почти всегда окупается: меньше ручных операций, легче восстановление после обновлений и проще контролировать изменения.

Архитектура и компоненты: что вы реально будете обслуживать
FluxCD: несколько контроллеров и много CRD
В типовой установке FluxCD вы увидите несколько контроллеров (например, source, kustomize, helm, notification, а при необходимости — image automation). Это даёт гибкость: можно включать только нужные части и строить процесс вокруг Git и namespace-границ.
Практические плюсы:
- модульность: меньше «всё в одном», проще подрезать лишнее;
- естественная интеграция с Kubernetes RBAC и разграничением по неймспейсам;
- хорошо ложится на стиль «всё управляется манифестами и PR».
Практические минусы:
- порог входа выше для команд, ожидающих «панель, где всё видно»;
- больше объектов (CRD) и зависимостей между ними;
- диагностика чаще через
kubectlи логи.
Argo CD: сервер как «точка сборки» информации
Argo CD обычно состоит из API/UI-сервера, repo-server и контроллера приложений. Главная ценность в эксплуатации — быстрый ответ на вопросы «что не сошлось» и «что именно отличается». Но центральный компонент означает, что вам придётся:
- обслуживать доступ к UI/API (SSO, RBAC, аудит);
- аккуратно настраивать доступ Argo к кластерам и репозиториям;
- следить за обновлениями и совместимостью (особенно при большом количестве приложений).
Модель деплоя: как описывается desired state
FluxCD: «источник» отдельно, «применение» отдельно
В FluxCD чаще всего мысль такая: у вас есть источник (Git/Helm/OCI), и есть объект, который этот источник применяет (Kustomize/Helm release) с заданной политикой, интервалами и зависимостями. Это инженерно прозрачно: меньше неявных действий, проще понять, где именно «сломалось».
Argo CD: Application как единица управления
В Argo CD центральный объект — Application: где лежат манифесты, куда их применить и как синхронизировать. Для шаблонизации и массового управления есть ApplicationSet. В платформенных командах это удобно, когда нужно генерировать приложения под кластеры/неймспейсы и поддерживать стандарты.
Drift, diff и инциденты: кто быстрее объясняет «почему не задеплоилось»
Argo CD: сильный UX для расследований
Argo CD выигрывает там, где много людей хотят «самообслуживание»: разработчик открывает приложение, видит дерево ресурсов, статус синхронизации и diff. Это снижает количество обращений к ops «посмотри, что там», особенно когда ошибка в values/оверлее или не прошёл health-check.
FluxCD: диагностика через Kubernetes API
FluxCD тоже сообщает о дрейфе и ошибках, но основной путь — статусы CRD, события и логи контроллеров. Это комфортно, если команда уверенно живёт в Kubernetes и предпочитает единый интерфейс в виде kubectl.
Если у вас культура «всё через Git и kubectl», FluxCD ощущается естественно. Если нужна витрина статусов и диффов для команд разработки — Argo CD обычно быстрее окупается.
Безопасность: RBAC, multi-tenant и границы ответственности
Главный анти-паттерн GitOps: контроллер доставки с правами cluster-admin «на всякий случай». Тогда любая ошибка в репозитории превращается в ошибку масштаба кластера. В обоих инструментах цель одна: минимальные права, чёткие области применения, понятный аудит.
FluxCD: ставка на Kubernetes RBAC и неймспейсы
FluxCD хорошо ложится на схему «неймспейс как граница ответственности». Вы ограничиваете service account контроллеров и область применения ресурсов стандартными политиками Kubernetes. Это обычно проще объяснить аудитору и проще поддерживать в multi-tenant, если границы совпадают с неймспейсами.
Argo CD: собственный RBAC + Kubernetes RBAC
Argo CD добавляет свой слой RBAC: кто видит какие приложения и кто может запускать синхронизацию. Но при этом остаётся Kubernetes RBAC сервисных аккаунтов, которыми Argo применяет изменения. Гибкость высокая, но и риск выше: можно случайно раздать лишнее, пытаясь «быстро починить доступ».
Secrets в GitOps: типовые схемы и частые ошибки
Секреты плохо сочетаются с принципом «всё в Git» в открытом виде. Поэтому выбирают один из подходов: шифрование секретов в репозитории, внешние секрет-хранилища (через External Secrets/CSI) или sealed-secrets. Оба инструмента совместимы с этими схемами; ключевое — где происходит расшифровка и как устроена ротация ключей.
Три ошибки, которые чаще всего приводят к «временно положили секрет в values.yaml»:
- ключи шифрования лежат на той же машине и доступны тем же людям/процессам, что и репозиторий;
- ротация ключей не отрепетирована и не описана;
- нет аварийного сценария восстановления доступа к секретам (например, после переезда кластера).
Для практики пригодится отдельный разбор с примерами: как хранить secrets в GitOps через SOPS/age без лишней боли.
Single server: один узел, один кластер, одна команда
Сценарий «single server» встречается постоянно: один Kubernetes-кластер на одном узле, минимум людей, максимум задач. Здесь победит не «самый мощный инструмент», а тот, который снижает операционную нагрузку.
Что важно именно в этом режиме
- Простые обновления GitOps-инструмента и понятный откат.
- Минимум компонентов, которые могут упасть вместе с остальным кластером.
- Диагностика без шаманства: быстро понять, где ошибка — в Git, в chart, в CRD, в доступах.
- Резервное копирование: Git есть, но состояние кластера (CRD, системные компоненты) тоже нужно уметь восстановить.
FluxCD на single server
FluxCD хорош, если вам комфортно расследовать проблемы через kubectl и статусы CRD. Он не требует UI, хорошо вписывается в схему «мердж в main = доставка», а лишние компоненты можно не тянуть.
Argo CD на single server
Argo CD хорош, если вы хотите видеть «картину мира» в одном месте: состояние приложений, diff и причины рассинхронизации. Для небольшой команды это часто экономит время, но добавляет центральный компонент, за которым тоже нужно следить (доступ, обновления, резервирование).
Helm и Kustomize в ежедневной рутине
Важно не только «поддерживает ли», а как вы будете жить с обновлениями, зависимостями и порядком применения ресурсов.
FluxCD: HelmRelease и Kustomization
FluxCD силён в декларативном описании жизненного цикла Helm-релизов и Kustomize-оверлеев. Но в реальных кластерах часто всплывает порядок применения: CRD должны приезжать раньше custom resources, а зависимости релизов надо явно выстроить, иначе можно поймать гонки при синхронизации.
Argo CD: удобный результат и соблазн «ручного sync»
Argo CD отлично показывает конечный результат, diff и статус health. Но именно из-за удобства возникает анти-паттерн: «пока PR не смерджен, давай нажмём Sync». Это лечится правилами: кто имеет право на ручную синхронизацию, и какие окружения допускают ручные действия.
Мультикластеры и рост: когда одного кластера стало мало
Со временем появляются staging/production, отдельные кластеры под клиентов или регионы. Тогда важны не фичи, а операционная модель:
- как описываются окружения и оверлеи (Kustomize/Helm values, ветки/директории);
- как раздаётся доступ командам (по неймспейсам, по приложениям, по кластерам);
- как обновляются платформенные компоненты (ingress, cert-manager, policy);
- как устроены репозитории (платформа отдельно или вместе с приложениями).
Argo CD часто выбирают как «панель управления» для множества приложений и кластеров. FluxCD часто выбирают как «движок», когда платформа строится вокруг Git и Kubernetes RBAC, а визуализацию закрывают внешней наблюдаемостью.
Если вы строите кластер на лёгкой дистрибуции, заранее определитесь с ingress: это влияет и на доступ к UI Argo CD, и на общую стабильность входного контура. См. разбор: что выбрать для ingress в k3s: Traefik, Nginx или HAProxy.
Типовые грабли и как их избежать
Грабля: ручные правки в кластере
Если люди продолжают «починить через kubectl edit», GitOps превращается в генератор конфликтов. Зафиксируйте правило: изменения через PR, а прямые права на изменение прод-неймспейсов ограничьте.
Грабля: слишком широкие права у GitOps-контроллера
Контроллер доставки не должен иметь избыточные права. Делите по неймспейсам, минимизируйте RBAC, делайте отдельные service account под разные области ответственности.
Грабля: «секреты зашифрованы», но ключи лежат рядом
Шифрование без управления ключами не решает проблему. Хранение, доступ и ротация ключей должны быть такими, чтобы в аварии вы не откатывались к «временно положим секрет в репозиторий».
Грабля: слишком сложная структура репозиториев на старте
Не начинайте с архитектуры уровня enterprise, если у вас один кластер и две команды. Начните с простого: понятные директории окружений, минимум генераторов, прозрачные зависимости. Сложность добавляйте, когда появятся реальные боли.
Критерии выбора: FluxCD vs Argo CD без религии
Чаще выбирают FluxCD, если
- вам важен Git-first без зависимости от UI;
- команда уверенно работает с Kubernetes CRD и
kubectl; - вы хотите разграничение через Kubernetes RBAC и неймспейсы;
- нужна модульность: подключать только необходимые контроллеры.
Чаще выбирают Argo CD, если
- нужна понятная витрина статусов и диффов для разработчиков;
- часто приходится разбирать рассинхронизацию и важна скорость диагностики;
- есть платформенная команда, готовая поддерживать централизованный компонент и его RBAC;
- много приложений и хочется удобной группировки и обзора.
Практичный план внедрения GitOps (под FluxCD или Argo CD)
- Определите границы: какие приложения и неймспейсы переводите первыми, кто владелец и кто утверждает изменения.
- Выберите формат: Helm или Kustomize, договоритесь о структуре окружений и naming.
- Соберите базовую платформу: ingress, выпуск сертификатов, минимум наблюдаемости и политики доступа.
- Закрепите процесс изменений: PR, review, запрет прямых правок в prod, правила для ручных sync/rollback.
- Определите стратегию secrets: один подход, понятная ротация, обязательно отрепетированный аварийный сценарий.
- Добавьте алерты: ошибки синхронизации, рост очередей, деградация контроллеров, проблемы с репозиториями.
Итог
Выбор между FluxCD и Argo CD — это выбор операционной модели. FluxCD ближе к Kubernetes-native подходу: максимум декларативности и Git-first, минимум «центров управления», диагностика через Kubernetes API. Argo CD даёт сильный UX для day-2 операций: дерево ресурсов, diff, статусы и история — отлично для самообслуживания команд, но требует дисциплины, чтобы Git оставался источником истины, и аккуратной настройки RBAC.
Для single server берите то, что уменьшит нагрузку прямо сейчас: кому-то проще FluxCD с понятными CRD, кому-то проще Argo CD с наглядной диагностикой. В любом случае масштабируйте сначала процесс и правила, а потом количество сущностей и шаблонов.



