В облачно-ориентированной разработке платформа Kubernetes стала де-факто стандартом для оркестровки контейнеров.

Однако эффективное и автоматическое обеспечение того, чтобы состояние кластера соответствовало требуемой конфигурации, является постоянной проблемой.

GitOps — практика, при которой источник достоверности для развертываний хранится в репозитории Git, — предлагает декларативный, проверяемый и контролируемый по версиям подход к управлению конфигурациями.

Среди доступных инструментов, ориентированных на GitOps, Argo CD выделяется как мощное решение.

В этой статье обсудим, почему стоит использовать Argo CD, не ограничиваясь Helm, ознакомимся с альтернативными инструментами, рассмотрим процесс настройки Argo CD и покажем пример того, как Argo CD отслеживает YAML-файлы в Git.

Почему стоит выбрать Argo CD, не ограничиваясь использованием Helm

АспектыHelmArgo CD
Основная функцияМенеджер пакетов и движок-шаблонизатор для манифестов KubernetesНепрерывная доставка на основе GitOps и управление жизненным циклом приложений
Метод развертыванияОбычно запускается вручную через CLI или интегрируется в конвейеры CI/CDДекларативное управление конфигурацией, постоянная синхронизация кластера с источником доверия Git
Управление состояниемНе отслеживает и не поддерживает желаемое состояние кластера; пользователи должны вручную повторно применять или обновлять состояниеПостоянный мониторинг и согласование состояние кластера с желаемым состоянием, определенным в Git
Возвраты  Требуется ручной возврат с помощью команды helm rollback; может потребоваться самостоятельное отслеживание конкретных версий 
Встроенный контроль версий через историю Git; легко осуществляемый автоматический возврат к предыдущим известным состояниям
Обнаружение дрейфаОграниченное обнаружение дрейфа; пользователи должны вручную выполнять команды для сравненияАвтоматическое обнаружение дрейфа и согласование, снижение риска дрейфа конфигурации и «скрытых» различий текущего и желаемого состояния
Интеграция с GitOpsНе является GitOps-ориентированным, однако может быть интегрирован как часть GitOps-конвейера с помощью внешних инструментов
Нативный GitOps-инструмент; Git-репозиторий является единым источником доверия, обеспечивающий аудитопригодность и отслеживаемость
Безопасность и соответствие нормативным требованиямНеобходимость полагаться на процесс и лучшие практики для целей аудита и обеспечения безопасности Предоставляет строгие следы аудита, контроль доступа и прозрачную историю всех изменений через Git 
Прогрессивная доставкаТребуется ручная настройка или дополнительные инструменты для достижения пробных (canary), бесшовных (blue-green) или поэтапных развертываний (progressive rollouts)

Легко интегрируется с Argo Rollouts, упрощая прогрессивную доставку и продвинутые стратегии релиза

1. GitOps-модель и единый источник достоверности. Helm фокусируется на упаковке и шаблонизации манифестов Kubernetes. Argo CD, напротив, реализует GitOps-модель, в которой «желаемое состояние» («desired state») приложений хранится в Git. Argo CD постоянно следит за целевым кластером Kubernetes и сравнивает его с Git-репозиторием. Если появляются какие-либо расхождения, он автоматически (или по требованию) их устраняет. Таким образом, кластер всегда отражает правильную, запланированную конфигурацию. Такой подход снижает риск дрейфа конфигурации, упрощает аудит и обеспечивает прозрачную историю изменений.

2. Непрерывная поставка и декларативное управление. В Helm развертывание и обновление приложений часто зависит от ручных операций CLI или конвейеров CI/CD для запуска команд helm upgrade. Однако Argo CD непрерывно синхронизирует кластер с желаемым состоянием, заданным в Git. Это эффективно устраняет ручное вмешательство, оптимизирует непрерывную поставку и гарантирует, что живая среда кластера никогда не отклонится от задокументированной конфигурации.

3. Легкий возврат и контроль версий. Поскольку Argo CD использует Git, каждое изменение версионируется. Если что-то пойдет не так, можно легко возвратиться к предыдущей, заведомо корректной конфигурации. Этот встроенный контроль версий значительно снижает риск возникновения нестабильных сред и ускоряет аварийное восстановление и устранение неполадок.

4. Интеграция с Helm, Kustomize и другими инструментами. Argo CD не является заменой возможностей шаблонизатора Helm. Однако он может напрямую использовать диаграммы Helm, а также оверлеи Kustomize, Jsonnet и обычные YAML-манифесты. Включение диаграмм Helm в рабочий GitOps-процесс Argo CD позволяет объединить преимущества обоих инструментов: мощную шаблонизацию Helm и непрерывную автоматическую синхронизацию Argo CD.

Альтернативы Argo CD

Хотя Argo CD является ведущим GitOps-инструментом, стоит упомянуть и другие аналогичные решения.

