Управління деплоєм у декількох 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.







