Налаштування 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