Настройка ArgoCD ApplicationSet для мультикластерного деплоя

Управление деплоем в нескольких Kubernetes-кластерах вручную — это сотни копий манифестов, где одна ошибка приводит к рассинхрону во всех окружениях. Мы настраиваем ArgoCD ApplicationSet, который автоматически генерирует Application по шаблону, избавляя от дублирования и ручных правок. Наша команда реализует проект под ключ — от аудита до внедрения и последующей поддержки, обеспечивая надёжное и масштабируемое решение.
Часто задаваемые вопросы

Управление деплоем в нескольких 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 дней. В состав работ входит:

    1. Аудит инфраструктуры — оценка текущих кластеров, репозиториев, CI/CD.
    2. Проектирование шаблонов — выбор генераторов, написание шаблонов для приложений.
    3. Реализация — создание ApplicationSet-манифестов, настройка RBAC, создание документации.
    4. Тестирование — деплой на dev/staging, проверка корректности, автоматическое тестирование.
    5. Документирование и обучение — передача знаний команде, ответы на вопросы.

    После завершения вы получаете единый шаблон для всех окружений, автоматическое создание Application при добавлении кластера или приложения, а также гарантию стабильной работы — мы поддерживаем решение в течение месяца после сдачи. Сертифицированные Kubernetes-инженеры (ArgoCD Certified) гарантируют надёжность.

    Как начать?

    Свяжитесь с нами для оценки вашего проекта. За 1–2 дня подготовим план миграции на ApplicationSet с учётом ваших кластеров и репозиториев. Цена рассчитывается индивидуально, исходя из сложности и числа кластеров. Мы уже автоматизировали деплой для 20+ проектов — поможем и вам. Закажите консультацию, чтобы обсудить детали. Получите индивидуальное предложение под вашу инфраструктуру.

    Подробнее о возможностях ApplicationSet читайте в документации ApplicationSet.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139