GitOps меняет не команду деплоя, а модель управления Kubernetes. Источником истины становится Git: в нём хранится желаемое состояние, а контроллер в кластере сверяет его с реальностью и применяет изменения.
CI при этом не исчезает. Он по-прежнему собирает образ, запускает тесты, проверяет безопасность и публикует артефакт. Но вместо прямого доступа к production Kubernetes API CI обновляет Git: тег образа, Helm values, Kustomize overlay или версию chart. Дальше деплой выполняет GitOps-контроллер.
Выбор между Argo CD и Flux — это не вопрос “что лучше”, а вопрос операционной модели:
- Argo CD чаще подходит, когда командам нужна наглядная панель релизов: статус приложения, различия между Git и кластером, синхронизация, ошибки ресурсов и ручной контроль.
- Flux чаще подходит, когда GitOps встраивается во внутреннюю платформу: всё описывается через Kubernetes API, CRD, контроллеры, namespaces и RBAC.
- Argo CD проще отдать продуктовым командам и SRE, которым важно быстро видеть состояние приложения.
- Flux лучше ложится на платформенную автоматизацию, где команды получают готовые шаблоны, а управление идёт через Git и Kubernetes-ресурсы.
- В обоих случаях GitOps не сработает без дисциплины: секреты нельзя хранить в Git открыто, ручные правки в кластере должны возвращаться в репозиторий, а rollback нужно описать заранее.
Итог простой: Argo CD выбирают, когда важна видимость релизов для людей. Flux выбирают, когда GitOps должен стать частью Kubernetes-native платформы. Оба инструмента решают одну задачу, но по-разному распределяют ответственность между разработчиками, SRE и платформенной командой.
Почему GitOps становится нужен при росте Kubernetes

Ручной kubectl apply, прямой деплой из CI и срочные правки в кластере выглядят приемлемо, пока сервисов мало, окружения понятны, а дежурный инженер помнит, что именно менялось ночью. Но при росте эта модель быстро начинает ломаться.
Появляются несколько команд, несколько кластеров, разные Helm values для dev, stage и production, отдельные права на рабочую среду и постоянный вопрос: где теперь источник истины — в Git, CI, фактическом состоянии кластера или в чате инцидента?
GitOps отвечает на этот вопрос жёстко: источник истины находится в Git. Kubernetes больше не должен быть местом, где вручную собирают нужное состояние. Он становится средой, которая должна соответствовать описанию в репозитории.
Argo CD и Flux решают эту задачу по-разному. Argo CD строит управление вокруг приложения и его статуса: что синхронизировано, что отличается, где ошибка и что нужно применить. Flux ближе к платформенной модели: состояние описывается через Kubernetes-ресурсы, CRD, контроллеры и права внутри кластера.
Дальше стоит сначала разобрать, что именно GitOps меняет в Kubernetes-деплое, а уже затем сравнивать Argo CD и Flux по операционной модели, правам, нескольким кластерам, Helm/Kustomize, миграции и типовым ошибкам.
Что меняет GitOps в Kubernetes-деплое

