Модуль operator-argo разворачивает Argo CD Operator в кластере Deckhouse Kubernetes Platform (DKP). Модуль позволяет установить Argo CD в кластере DKP с помощью ресурса ArgoCD.
Модуль работает со следующими кастомными ресурсами:
- Application — описание развёртывания приложений и управление ими;
- ApplicationSet — шаблонизация и массовое создание приложений по определённым правилам;
- AppProject — определение набора приложений и политик доступа к приложениям;
- ArgoCD — основной ресурс для развёртывания и настройки экземпляра Argo CD;
- ArgoCDExport — экспорт настроек и состояния Argo CD для резервного копирования или миграции;
- ImageUpdater — автоматическое обновление образов контейнеров приложений;
- NamespaceManagement — определение правил управления неймспейсами для экземпляра Argo CD;
- NotificationsConfiguration — определение параметров уведомлений о событиях в Argo CD и приложениях.
Подробнее с настройками модуля и примерами его использования можно ознакомиться в соответствующем разделе документации.
Архитектура модуля
Для упрощения схемы приняты следующие допущения:
- На схеме показано, что контейнеры разных подов взаимодействуют друг с другом напрямую. Фактически они взаимодействуют через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса указано над стрелкой.
- Поды могут быть запущены в нескольких репликах, однако на схеме все поды изображены в одной реплике.
- На схеме изображены только основные контейнеры каждого компонента.
Архитектура модуля operator-argo на уровне 2 модели C4 и его взаимодействие с другими компонентами DKP изображены на следующих диаграммах:
-
Основной оператор модуля:
-
Вариант развёртывания экземпляра Argo CD с базой данных Redis в неотказоустойчивой конфигурации:
-
Вариант развёртывания экземпляра Argo CD с отказоустойчивой конфигурацией Redis (на диаграмме отражены только отличия от основного варианта развёртывания):
-
Вариант развёртывания экземпляра Argo CD в управляющем кластере в мультикластерной конфигурации (на диаграмме отражены только отличия от основного варианта развёртывания):
Компоненты модуля
Модуль состоит из следующих компонентов:
- Argocd-operator-controller-manager (Deployment) — реализация Argo CD Operator, позволяющая разворачивать экземпляры Argo CD в кластере DKP. Компонент работает со следующими кастомными ресурсами:
- ArgoCD — основной ресурс для развёртывания и настройки экземпляра Argo CD;
- ArgoCDExport — экспорт настроек и состояния Argo CD для резервного копирования или миграции. Оператор читает кастомный ресурс ArgoCDExport и создаёт Job/CronJob с именем, совпадающим с именем ресурса ArgoCDExport. Созданный Job/CronJob выполняет резервное копирование настроек экземпляра Argo CD;
- NamespaceManagement — определение правил управления неймспейсами для экземпляра Argo CD. Оператор следит за кастомным ресурсом NamespaceManagement и соответствующим образом обновляет ConfigMap
argocd-cmd-params-cm; - NotificationsConfiguration — определение параметров уведомлений о событиях в Argo CD и приложениях. Оператор читает кастомные ресурсы NotificationsConfiguration и на основе них обновляет конфигурацию в ConfigMap
argocd-notifications-cm.
Argocd-operator-controller-manager создаёт ресурсы Deployment, Secret, ConfigMap, StatefulSet и другие для каждого кастомного ресурса ArgoCD, добавляя имя этого ресурса в качестве префикса для создаваемых ресурсов.
Состоит из следующих контейнеров:
- manager — основной контейнер;
- kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищённого доступа к метрикам
manager.
Следующие компоненты описывают ресурсы, которые создаёт argocd-operator-controller-manager на основе конфигурации, заданной в кастомном ресурсе ArgoCD. Для описания используется префикс
<ArgoCD name>, который будет заменяться контроллером на имя ресурса ArgoCD. -
<ArgoCD name>-server (Deployment) — argocd-server, основной компонент взаимодействия с экземпляром Argo CD. Argocd-server предоставляет REST/gRPC API и пользовательский веб-интерфейс для управления Argo CD. Компонент позволяет управлять кастомными ресурсами Application, ApplicationSet и AppProject через предоставляемые интерфейсы (веб, API, CLI).
Оператор создаёт компонент, если в параметре
.spec.server.enabledкастомного ресурса ArgoCD задано значениеtrue(значение по умолчанию —true).Состоит из следующих контейнеров:
- argocd-server-init — опциональный набор init-контейнеров, задаваемых пользователем в параметре
.spec.server.initContainersкастомного ресурса ArgoCD; - rollout-extension — опциональный init-контейнер, загружающий расширение UI для работы с кастомным ресурсом Rollout. Модуль не предоставляет контроллер, обрабатывающий этот кастомный ресурс. Контроллер должен быть установлен и настроен отдельно. Argocd-operator-controller-manager добавляет rollout-extension, если значение параметра
.spec.server.enableRolloutsUIпринимает значениеtrue; - argocd-server — основной контейнер;
- argocd-server-sidecar — опциональный набор сайдкар-контейнеров, задаваемых пользователем в параметре
.spec.server.sidecarContainersкастомного ресурса ArgoCD.
- argocd-server-init — опциональный набор init-контейнеров, задаваемых пользователем в параметре
-
<ArgoCD name>-repo-server (Deployment) — argocd-repo-server, компонент, отвечающий за обработку шаблонов, генерацию манифестов приложений и работу с внешними репозиториями, используемыми в Argo CD. Argocd-repo-server отвечает за синхронизацию манифестов приложений из указанных репозиториев и передачу их в соответствующие компоненты для последующего развёртывания.
Оператор создаёт компонент, если в параметре
.spec.repo.enabledкастомного ресурса ArgoCD задано значениеtrue(значение по умолчанию —true).Состоит из следующих контейнеров:
- copyutil — init-контейнер, копирующий исполняемые файлы для использования из основного контейнера;
- argocd-repo-server-init — опциональный набор init-контейнеров, настраиваемых через параметр
.spec.repo.initContainersкастомного ресурса ArgoCD для подготовки окружения; - argocd-repo-server — основной контейнер, выполняющий операции по генерации и обработке манифестов, а также работу с удалёнными Git-репозиториями приложений;
- argocd-repo-server-sidecar — опциональный набор сайдкар-контейнеров, задаваемых пользователем в параметре
.spec.repo.sidecarContainersкастомного ресурса ArgoCD и позволяющих расширять функциональность repo-server.
-
<ArgoCD name>-application-controller (StatefulSet) — argocd-application-controller, компонент, отвечающий за синхронизацию и управление состоянием приложений, определённых в Argo CD. Argocd-application-controller обеспечивает идемпотентное применение манифестов Kubernetes, управление процессом развёртывания, отката, автоматического восстановления, а также отслеживание состояния ресурсов в кластере.
Оператор создаёт компонент, если в параметре
.spec.controller.enabledкастомного ресурса ArgoCD задано значениеtrue(значение по умолчанию —true).Состоит из следующих контейнеров:
- application-controller-init — опциональный набор init-контейнеров, настраиваемых через параметр
.spec.controller.initContainersкастомного ресурса ArgoCD для подготовки окружения; - argocd-application-controller — основной контейнер, реализующий логику синхронизации кастомных ресурсов Application и создаваемых на их основе ресурсов;
- application-controller-sidecar — опциональный набор сайдкар-контейнеров, задаваемых пользователем в параметре
.spec.controller.sidecarContainersкастомного ресурса ArgoCD, которые позволяют расширить стандартные возможности контроллера.
- application-controller-init — опциональный набор init-контейнеров, настраиваемых через параметр
-
<ArgoCD name>-applicationset-controller (Deployment) — argocd-applicationset-controller, опциональный компонент, состоящий из одного контейнера applicationset-controller и отвечающий за управление кастомным ресурсом ApplicationSet в Argo CD. Он позволяет автоматически создавать, обновлять или удалять ресурсы Application на основе заданных шаблонов и генераторов (например, генераторов Git, List, Matrix и Cluster). Это облегчает массовое управление похожими приложениями, которые должны быть развёрнуты в различных окружениях или кластерах.
Оператор создаёт компонент, если в параметре
.spec.applicationSet.enabledкастомного ресурса ArgoCD задано значениеtrue(значение по умолчанию —true).Более подробную информацию о компоненте можно найти в документации applicationset-controller.
-
<ArgoCD name>-argocd-image-updater-controller (Deployment) — argocd-image-updater-controller, опциональный компонент, состоящий из одного контейнера argocd-image-updater и предназначенный для автоматического обновления образов контейнеров в приложениях Argo CD при появлении новых версий в хранилищах образов. Компонент отслеживает изменения тегов образов и при обнаружении новой версии обновляет соответствующие ресурсы Application в Argo CD (например, значения тегов образов в манифестах или Helm values) через запрос на слияние (pull request) в Git-репозиторий либо напрямую, в зависимости от выбранного способа работы.
Argocd-image-updater-controller выполняет следующие функции:
- управляет кастомным ресурсом ImageUpdater, описывающим параметры для автоматического обновления образов контейнеров приложений;
- периодически проверяет указанные в приложениях образы контейнеров в поддерживаемых реестрах (Docker Hub, Quay.io, Harbor и др.);
- поддерживает фильтрацию тегов образов по шаблонам и стратегиям обновления (
semver,latestи др.); - при обнаружении новой версии образа автоматически выполняет write-back (то есть записывает новое значение тега образа) в Argo CD Application или в Git-репозиторий в зависимости от настроенного метода.
Для корректной работы компоненту требуются права доступа к Git-репозиториям и, при необходимости, к приватным хранилищам образов. Учётные данные для доступа к хранилищам образов можно хранить в секретах Kubernetes.
Для включения компонента необходимо задать в параметре
.spec.imageUpdater.enabledкастомного ресурса ArgoCD значениеtrue.Более подробную информацию о компоненте можно найти в документации argocd-image-updater.
-
<ArgoCD name>-notifications-controller (Deployment) — опциональный контроллер, состоящий из одного контейнера argocd-notifications-controller и реализующий отправку уведомлений о событиях в Argo CD (например, об успешной синхронизации приложения, ошибках развёртывания, изменениях статуса и др.) во внешние системы уведомлений, включая электронную почту, Slack, Microsoft Teams, Telegram, OpsGenie, вебхуки и другие.
Основной оператор argocd-operator-controller-manager модуля формирует настройки для уведомлений на основе кастомных ресурсов NotificationsConfiguration и сохраняет их в ресурсах ConfigMap
argocd-notifications-cmи Secretargocd-notifications-secret, которые используются контроллером для формирования и отправки уведомлений.Для включения компонента необходимо задать в параметре
.spec.notifications.enabledкастомного ресурса ArgoCD значениеtrue.Более подробную информацию о механизмах работы можно найти в документации по Argo CD Notifications.
-
<ArgoCD name>-dex-server (Deployment) — argocd-dex-server, опциональный компонент для аутентификации пользователей в Argo CD, выступающий в роли OIDC-провайдера (OpenID Connect) на базе Dex. Компонент реализует возможность входа пользователей через различные внешние провайдеры аутентификации (LDAP, GitHub, GitLab, SAML, Azure AD и др.), а также поддерживает работу со статическими пользователями, определёнными в конфигурации Dex.
Состоит из следующих контейнеров:
- copyutil — init-контейнер, копирующий исполняемые файлы для использования из основного контейнера;
- dex — основной контейнер.
Для включения компонента необходимо задать параметры в разделе
.spec.sso.dexкастомного ресурса ArgoCD.Для аутентификации пользователей Argo CD в DKP модуль
operator-argoподдерживает интеграцию с модулемuser-authn(встроенная аутентификация DKP). Другие внешние провайдеры через Dex в данной конфигурации не используются.Подробнее с примерами использования модуля
operator-argoможно ознакомиться в разделе документации модуля. -
<ArgoCD name>-redis (Deployment) — argocd-redis, обязательный компонент, состоящий из одного контейнера redis и отвечающий за хранение данных об очередях задач и состоянии сессий в Argo CD. Argocd-redis реализует отдельный экземпляр базы данных Redis.
Argocd-operator-controller-manager разворачивает этот компонент, если параметр
.spec.ha.enabledкастомного ресурса ArgoCD принимает значениеfalse. -
<ArgoCD name>-redis-ha-server (StatefulSet) — argocd-redis-ha-server, обязательный компонент для развёртывания Redis в режиме высокой доступности (HA) в составе Argo CD. Реализует отказоустойчивый кластер Redis с репликацией и автоматическим переключением (failover) с помощью механизма Redis Sentinel.
Состоит из следующих контейнеров:
- config-init — init-контейнер, подготавливающий конфигурацию для Redis и Sentinel перед запуском основных контейнеров;
- redis — основной контейнер, реализующий экземпляр Redis-сервера;
- sentinel — вспомогательный контейнер, запускающий Redis Sentinel для мониторинга состояния экземпляров Redis и автоматического переключения на реплику при отказе основного экземпляра.
Argocd-operator-controller-manager разворачивает этот компонент, если параметр
.spec.ha.enabledкастомного ресурса ArgoCD принимает значениеtrue. -
<ArgoCD name>-redis-ha-haproxy (Deployment) — argocd-redis-ha-haproxy, дополнительный компонент для балансировки нагрузки и распределения трафика к экземплярам кластера Redis (redis-ha-server) на основе балансировщика нагрузки/обратного прокси-сервера HAProxy.
Состоит из следующих контейнеров:
- config-init — init-контейнер, подготавливающий конфигурацию для HAProxy перед запуском основного контейнера;
- haproxy — контейнер, работающий в роли прокси-сервера и обеспечивающий прозрачную маршрутизацию запросов клиентов к доступным master/replica-экземплярам Redis, а также автоматизацию переключения между ними при failover.
Argocd-operator-controller-manager разворачивает этот компонент, если параметр
.spec.ha.enabledкастомного ресурса ArgoCD принимает значениеtrue.Для реализации безопасного и масштабируемого мультикластера в Argo CD используются следующие компоненты:
- Principal — это центральная точка управления: хранит состояние и раздает задания;
- Agent — это исполнитель в каждом целевом кластере: применяет манифесты и возвращает результат обработки в Principal.
Такой подход позволяет управлять множеством кластеров без прямого доступа с центрального Argo CD в Kubernetes API каждого кластера, что уменьшает требования к количеству открытых входящих доступов, обеспечивает изоляцию и отказоустойчивость.
-
<ArgoCD name>-agent-agent (Deployment) — argocd-agent-agent, опциональный компонент, состоящий из одного контейнера <ArgoCD name>-agent-agent и отвечающий за выполнение операций над управляемыми ресурсами Kubernetes-кластера по заданию из Argo CD. Компонент устанавливает подключение к Argo CD Principal, синхронизирует приложения и управляет их состоянием на основе команд, поступающих от Argo CD Principal.
Подробнее с архитектурой мультикластерной конфигурации Argo CD можно ознакомиться в документации Argo CD.
Argocd-operator-controller-manager разворачивает этот компонент, если параметр
.spec.argoCDAgent.agent.enabledкастомного ресурса ArgoCD принимает значениеtrue. В одном ресурсе ArgoCD не допускается одновременное использование Argo CD Agent и Argo CD Principal. -
<ArgoCD name>-agent-principal (Deployment) — argocd-agent-principal, опциональный компонент, состоящий из одного контейнера <ArgoCD name>-agent-principal и обеспечивающий работу Argo CD в мультикластерной конфигурации.
При включении этого компонента argocd-operator-controller-manager перенастраивает все компоненты, использующие подключение к базе Redis, на использование Redis-прокси. Компонент argocd-agent-principal реализует Redis-прокси и маршрутизирует запросы к базе данных на основе анализа ключей Redis: в зависимости от значения ключей запрос направляется или в локальный экземпляр Redis, или в один из удалённых Argo CD Agent.
Argocd-operator-controller-manager разворачивает этот компонент, если параметр
.spec.argoCDAgent.principal.enabledкастомного ресурса ArgoCD принимает значениеtrue. В одном ресурсе ArgoCD не допускается одновременное использование Argo CD Agent и Argo CD Principal. - <Export name> (Job/CronJob) — argocd-export, опциональный компонент, реализованный в виде Job или CronJob и создающий под из одного контейнера argocd-export. Компонент создаёт резервную копию настроек и состояния экземпляра Argo CD.
Взаимодействия модуля
Модуль взаимодействует со следующими компонентами:
- Внешние хранилища образов — получение списка образов.
- Внешние репозитории кода:
- получение манифестов развёртывания приложения из репозиториев;
- обновление параметров образа контейнера (поле
image) в Helm-чарте.
- Внешний Argo CD Principal:
- подключение к управляющему кластеру Argo CD;
- получение запросов на обработку;
- передача результатов выполнения запросов.
- Kube-apiserver:
- управление кастомными ресурсами Application, ApplicationSet, AppProject, ArgoCD, ArgoCDExport, ImageUpdater, NamespaceManagement, NotificationsConfiguration, а также Secret, ConfigMap;
- управление ресурсами, которые создаются при развёртывании пользовательского приложения, описанного в кастомном ресурсе Application;
- авторизация запросов на получение метрик.
- Модуль
user-authn— перенаправление пользователя для аутентификации.
С модулем взаимодействуют следующие внешние компоненты:
- Prometheus-main — сбор метрик, предоставляемых оператором и экземплярами Argo CD.
- Внешний Argo CD Agent:
- подключение к управляющему кластеру Argo CD;
- получение запросов на обработку;
- передача результатов выполнения запросов.