Команда из пяти человек поднимает кластер и упирается в развилку, которую проходят почти все, кто внедряет управление инфраструктурой через git. Два инструмента делают по сути одно и то же: следят за репозиторием и приводят кластер к описанному в нём состоянию. Оба выпущены под крылом одного фонда, у обоих большие сообщества. Но подходы у них устроены настолько по-разному, что неверный выбор оборачивается либо избыточной сложностью, либо мучительным переходом потом. Разберём честно, что подойдёт небольшой команде, и во что обойдётся миграция, если первое решение окажется неудачным.

В чём фундаментальная разница подходов

Сходство заканчивается на уровне общей идеи. Дальше начинается принципиально разная архитектура управления. ArgoCD работает как централизованный набор развёртываний в выделенном пространстве имён: сервер интерфейса, сервер репозитория, контроллер приложений и хранилище кэша. Это модель с центральным пультом, через который видно и управляется всё. Flux устроен наоборот, как набор независимых контроллеров, каждый из которых отвечает за свою задачу: один за источники, другой за манифесты, третий за релизы пакетов, четвёртый за уведомления.

Из этого вытекает главное различие в плоскости управления. У ArgoCD центральная плоскость управляет развёртываниями по кластерам. У Flux логика согласования крутится внутри каждого кластера, и кластеры работают автономно. Эта разница, централизованный контроллер против агентов в каждом кластере, тянет за собой ощутимые компромиссы в безопасности, масштабируемости и операциях с несколькими кластерами.

Что важно именно для команды из пяти человек

Для маленькой команды на первый план выходят несколько практичных факторов, и здесь у инструментов разные сильные стороны.

Главный козырь ArgoCD это богатый веб-интерфейс. Он показывает статус синхронизации, расхождения и дерево ресурсов с одного взгляда в браузере. Для команды, где не все глубоко знают Kubernetes, это огромное преимущество: дежурный инженер видит состояние всех развёртываний без доступа к командной строке. ArgoCD легче показать, легче научить и легче наблюдать за развёртываниями вживую. Поэтому он часто притягивает команды, переходящие с традиционных конвейеров доставки на управление через git, именно благодаря интуитивному интерфейсу.

Flux идёт другим путём, он легковесный и управляется из командной строки. Его ресурсный след впечатляюще мал, около двухсот-трёхсот мегабайт на основные компоненты, потому что ему не нужны ни сервер репозитория, ни кэш, ни сервер интерфейса. Сопровождающие проекта говорят, что контроллеры после запуска занимают порядка тридцати мегабайт оперативной памяти каждый. Для сравнения, у ArgoCD стандартные запросы ресурсов составляют сотни мегабайт на сервер репозитория и до гигабайта на контроллер приложений, не считая кэша. Модульность Flux позволяет ставить только нужное: работаете с чистыми манифестами без пакетов, контроллер пакетов не нужен, нет автообновления образов, пропускаете эти контроллеры.

Для команды из пяти человек выбор по сути сводится к одному вопросу. Если важна наглядность, быстрое погружение людей без глубокой экспертизы и визуальный обзор, ArgoCD с его интерфейсом и ролевым доступом на уровне команд выигрывает. Если же команда уверенно живёт в командной строке, ценит минимальный расход ресурсов и готова взять на себя больше ответственности за информирование о статусе развёртываний, Flux экономнее и проще операционно.

Почему отказоустойчивость у них устроена по-разному

Тут кроется тонкость, о которой редко думают на старте. Распределённая природа Flux даёт изоляцию отказов. Если контроллер пакетов Flux падает, согласования по git и манифестам продолжают работать. А вот если сервер репозитория ArgoCD выходит из строя, он может застопорить отрисовку манифестов сразу для всех приложений одновременно, потому что это центральная точка.

Масштабирование тоже разное. Flux масштабируется более линейно, потому что каждый контроллер обслуживает свой тип ресурса и нет узкого места в виде центрального сервера. Нужно обрабатывать больше репозиториев пакетов, просто увеличиваете число реплик контроллера источников. У ArgoCD центральная модель проще для управления из одной точки, но эта же централизация становится потенциальным узким местом под большой нагрузкой.

Какой контекст изменил расклад в 2025 году

Здесь нельзя обойти важное событие. Компания, стоявшая за Flux, закрылась в начале 2024 года. Сам Flux при этом остался независимым проектом под управлением фонда, технически отвязанным от закрывшейся компании, но это подняло серьёзные вопросы. Исчезла коммерческая поддержка, появились опасения о скорости разработки, ведь основное ядро двигавших проект людей работало в закрывшейся компании, а сообщество забеспокоилось, не ошиблось ли оно с выбором.