После вводной логики главный вопрос звучит так: что именно меняется, когда команда переходит на GitOps. На поверхности кажется, что меняется только способ запуска деплоя. Вместо прямого kubectl apply появляется контроллер, который применяет манифесты из репозитория. Но на практике меняется важнее вещь — место, где принимается решение о нужном состоянии системы.
В старой модели CI мог собрать образ, пройти тесты и сразу применить изменения в Kubernetes. В GitOps-модели CI больше не должен напрямую управлять рабочим кластером. Он собирает образ, проверяет его, публикует в реестр и обновляет описание желаемого состояния в Git: тег образа, Helm values, Kustomize overlay или версию chart. После этого GitOps-контроллер видит коммит, сравнивает репозиторий с фактическим состоянием кластера и приводит Kubernetes к описанному состоянию.
Так GitOps превращается не в “запуск YAML из Git”, а в постоянную сверку желаемого и фактического состояния. В Git хранится то, как система должна выглядеть. В Kubernetes находится то, как она выглядит сейчас. Контроллер следит за расхождениями и применяет изменения через pull-модель: кластер сам забирает нужное состояние из Git, а не CI проталкивает команды в production.
Проще всего это увидеть на примере релиза SaaS-сервиса. CI собирает новый образ, прогоняет тесты, выполняет проверки безопасности, публикует образ в registry и меняет его версию в Git. После merge GitOps-контроллер обнаруживает изменение, синхронизирует кластер и показывает статус применения. Если ночью инженер вручную увеличил replicas или поправил values прямо в кластере, это уже не “незаметная правка”: появляется drift — расхождение между Git и реальным состоянием Kubernetes.
После перехода на GitOps граница ответственности становится понятнее:
- CI отвечает за сборку образа, тесты, проверки безопасности, публикацию артефакта и обновление Git.
- GitOps CD отвечает за обнаружение изменений, сверку Git и кластера, синхронизацию, статус применения и показ расхождений.
Такое разделение уменьшает необходимость выдавать CI прямой доступ к production Kubernetes API. Любое постоянное изменение проходит через коммит, pull request, review и историю версий, а не растворяется в логах конвейера или в ручных действиях администратора.
Практическая ценность GitOps именно в этой дисциплине. Окружения становятся воспроизводимее, причины изменений — понятнее, а ручные hotfix перестают жить отдельно от инфраструктурного кода. Но если команда продолжает править кластер напрямую и использует GitOps только как декоративный слой поверх старого процесса, модель ломается: Git снова перестаёт быть источником истины, а drift превращается не в полезный сигнал, а в постоянный шум.
Когда эта базовая модель понятна, можно сравнивать Argo CD и Flux. Они решают одну и ту же GitOps-задачу, но по-разному показывают состояние, распределяют ответственность и встраиваются в ежедневную эксплуатацию Kubernetes.
Argo CD и Flux: две разные операционные модели GitOps

Argo CD: приложение как центр управления
Концепцию Argo CD удобно осознавать через Application. Это не просто объект конфигурации, а рабочая точка входа для команды: приложение, его ресурсы, статус синхронизации, различия между Git и кластером, ошибки применения и деградация зависимых объектов.
Разработчику или SRE не нужно сразу проваливаться в десятки Kubernetes-ресурсов, чтобы понять, почему релиз “не доехал”. Команда открывает интерфейс, API или CLI и видит состояние приложения как цельной сущности: что применено, что отличается от Git, какие ресурсы требуют внимания и можно ли запускать синхронизацию.
Например, продуктовая команда видит, что checkout-api находится в состоянии OutOfSync. В Argo CD понятно, какие манифесты отличаются от Git, какие ресурсы уже применены, а где возникла ошибка. Это удобно для организаций, где команды сами участвуют в релизах и хотят видеть состояние сервиса без глубокого разбора всех внутренних Kubernetes-объектов.
В такой модели Argo CD снижает порог входа. Он помогает командам “видеть приложение” и быстрее разбирать проблемы релиза.
Flux: GitOps как часть платформы Kubernetes
Flux устроен иначе. Он ближе к модели Kubernetes как платформы: состояние описывается через CRD (Custom Resource Definition), а контроллеры обрабатывают Kustomization, HelmRelease и другие ресурсы. CRD — это расширения API Kubernetes под собственные типы ресурсов.
Для платформенной команды такой подход часто выглядит естественно. Релиз становится таким же управляемым объектом, как Deployment, Ingress или namespace. Управление идёт через Git, Kubernetes API, namespaces, RBAC и автоматизацию, а не через отдельный визуальный контур вокруг приложения.
Например, платформенная команда описывает сервис через HelmRelease, задаёт стандартную структуру репозиториев, правила окружений и границы доступа. Дальше Flux-контроллеры приводят кластер к нужному состоянию, а продуктовые команды работают через готовые шаблоны и понятные правила.
В такой модели Flux лучше подходит там, где GitOps должен стать частью внутренней платформы. Он менее завязан на визуальный интерфейс и сильнее опирается на Kubernetes-native подход: ресурсы, контроллеры, права и автоматизацию.
Если упростить, Argo CD чаще выбирают там, где важна наглядность релизов для людей. Flux чаще подходит там, где GitOps должен быть встроен в платформенную автоматизацию. Но одного этого различия недостаточно: дальше нужно сравнить инструменты по одинаковым критериям — видимость для команд, несколько кластеров, права доступа, Helm и Kustomize, обнаружение расхождений, уведомления и сложность поддержки.
Ключевые различия Argo CD и Flux

