ADG Оставить заявку
Блог DevOps 4 мин чтения

ArgoCD 0.x: GitOps-контроллер для Kubernetes, первое знакомство

Развернули ArgoCD в тестовом кластере и впервые ощутили разницу: состояние кластера теперь живёт в git, а не в памяти у инженеров.

Контекст момента

ArgoCD 0.x набирает популярность в Kubernetes-сообществе как практическая реализация GitOps-подхода

Несколько недель назад в одном из managed-проектов нам понадобилось разобраться с дрейфом конфигурации. Сценарий классический: в кластере что-то поменяли руками - «временно», разумеется, - потом это «временно» прожило несколько месяцев и успело стать частью реальности, о которой знал ровно один человек. Когда тот человек ушёл в отпуск, выяснять что происходит пришлось через kubectl describe и историю терминала.

Именно тогда мы решили наконец потрогать ArgoCD руками.

Что такое ArgoCD и почему сейчас

ArgoCD - это GitOps-контроллер для Kubernetes. Идея простая: есть git-репозиторий с манифестами (или Helm-чартами, или Kustomize), и есть кластер. ArgoCD следит за тем, чтобы состояние кластера соответствовало тому, что написано в репозитории. Расхождение - значит OutOfSync, можно синхронизировать вручную или автоматически.

Проект сейчас на версии 0.x - в production у него довольно активное коммьюнити и несколько серьёзных адаптеров из CNCF-экосистемы. Но называть его боевым инструментом без оговорок мы бы не стали: это 0.x, API ещё может меняться. Тем не менее для тестового кластера - самое то.

Как разворачивали

Поставили в отдельный namespace argocd, всё через официальные манифесты из репозитория проекта. Занял процесс от kubectl apply до рабочего UI примерно двадцать минут, включая время разобраться с ingress - нам нужен был внешний доступ, а не только port-forward.

ArgoCD разворачивается как несколько компонентов:

  • argocd-server - API-сервер и UI, через него ведётся вся работа.
  • argocd-repo-server - отдельный сервис для работы с git-репозиториями и рендеринга манифестов.
  • argocd-application-controller - собственно контроллер, который следит за состоянием приложений в кластере.
  • argocd-dex-server - SSO-интеграция, если нужна; в нашем случае пока просто базовая аутентификация.

Подключили тестовый репозиторий с несколькими Helm-чартами, создали первое Application через UI. Кластер-цель - тот же, где живёт ArgoCD. Через минуту приложение появилось в Synced состоянии.

Что изменилось в ощущениях

Первое и самое важное: ты видишь расхождение. Если кто-то сделал kubectl edit deployment или применил манифест вне git - ArgoCD это покажет как OutOfSync. Это не ловит нарушителей и не запрещает руками не трогать, но теперь видно, что факт расхождения есть. Раньше такого видения не было вообще.

Второе: git становится фактическим source of truth, а не декларативным намерением на листочке. Когда у тебя автоматическая синхронизация включена - кластер сам возвращается к состоянию из репозитория, если кто-то что-то руками поменял. Это двойственное ощущение: с одной стороны, порядок; с другой, «а вдруг кто-то правил по делу?» - и тут важно договориться о процессе заранее.

Третье: история деплоев видна через git. Коммит - деплой. Откат - это git revert плюс синхронизация, а не helm rollback с его артефактами в памяти tiller (который в Helm 2 живёт в кластере и тоже является состоянием вне git).

Что не всё так гладко

ArgoCD 0.x - это 0.x. Мы словили пару странных поведений. Одно из них: при определённых конфигурациях Helm-чарта с условными блоками внутри шаблона ArgoCD не всегда корректно рендерил diff - показывал изменение там, где его не было. Неприятно, но не критично для тестовой установки.

RBAC в самом ArgoCD настроен довольно грубо по умолчанию - нужно потратить время на проекты и политики, если у тебя не один человек работает с системой. Мы пока оставили базовую конфигурацию, но для production так явно не пойдёт.

Интеграция с Helm происходит через встроенный рендер манифестов - ArgoCD сам вызывает helm template, поэтому tiller не нужен. Это плюс с точки зрения безопасности, но означает, что некоторые Helm-хуки (post-install, pre-upgrade) не срабатывают - ArgoCD работает только с итоговыми манифестами.

Куда смотреть дальше

Нас сейчас интересуют две вещи. Первая - шаблонизация Application-объектов: при нескольких однотипных проектах хочется не дублировать конфиги вручную, и мы смотрим, как это решается на уровне CI или внешних скриптов. Вторая - разграничение доступа через Projects: у нас несколько команд, и каждой нужен свой namespace с ограниченными правами на синхронизацию.

GitOps как подход требует дисциплины: всё через git, никаких боковых kubectl apply. Это культурный сдвиг, который инструментом не решается. ArgoCD - это видимость расхождения и механизм синхронизации, но не барьер от ошибок.

Пока впечатление положительное. Главное что мы вынесли: инженеры перестают быть живыми носителями состояния кластера - оно теперь в репозитории, и туда можно заглянуть.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.