| apps | ||
| argocd | ||
| clusters | ||
| infrastructure | ||
| .gitignore | ||
| README.md | ||
FluxCD v2 Monorepo
Репозиторий Infrastructure as Code, управляемый FluxCD v2 с использованием Kustomize-оверлеев и Helm-релизов.
Структура репозитория
├── clusters/ # Точка входа для каждого кластера (Flux читает отсюда)
│ └── contour/ # Кластер contour
│ ├── flux-system/ # Автогенерируется через `flux bootstrap` (не редактировать)
│ ├── helm-repositories.yaml # Определения HelmRepository
│ ├── infrastructure.yaml # Flux Kustomization → ./infrastructure
│ └── apps.yaml # Flux Kustomization → ./apps
│
├── infrastructure/ # Инфраструктурные компоненты
│ ├── kustomization.yaml # Список всех инфра-сервисов
│ └── example-infra/ # Пример инфра-компонента
│ ├── kustomization.yaml # Собирает base + patches
│ ├── base/ # Базовые манифесты (namespace, HelmRelease)
│ └── patches/ # Патчи поверх base
│
├── apps/ # Прикладные сервисы
│ ├── kustomization.yaml # Список всех приложений
│ └── example-app/ # Пример приложения
│ ├── kustomization.yaml # Собирает base + patches
│ ├── base/ # Базовые манифесты (Deployment, Service, ConfigMap)
│ └── patches/ # Патчи поверх base
Как это работает
Flux отслеживает директорию clusters/<имя-кластера>/. Каждый кластер содержит два Flux Kustomization CRD верхнего уровня:
- infrastructure.yaml — реконсилирует
./infrastructure. Содержит HelmReleases и вспомогательные ресурсы. - apps.yaml — реконсилирует
./apps. Содержит Deployments, Services и другие ресурсы приложений.
apps зависит от infrastructure, что гарантирует готовность инфраструктуры до деплоя приложений.
Каждый сервис (в infrastructure/ или apps/) имеет собственную структуру:
- base/ — базовые манифесты, общие для всех окружений
- patches/ — патчи, применяемые поверх base
- kustomization.yaml — на уровне сервиса, собирает base + patches через Kustomize
Начало работы
Бутстрап Flux
flux bootstrap git \
--url=<URL_ВАШЕГО_РЕПОЗИТОРИЯ> \
--branch=master \
--path=clusters/contour
Проверка реконсиляции
flux get kustomizations
flux get helmreleases -A
flux events --watch
Добавление нового инфраструктурного компонента
-
Создайте директорию с base и patches:
infrastructure/my-component/ ├── kustomization.yaml # resources: [./base], patches: [patches/...] ├── base/ │ ├── kustomization.yaml │ ├── namespace.yaml │ └── helmrelease.yaml └── patches/ └── values.yaml -
Зарегистрируйте в
infrastructure/kustomization.yaml:resources: - example-infra - my-component # Добавьте эту строку -
Если нужен новый HelmRepository, добавьте его в
clusters/<кластер>/helm-repositories.yaml.
Добавление нового приложения
-
Создайте директорию с base и patches:
apps/my-app/ ├── kustomization.yaml # resources: [./base], patches: [patches/...] ├── base/ │ ├── kustomization.yaml │ ├── namespace.yaml │ ├── deployment.yaml │ └── service.yaml └── patches/ └── replicas.yaml -
Зарегистрируйте в
apps/kustomization.yaml:resources: - example-app - my-app # Добавьте эту строку
Добавление нового кластера
- Создайте точку входа
clusters/<имя>/сinfrastructure.yaml,apps.yamlиhelm-repositories.yaml - Выполните бутстрап Flux с
--path=clusters/<имя>
Справочник API-версий
| Ресурс | apiVersion |
|---|---|
| Kustomization | kustomize.toolkit.fluxcd.io/v1 |
| GitRepository | source.toolkit.fluxcd.io/v1 |
| HelmRepository | source.toolkit.fluxcd.io/v1 |
| HelmRelease | helm.toolkit.fluxcd.io/v2 |