После сравнения операционных моделей полезно зафиксировать различия по нескольким практическим критериям. Здесь важен не список функций сам по себе, а последствия для команды: кто видит статус релиза, где настраиваются права, как поддерживаются несколько кластеров и насколько глубоко инструмент встраивается в Kubernetes-платформу.
Коротко различие можно свести так:
| Критерий | Argo CD | Flux |
| Основная модель | Приложение как центральная сущность | Kubernetes-ресурсы и контроллеры |
| Видимость для команд | Интерфейс, статус приложения, различия и ошибки | Статус через ресурсы, CLI, события и интеграции |
| Права и изоляция | Projects, роли, SSO, ограничения по репозиториям и кластерам | Namespaces, Kubernetes RBAC и раздельные CRD |
| Helm и Kustomize | Источник для приложения | Отдельные управляемые ресурсы |
| Несколько кластеров | Удобен единый обзор из центрального контура | Часто ближе к модели “контроллер в каждом кластере” |
Эта таблица показывает разный центр тяжести. Argo CD делает GitOps более видимым для людей: приложение, статус, расхождения и синхронизация собраны в одном контуре. Flux сильнее опирается на привычную модель Kubernetes: ресурсы, контроллеры, namespace, RBAC и автоматизацию через Git.
Поэтому сравнение лучше читать не как выбор интерфейса, а как выбор эксплуатационной модели. Сначала стоит понять, кому каждый день нужно видеть релизы и разбирать ошибки. После этого уже имеет смысл смотреть на права, несколько кластеров и поддержку Helm/Kustomize.
Видимость релизов
Argo CD сильнее там, где людям нужно быстро понять, что происходит с приложением. Интерфейс показывает статус синхронизации, отличия между Git и кластером, ошибки ресурсов и общее состояние приложения. Это удобно для продуктовых команд и SRE, которым важно не только применить манифесты, но и быстро разобраться, почему релиз остановился или ушёл в OutOfSync.
Flux меньше строится вокруг единой панели приложения. Он больше опирается на Kubernetes API, состояния ресурсов, события контроллеров и интеграции. Такой подход хорошо работает в зрелой платформенной модели, но требует от команды лучшего понимания Kubernetes-объектов и контроллерной логики.
Видимость релизов напрямую связана с тем, как в организации устроены доступы. Если приложение видят многие команды, важен один тип управления. Если GitOps обслуживает платформенная команда, а продуктовые команды получают готовые шаблоны, модель может быть другой.
Права, изоляция и несколько кластеров

В Argo CD проще построить централизованный контур доступа: проекты, роли, SSO, ограничения по репозиториям, namespace и кластерам. Это удобно, если организация хочет дать командам единую панель релизов и управлять доступом из одного места.
Flux естественнее ложится на разделение через namespaces, Kubernetes RBAC и отдельные ресурсы. Его часто выбирают, когда каждый кластер должен быть ближе к самодостаточной платформенной единице: подключается к Git, получает свои контроллеры и живёт по общим шаблонам.
Поэтому вопрос нескольких кластеров — не “кто поддерживает лучше”, а “где должен жить контроль”. Argo CD удобен для единого обзора. Flux — для модели, где кластеры автономнее, а GitOps встроен в платформу как набор Kubernetes-примитивов.
После прав и кластеров остаётся ещё один практический слой: как команды уже описывают приложения. Если деплой давно построен вокруг Helm и Kustomize, важно смотреть не только на поддержку этих инструментов, но и на то, где команда будет искать состояние релиза.
Helm, Kustomize и поддержка
Оба инструмента работают с Helm и Kustomize, но по-разному показывают владение релизом. В Argo CD Helm chart или Kustomize overlay становится источником для Application, а команда видит результат как состояние приложения. Во Flux HelmRelease и Kustomization становятся отдельными Kubernetes-ресурсами, которыми управляют контроллеры.
Разница проявляется в сопровождении. Argo CD проще воспринимается пользователями, но требует поддерживать центральный контур: доступы, проекты, SSO, права на кластеры и политику синхронизации. Flux менее заметен для продуктовых команд, зато требует зрелой платформенной эксплуатации: контроллеры, CRD, bootstrap-процессы, обновления и наблюдаемость по кластерам.
Вывод простой: Argo CD делает управление релизом более видимым и удобным для людей. Flux делает GitOps более естественной частью Kubernetes-платформы. Поэтому дальше выбирать инструмент лучше не по списку функций, а по организационному сценарию: кто владеет релизом, кто видит ошибки и кто управляет платформой.
Организационные сценарии выбора Argo CD или Flux

