121 lines
5.3 KiB
Markdown
121 lines
5.3 KiB
Markdown
# FluxCD v2 Monorepo
|
||
|
||
Репозиторий Infrastructure as Code, управляемый [FluxCD v2](https://fluxcd.io/) с использованием 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 верхнего уровня:
|
||
|
||
1. **infrastructure.yaml** — реконсилирует `./infrastructure`. Содержит HelmReleases и вспомогательные ресурсы.
|
||
2. **apps.yaml** — реконсилирует `./apps`. Содержит Deployments, Services и другие ресурсы приложений.
|
||
|
||
`apps` зависит от `infrastructure`, что гарантирует готовность инфраструктуры до деплоя приложений.
|
||
|
||
Каждый сервис (в `infrastructure/` или `apps/`) имеет собственную структуру:
|
||
- **base/** — базовые манифесты, общие для всех окружений
|
||
- **patches/** — патчи, применяемые поверх base
|
||
- **kustomization.yaml** — на уровне сервиса, собирает base + patches через Kustomize
|
||
|
||
## Начало работы
|
||
|
||
### Бутстрап Flux
|
||
|
||
```bash
|
||
flux bootstrap git \
|
||
--url=<URL_ВАШЕГО_РЕПОЗИТОРИЯ> \
|
||
--branch=master \
|
||
--path=clusters/contour
|
||
```
|
||
|
||
### Проверка реконсиляции
|
||
|
||
```bash
|
||
flux get kustomizations
|
||
flux get helmreleases -A
|
||
flux events --watch
|
||
```
|
||
|
||
## Добавление нового инфраструктурного компонента
|
||
|
||
1. Создайте директорию с base и patches:
|
||
```
|
||
infrastructure/my-component/
|
||
├── kustomization.yaml # resources: [./base], patches: [patches/...]
|
||
├── base/
|
||
│ ├── kustomization.yaml
|
||
│ ├── namespace.yaml
|
||
│ └── helmrelease.yaml
|
||
└── patches/
|
||
└── values.yaml
|
||
```
|
||
|
||
2. Зарегистрируйте в `infrastructure/kustomization.yaml`:
|
||
```yaml
|
||
resources:
|
||
- example-infra
|
||
- my-component # Добавьте эту строку
|
||
```
|
||
|
||
3. Если нужен новый HelmRepository, добавьте его в `clusters/<кластер>/helm-repositories.yaml`.
|
||
|
||
## Добавление нового приложения
|
||
|
||
1. Создайте директорию с base и patches:
|
||
```
|
||
apps/my-app/
|
||
├── kustomization.yaml # resources: [./base], patches: [patches/...]
|
||
├── base/
|
||
│ ├── kustomization.yaml
|
||
│ ├── namespace.yaml
|
||
│ ├── deployment.yaml
|
||
│ └── service.yaml
|
||
└── patches/
|
||
└── replicas.yaml
|
||
```
|
||
|
||
2. Зарегистрируйте в `apps/kustomization.yaml`:
|
||
```yaml
|
||
resources:
|
||
- example-app
|
||
- my-app # Добавьте эту строку
|
||
```
|
||
|
||
## Добавление нового кластера
|
||
|
||
1. Создайте точку входа `clusters/<имя>/` с `infrastructure.yaml`, `apps.yaml` и `helm-repositories.yaml`
|
||
2. Выполните бутстрап 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` |
|