Параллельно ArgoCD, поддерживаемый крупной компанией и с большей базой контрибьюторов, продолжал набирать обороты и закрепляться в крупных организациях. Это сместило восприятие надёжности в его сторону. Справедливости ради, разработка Flux продолжилась под управлением фонда силами выходцев из закрывшейся компании и широкого сообщества, и проект остаётся живым, выпуская новые версии с поддержкой свежих возможностей. Но осадок неопределённости повлиял на выбор многих команд в эту пару лет, и это стоит учитывать как фактор, а не только как технику.

Как соотносятся понятия двух инструментов

Чтобы понять цену миграции, сначала надо увидеть, как переводятся понятия одного инструмента в другой. Это не косметика, а разные модели описания ресурсов. В ArgoCD центральное понятие это приложение. В Flux ему соответствует связка из источника репозитория и описания манифестов. Если упрощённо собрать соответствия, картина такая.

ArgoCD                          ->  Flux
----------------------------------------------------------
Application                     ->  GitRepository + Kustomization
Application (Helm)              ->  HelmRepository + HelmRelease
ApplicationSet                  ->  Kustomization с подстановкой переменных
AppProject                      ->  Namespace + ServiceAccount + RBAC
Sync Policy (automated)         ->  Kustomization.spec.interval
Self-Heal                       ->  Kustomization.spec.prune + force
Sync Waves                      ->  Kustomization.spec.dependsOn

Уже из этой таблицы видно, что одно понятие в одном инструменте часто разворачивается в несколько ресурсов в другом. Это и есть корень сложности перехода.

Что конкретно ломается при миграции

Миграция не работает по принципу воткнул и заработало. Хотя оба инструмента построены на управлении через git, ресурсы они описывают по-разному, и перенос требует переработки манифестов. При переходе с Flux на ArgoCD главное соответствие это превращение описания манифестов Flux в приложение ArgoCD, а релиза пакета Flux в приложение ArgoCD с источником типа пакета.

Конкретных подводных камней хватает. Обработка пространств имён устроена по-разному: Flux задаёт целевое пространство на уровне своего описания, ArgoCD на уровне назначения приложения, и их нужно состыковать. Проверки здоровья отличаются: Flux позволяет задавать свои проверки на каждое описание, у ArgoCD есть встроенные для стандартных ресурсов и свои через скрипты в конфигурации. Расшифровка секретов через встроенный механизм Flux потребует в ArgoCD отдельного подключаемого модуля. Управление порядком развёртывания тоже разное: у Flux это зависимости между описаниями, у ArgoCD это волны и фазы синхронизации.

Обратный переход с ArgoCD на Flux сложнее ровно потому, что одно приложение ArgoCD разворачивается в несколько ресурсов Flux. Понимание специфичных для ArgoCD понятий вроде волн синхронизации, хуков ресурсов и своих проверок здоровья не переносится в другой инструмент напрямую.

Как проводить миграцию, чтобы не уронить продакшен

Здравый способ один: не рубить с плеча, а запускать оба инструмента параллельно. Опытные практики советуют клиентам именно фазовую миграцию с одновременной работой обоих инструментов, чтобы избежать простоев. Принцип такой: перевести одно приложение за раз, убедиться, что новый инструмент управляет им корректно, и только потом убрать ресурсы старого.

Порядок безопасной миграции:
1. поднять новый инструмент рядом со старым, не трогая старый
2. перевести одно приложение и проверить статус синхронизации
3. убедиться, что состояние кластера не разъехалось
4. удалить ресурсы старого инструмента для этого приложения
5. повторить для следующего приложения

Эта методичность утомительна, но именно она спасает от ситуации, когда два инструмента начинают спорить за одни и те же ресурсы или старый продолжает откатывать то, что накатил новый.

Какой вывод сделать команде из пяти человек

Однозначного победителя в этой паре нет, и это честный итог. Оба инструмента отличный выбор для управления через git, а правильный зависит от предпочтений команды, существующих инструментов и операционных требований. Для маленькой команды разумная логика такая. Если в команде есть люди без глубокого знания Kubernetes, важна наглядность и быстрое обучение, а лишние сотни мегабайт ресурсов не критичны, ArgoCD с его интерфейсом и ролевой моделью окупит себя простотой освоения. Если же команда техничная, ценит минимализм, работает на ограниченных ресурсах вроде граничных или девелоперских кластеров и не боится командной строки, Flux даст экономию и операционную чистоту.

Есть и третий путь, который выбирают многие. Использовать оба инструмента под разные задачи: ArgoCD для развёртывания приложений, где интерфейс добавляет ценность, и Flux для компонентов инфраструктуры, где его распределённая модель и поддержка пакетов сияют.

Главный практический совет звучит просто: лучший инструмент управления через git это тот, которым команда будет пользоваться постоянно. И поскольку переход между инструментами стоит реальной переработки манифестов и аккуратной фазовой миграции, первый выбор стоит делать вдумчиво, честно оценив, что важнее для конкретной пятёрки людей, наглядность пульта или лёгкость и автономность агентов. Ошибиться не смертельно, мигрировать можно, но цена ошибки измеряется неделями переписывания описаний, а не парой команд.