После сравнения возможностей важно наложить их на реальную модель ответственности. Вопрос не в том, какой инструмент “лучше вообще”, а в том, кто управляет деплоем, кто видит ошибки релиза и где проходит граница между продуктовой командой, SRE и платформой.
Сценарий 1. Продуктовые команды сами смотрят релизы
Если несколько команд самостоятельно следят за статусом релиза, различиями между Git и кластером, ошибками ресурсов и ручной синхронизацией, чаще удобнее Argo CD. Он даёт понятный визуальный контур: приложение, статус, расхождения, ошибки применения и состояние зависимых объектов.
Это особенно полезно, если сервисов много, а уровень Kubernetes-экспертизы у команд разный. Разработчику не нужно сразу разбирать десятки низкоуровневых ресурсов. Он видит, что приложение OutOfSync, понимает, какие изменения не применились, и может действовать по согласованному процессу.
Сценарий 2. Платформенная команда строит внутреннюю платформу
Если деплой должен быть частью общей платформы, а команды получают готовые шаблоны и правила, логичнее смотреть в сторону Flux. Он лучше ложится в модель, где всё описывается через Kubernetes API: HelmRelease, Kustomization, namespaces, RBAC и контроллеры.
В такой схеме продуктовая команда может не управлять GitOps-инструментом напрямую. Платформенная команда задаёт структуру репозиториев, правила окружений, права и стандартные способы доставки приложений. Flux становится не отдельной панелью релизов, а частью платформенной автоматизации.
Сценарий 3. Много команд, разные права и строгая изоляция
Когда команд и namespace много, ключевой вопрос — модель прав. Если нужен единый слой доступа, видимости и управления релизами, чаще удобнее Argo CD: проекты, роли, SSO, допустимые репозитории, namespace и кластеры можно собрать в одном контуре.
Если организация уже строит изоляцию через Kubernetes RBAC, namespaces и платформенные шаблоны, Flux может оказаться естественнее. Он меньше добавляет отдельный слой управления и лучше наследует Kubernetes-подход к разделению ответственности.
Ошибка в этом сценарии быстро становится операционной проблемой. Команда либо видит слишком много, либо не может разобраться в собственном релизе, либо получает доступ не туда, куда нужно. Поэтому выбор инструмента здесь начинается не с деплоя, а с проектирования прав.
Сценарий 4. Несколько кластеров и разные зоны ответственности
При нескольких кластерах важно решить, где должен жить контроль. Центральный контур удобен для общего обзора, аудита и управления доступами. Здесь часто выигрывает Argo CD: он даёт единый взгляд на приложения в разных кластерах.
Flux чаще подходит там, где каждый кластер должен быть более самостоятельным. Его можно поднять через bootstrap, подключить к Git и получить воспроизводимое состояние без постоянной зависимости от центральной панели. Такая модель удобна для платформенных команд, которые хотят стандартизировать кластеры, но не превращать один управляющий слой в критичную точку.
Сценарий 5. Helm и Kustomize уже стали стандартом

Если деплой давно построен вокруг Helm и Kustomize, сравнивать нужно не поддержку этих инструментов, а модель владения релизом. В Argo CD chart или overlay становится источником для Application, а команда видит итог как состояние приложения.
Во Flux HelmRelease и Kustomization становятся полноценными Kubernetes-ресурсами. Это удобнее, если команда привыкла мыслить через ресурсы, контроллеры и статусы внутри кластера. Разница важна в момент ошибки: причину будут искать либо в панели приложения, либо в состоянии Kubernetes-ресурсов и контроллеров.
Итог такой: Argo CD чаще выигрывает там, где важна прозрачность релизов для людей. Flux сильнее там, где GitOps должен стать частью платформенной автоматизации. Но сам выбор инструмента — только половина работы. Дальше его нужно встроить в текущий путь деплоя и постепенно уйти от ручного kubectl и прямого деплоя из CI.
Миграция от kubectl и CI-driven deploy к GitOps

