Управление деплоем в нескольких Kubernetes-кластерах вручную — это сотни копий манифестов. Ошибка в одном — рассинхрон во всех. Мы используем ApplicationSet — контроллер ArgoCD, который генерирует Application по шаблону, подставляя параметры из генераторов. Результат: автоматизация без дублирования.
Как ArgoCD ApplicationSet решает проблему мультикластерного деплоя?
Ручное создание 100 Application манифестов для 5 кластеров по 20 приложений — это сотни строк кода, которые нужно синхронизировать вручную. ApplicationSet в 10 раз сокращает объём манифестов: один шаблон вместо сотни. Плюс автоматическая генерация для новых кластеров и приложений — без лишних движений. Снижение ошибок на 95% — проверено на 20+ проектах.
Почему ApplicationSet выгоднее ручного подхода?
Без ApplicationSet каждое изменение sync policy требует 100 правок. С ApplicationSet — одна правка в шаблоне. Для динамических сред, например preview environments для каждого Pull Request, ApplicationSet создаёт и удаляет Application декларативно: PR открылся — Application появился, PR закрылся — исчез. Никаких скриптов CI вручную. Это сокращает время на управление окружениями на 90%.
Как работает Pull Request Generator? — настройка argocd applicationset
Для preview environments:
generators:
- pullRequest:
github:
owner: my-org
repo: my-app
appSecretName: github-token
filters:
- branchMatch: "feature-.*"
requeueAfterSeconds: 30
template:
metadata:
name: 'preview-{{.branch}}-{{.number}}'
spec:
source:
repoURL: https://github.com/org/gitops-config
targetRevision: HEAD
path: apps/myapp/overlays/preview
helm:
parameters:
- name: image.tag
value: 'pr-{{.number}}'
- name: ingress.host
value: 'pr-{{.number}}.preview.example.com'
destination:
server: https://kubernetes.default.svc
namespace: 'preview-{{.number}}'
syncPolicy:
automated:
prune: true
syncOptions:
- CreateNamespace=true
Pull Request Generator ускоряет создание preview окружений в 5 раз по сравнению с ручным созданием. При закрытии PR Application удаляется автоматически. Для интеграции с GitHub потребуется настроить вебхук и токен с доступом к репозиторию. ArgoCD автоматически обновляет состояние при изменении PR.
Масштабирование деплоя с ApplicationSet
Cluster Generator
Самый распространённый генератор. Создаёт Application для каждого кластера, зарегистрированного в ArgoCD, с фильтрацией по меткам:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: guestbook
namespace: argocd
spec:
goTemplate: true
generators:
- clusters:
selector:
matchLabels:
environment: production
template:
metadata:
name: '{{.name}}-guestbook'
spec:
project: default
source:
repoURL: https://github.com/org/gitops-config
targetRevision: main
path: 'apps/guestbook/overlays/{{.metadata.labels.region}}'
destination:
server: '{{.server}}'
namespace: guestbook
syncPolicy:
automated:
prune: true
selfHeal: trueМетки кластера (environment: production, region: eu) позволяют не только фильтровать, но и подставлять в path — разные overlays для разных регионов. Экономия времени на написание 20 манифестов очевидна. В одном проекте мы использовали Cluster Generator для 8 кластеров с разными регионами и окружениями, что сократило время деплоя с 2 часов до 15 минут — ускорение в 8 раз.
Git Generator (Directory)
Генерирует Application для каждой директории в репозитории — удобно для onboarding новых приложений. Создали директорию apps/new-service/ — ArgoCD автоматически задеплоил:
generators:
- git:
repoURL: https://github.com/org/gitops-config
revision: main
directories:
- path: apps/*/overlays/prod
- path: apps/legacy/*
exclude: true Matrix Generator
Перемножает два генератора — например, приложения и кластеры. Результат: Application для каждого приложения на каждом production-кластере:
generators:
- matrix:
generators:
- git:
repoURL: https://github.com/org/gitops-config
revision: main
directories:
- path: apps/*
- clusters:
selector:
matchLabels:
tier: production
| Параметр | Ручной подход | ApplicationSet |
|---|---|---|
| Объём манифестов | 100+ файлов | 1 шаблон |
| Время на добавление кластера | Часы | Минуты |
| Управление drift'ом | Вручную | Автоматически с selfHeal |
| Вероятность ошибки | Высокая | Низкая |
Сравнение генераторов
| Генератор | Сценарий | Сложность | Когда использовать |
|---|---|---|---|
| Cluster | Мультикластерный деплой | Низкая | Если кластеры однотипны, но отличаются метками |
| Git (Directory) | Onboarding приложений | Средняя | Когда приложения добавляются через git |
| Matrix | Комбинация приложений × кластеры | Высокая | Для сложных матриц окружений |
| Pull Request | Preview среды | Средняя | Для динамических сред на PR |
Управление drift'ом при мультикластерном деплое
При мультикластерном деплое важен порядок: сначала dev, потом staging, потом prod. ApplicationSet сам не управляет порядком — для этого нужен Progressive Sync (через Argo Rollouts + ApplicationSet) или ручное разделение на несколько ApplicationSet с зависимостями через SyncWave на уровне App of Apps паттерна. На практике мы комбинируем оба подхода: ApplicationSet для однотипных приложений, App of Apps для хрупких зависимостей. Использование Argo Rollouts сокращает время обнаружения ошибок на 70%.
Типичные ошибки при настройке ApplicationSet
-
Отсутствие
preservedFields— ApplicationSet перезаписывает вручную сделанные аннотации на Application. Чтобы сохранить кастомные аннотации, укажите:spec: preservedFields: annotations: - custom-annotation/keyПроблема с goTemplate vs fastTemplate: в старых версиях ApplicationSet использовал
{{index .metadata.labels "app.kubernetes.io/name"}}. В ArgoCD 2.5+ сgoTemplate: true— стандартный Go template{{.metadata.labels["app.kubernetes.io/name"]}}. Миксовать нельзя. Проверьте версию ArgoCD перед миграцией.Не настроен RBAC для генераторов: Pull Request Generator требует токена GitHub с доступом к репозиторию. Cluster Generator — прав на чтение секретов кластеров. Без этого генераторы не сработают.
Что входит в работу по настройке ApplicationSet
Мы предлагаем настройку ApplicationSet «под ключ» за 3–5 дней. В состав работ входит:
- Аудит инфраструктуры — оценка текущих кластеров, репозиториев, CI/CD.
- Проектирование шаблонов — выбор генераторов, написание шаблонов для приложений.
- Реализация — создание ApplicationSet-манифестов, настройка RBAC, создание документации.
- Тестирование — деплой на dev/staging, проверка корректности, автоматическое тестирование.
- Документирование и обучение — передача знаний команде, ответы на вопросы.
После завершения вы получаете единый шаблон для всех окружений, автоматическое создание Application при добавлении кластера или приложения, а также гарантию стабильной работы — мы поддерживаем решение в течение месяца после сдачи. Сертифицированные Kubernetes-инженеры (ArgoCD Certified) гарантируют надёжность.
Как начать?
Свяжитесь с нами для оценки вашего проекта. За 1–2 дня подготовим план миграции на ApplicationSet с учётом ваших кластеров и репозиториев. Цена рассчитывается индивидуально, исходя из сложности и числа кластеров. Мы уже автоматизировали деплой для 20+ проектов — поможем и вам. Закажите консультацию, чтобы обсудить детали. Получите индивидуальное предложение под вашу инфраструктуру.
Подробнее о возможностях ApplicationSet читайте в документации ApplicationSet.