Flux CD

Flux — еще один GitOps-инструмент, который непрерывно мониторит Git-репозиторий и сверяет его с кластером Kubernetes. Он предлагает бесшовную интеграцию с Helm и Kustomize. Хотя Flux известен своей простотой и легким дизайном, Argo CD часто предоставляет более богатый пользовательский интерфейс, улучшенные визуализации и расширенные стратегии «из коробки».

Jenkins X

Jenkins X объединяет принципы CI/CD и GitOps, предоставляя комплексное решение для создания и развертывания приложений. Он сложнее, чем Argo CD, и может оказаться излишеством, если вам нужна только непрерывная доставка с GitOps.

Flagger (с Flux)

Flagger ориентирован на прогрессивную доставку и канареечные релизы. В паре с Flux он может предложить опыт, схожий с Argo CD в сочетании с Argo Rollouts, обеспечивая контролируемое и инкрементное развертывание новых релизов.

Spinnaker

Spinnaker, изначально разработанный Netflix, — мощная мультиоблачная платформа непрерывной доставки. Не являясь чистым GitOps-инструментом, она отлично справляется с управлением сложными развертываниями в нескольких средах и облаках. Ее сложность и кривая обучения выше по сравнению с Argo CD.

Настройка Argo CD в среде Kubernetes

Необходимые условия

  • Функционирующий кластер Kubernetes (локальный или облачный).
  • Установленный и настроенный kubectl для доступа к кластеру.
  • Git-репозиторий, содержащий манифесты Kubernetes или диаграммы Helm.

Этапы настройки

1. Установление области управления Argo CD:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
  • Подтверждение установки:
kubectl get pods -n argocd

Убедитесь, что все модули (pod’ы) находятся в состоянии Running (выполнения).

2. Вход в пользовательский интерфейс Argo CD:

kubectl port-forward svc/argocd-server -n argocd 8080:443

Затем откройте https://localhost:8080 в браузере. Первоначальное имя пользователя — admin. Получите пароль отсюда:

kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d

Войдите в систему и немедленно измените пароль.

3. Регистрация целевого кластера (опционально). Если необходимо управлять отдельным кластером, можете добавить его:

argocd cluster add <context-name>

4. Создание приложения в Argo CD:

argocd app create my-app \
--repo https://github.com/example-org/my-app-config.git \
--path manifests \
--dest-server https://kubernetes.default.svc \
--dest-namespace default

Затем выполните следующее:

argocd app sync my-app

Это гарантирует, что желаемое состояние приложения (из Git) будет применено к вашему кластеру.

Какие YAML-файлы отслеживает Argo CD?

Argo CD отслеживает файлы на пути Git-репозитория, который вы указываете при создании ресурса Application. Эти файлы могут включать:

  • обычные YAML-манифесты Kubernetes;
  • конфигурации Kustomize (с kustomization.yaml);
  • диаграммы Helm (с Chart.yaml и шаблонами);
  • Файлы Jsonnet.

Argo CD автоматически обнаруживает и преобразует эти манифесты в конечные ресурсы Kubernetes, постоянно отслеживая обновления. Когда вы фиксируете новые изменения в Git с помощью коммитов, Argo CD обнаруживает их и синхронизирует кластер, поддерживая всегда точное желаемое состояние.

Пример: структура каталога и определение приложения

Рассмотрим Git-репозиторий с такой структурой:

Если хотите использовать каталог kustomize/overlays/staging для приложения, выполните команду:

argocd app create awesome-app \
  --repo https://github.com/example-org/awesome-app-config.git \
  --path kustomize/overlays/staging \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default

Argo CD находит kustomization.yaml по указанному пути, использует Kustomize для рендеринга финальных YAML-манифестов и развертывает их на кластере. Любые изменения, вносимые в этот каталог в Git, автоматически обнаруживаются и могут быть синхронизированы с кластером.

Заключение

Argo CD использует GitOps-модель для поддержания кластера Kubernetes в соответствии с конфигурациями, хранящимися в Git. По сравнению с использованием только Helm, Argo CD обеспечивает автоматическое согласование состояний, простой возврат версий, непрерывную доставку и улучшенные возможности проверки. Он может интегрироваться с такими инструментами, как Helm и Kustomize, создавая более надежный, декларативный рабочий процесс. Если вы только начинаете работать с GitOps или хотите усовершенствовать существующий конвейер, Argo CD предлагает безопасный, надежный и автоматизированный подход к управлению развертываниями в среде Kubernetes.

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Boqiang & Henry: Why Use Argo CD in Kubernetes Environment | by Boqiang & Henry | Dec, 2024 | Medium

Предыдущая статьяМентальная модель файла Linux, жесткие и мягкие ссылки
Следующая статьяОбъединение множеств C++: практическое руководство с реальными примерами