После выбора Argo CD или Flux важно не просто поставить контроллер, а перенести центр управления изменениями. Если раньше CI собирал образ и сам выполнял kubectl apply в рабочую среду, теперь CI должен доходить только до Git: обновлять тег образа, версию chart, values или overlay. Применение состояния в Kubernetes забирает GitOps CD.
Сначала привести желаемое состояние в Git
Первый этап — собрать то, чем команда уже пользуется: манифесты, Helm charts, Kustomize overlays, values для разных окружений. Всё, что должно считаться желаемым состоянием, нужно перенести в Git и убрать зависимость от локальных файлов, ручных команд и “знаний в голове” отдельных инженеров.
На этом же этапе стоит разделить окружения, namespace и зоны ответственности команд. Иначе GitOps-контроллер появится, но источник истины останется размытым: часть состояния будет в Git, часть в кластере, часть в CI, часть в ручных правках.
Затем разделить CI и GitOps CD
CI не исчезает. Он остаётся важной частью поставки, но перестаёт напрямую применять изменения в production Kubernetes API. Это разделение лучше сразу зафиксировать в процессе, чтобы команда понимала, где заканчивается сборка и где начинается применение состояния.
Для удобства восприятия подготовили таблицу:
| Зона | За что отвечает |
| CI | Сборка образа, тесты, проверки безопасности, публикация артефакта |
| Git | Хранение желаемого состояния: тег образа, chart, values, overlay |
| GitOps CD | Сверка Git и кластера, синхронизация, статус применения, drift |
| Команда | Review изменений, правила ручной синхронизации, откат и срочные правки |
GitOps-контроллер подключается к выбранным репозиториям и окружениям, видит изменения в Git и синхронизирует кластер. На старте лучше не включать полную автоматизацию сразу. Безопаснее начать с ручной синхронизации: команда видит различия, понимает последствия и учится читать состояние Argo CD или Flux.
Автоматизацию включать постепенно
Переход лучше начинать не со всех production-сервисов, а с пилотного контура. Хороший кандидат — stateless-сервис без сложных миграций базы данных. Для него можно завести отдельные values или overlays для dev, stage и prod, подключить GitOps сначала к dev, затем к stage и только после проверки процесса — к production.
В пилоте важно проверить не только успешный деплой. Нужны и неприятные сценарии:
- Ошибочный образ;
- Невалидный манифест;
- Ручное изменение replicas;
- Расхождение между Git и кластером;
- Откат к предыдущей версии.
Именно такие проверки показывают, готова ли команда жить в GitOps-модели. Если все смотрят только на “зелёный” деплой, проблемы всплывут позже: во время инцидента, ручного hotfix или неудачного релиза.
Заранее описать срочные правки и откат
GitOps не отменяет инциденты. Поэтому до включения автоматического восстановления нужно договориться, как выполняются срочные изменения и rollback.
Ручная правка может быть допустима как исключение, но после неё изменение должно вернуться в Git. Иначе контроллер либо перезапишет правку, либо будет постоянно показывать расхождение. Откат тоже должен быть описан заранее: через revert-коммит, предыдущий тег образа, версию chart или values.
Миграция обычно ломается не на Argo CD или Flux, а на дисциплине изменений. Если секреты лежат в Git как обычные манифесты, кластер продолжают править вручную, а процесса отката нет, GitOps превращается в формальный слой поверх старого деплоя. Поэтому следующий шаг — отдельно разобрать типовые ошибки, которые мешают GitOps стать настоящим источником истины.
Типовые ошибки при переходе на GitOps

GitOps хорошо проявляет слабые места старого деплоя. То, что раньше выглядело как “быстрая ручная правка” или особенность конкретного CI-конвейера, после внедрения Argo CD или Flux превращается в постоянный drift, конфликт прав или риск безопасности.
Критичные ошибки лучше зафиксировать до включения полной автоматизации:
| Ошибка | Почему опасно | Что сделать |
| Хранить Kubernetes Secrets в Git как обычные YAML | base64 — не шифрование, а история Git сохраняет утечки надолго | Использовать SOPS, Sealed Secrets, External Secrets Operator или внешнее хранилище секретов |
| Продолжать ручные правки в кластере | Git говорит одно, кластер содержит другое, контроллер постоянно видит расхождение | Все постоянные изменения возвращать в Git через pull request |
| Оставить CI прямой доступ к production API | Источник истины снова размывается между Git, CI и кластером | CI должен обновлять Git, а применение состояния должен выполнять GitOps-контроллер |
| Не описать rollback | В инциденте команда спорит, что откатывать: образ, chart, values, манифест или миграцию | Заранее определить точки возврата и порядок проверки после отката |
| Не договориться об emergency-доступе | Срочная правка может остаться “невидимой” для Git и быть перезаписана контроллером | Разрешать ручной доступ только как исключение: с логированием, сроком и последующим PR |
Самая частая проблема — секреты. Kubernetes Secret в виде YAML нельзя считать защищённым только потому, что значение закодировано в base64. Для GitOps это особенно опасно: репозиторий становится центральной точкой управления окружениями, а история коммитов хранит ошибку даже после удаления строки. Поэтому секреты нужно либо выносить во внешнее хранилище, либо хранить в Git только в зашифрованном виде.
Вторая типовая проблема — ручные изменения. Если инженер через kubectl edit изменил replicas, поправил ресурс или вручную обновил Helm-релиз, GitOps-контроллер увидит расхождение. Дальше возможны два плохих сценария: контроллер перезапишет ручную правку или будет постоянно показывать OutOfSync. Чтобы этого не было, любое постоянное изменение должно возвращаться в Git.
Откат тоже нужно описать заранее. В GitOps он часто выглядит проще: можно вернуть предыдущий коммит, тег образа, версию chart или values. Но это не решает всё автоматически. Миграции базы данных, очереди, данные и внешние зависимости могут требовать отдельного плана. Поэтому rollback должен быть частью релизного процесса, а не импровизацией во время аварии.
Если эти ошибки закрыты до включения полной автоматизации, переход к GitOps становится спокойнее. Команда понимает, где лежит источник истины, как обрабатываются исключения, кто может менять production и что делать при неудачном релизе.
Заключение

Выбор между Argo CD и Flux стоит начинать не с установки, а с модели эксплуатации. Если деплой должен быть понятен продуктовым командам, SRE и разработчикам через статус приложения, различия и управляемую синхронизацию, чаще удобнее Argo CD. Если GitOps должен стать частью внутренней платформы, где всё описывается через Kubernetes API, CRD, namespaces и RBAC, логичнее смотреть на Flux.
В обоих случаях GitOps работает только при дисциплине процесса: Git остаётся источником истины, CI не применяет изменения напрямую в production, ручные правки возвращаются в репозиторий, секреты не хранятся в открытом виде, а rollback заранее описан. Инструмент помогает удерживать состояние кластера, но не заменяет правила владения окружениями, доступами и релизами.
FAQ
Можно ли использовать Argo CD и Flux вместе?
Можно, но это редко нужно на старте. Совместное использование оправдано, если у команд уже есть разные зрелые практики: например, Argo CD для приложений и Flux для платформенных компонентов. Без чётких границ такой подход усложняет поддержку.
Что проще внедрить для команд разработки?
Чаще проще Argo CD. Его интерфейс, статус приложения, различия и синхронизация быстрее объясняют, что происходит с релизом. Flux требует большей привычки работать через Kubernetes-ресурсы, CLI и контроллерную модель.
Нужно ли полностью убирать CI после перехода на GitOps?
Нет. CI остаётся для сборки, тестов, проверок безопасности, публикации образа и обновления манифестов или values в Git. Меняется CD-часть: применение в Kubernetes выполняет GitOps-контроллер.
Как правильно делать rollback в GitOps?
Обычно через возврат коммита, тега образа, версии chart или values к предыдущему состоянию. Но такой rollback не откатывает автоматически миграции базы данных, данные, очереди и внешние зависимости. Для них нужен отдельный план восстановления.
Почему нельзя хранить Kubernetes Secrets в Git как есть?
Потому что base64 в Kubernetes Secrets — не шифрование. Для GitOps нужны безопасные подходы: внешние secret stores, Sealed Secrets, SOPS, External Secrets Operator, encryption at rest и строгий RBAC.
Что делать, если в production всё же внесли ручную правку?
Её нужно как можно быстрее зафиксировать в Git. Иначе контроллер либо перезапишет изменение, либо будет постоянно показывать расхождение. Emergency-доступ лучше описать отдельным процессом, а не оставлять как обычный способ деплоя.
Список источников
1. OpenGitOps — GitOps Principles v1.0.0
4. Kubernetes Documentation — Good practices for Kubernetes Secrets



