iac/clusters/aero/infrastructure.yaml
emelinda 8e14cd1e0b feat(aero): PostgreSQL с четырьмя базами и ускоренный цикл реконсиляции
PostgreSQL разворачивается пустым инстансом, состав баз повторяет то, что
сейчас провижинит postgres-init в compose:
  sarex_db     -> django       (ltree)
  workflow_db  -> processing   (uuid-ossp, ltree, hstore)
  bim_db       -> bim
  workspace_db -> workspace
Пароли администратора и владельцев берутся из Vault через
vault-agent-injector, в репозитории их нет. Расширения создаёт бутстрап
заранее: роли не суперпользователи и CREATE EXTENSION в миграциях им
недоступен. timescaledb включён в shared_preload_libraries сразу, хотя этим
базам не нужен, — параметр читается только при старте, и добавить его позже
означает перезапуск СУБД.

nodeSelector снимается postRenderers'ом. Чарт по умолчанию ставит
dedicated: sts в расчёте на выделенный пул нод; в контуре таких нет, и под
навсегда повисал в Pending, а следом застревал PVC, потому что у local-path
режим WaitForFirstConsumer. Через values это недостижимо: Helm сливает карты
по ключам, поэтому ни {}, ни другая метка dedicated: sts не убирают.

Цикл реконсиляции сокращён с 10 до 2 минут у всех Kustomization и
HelmRelease контура. Корневая Kustomization патчится из clusters/aero:
её файл генерирует flux bootstrap с пометкой DO NOT EDIT, а флаг --interval
задаёт периодичность только GitRepository. Таймаут установки postgresql
снижен с 20 до 10 минут — он определяет цену одной неудачной итерации.

Отключение собственных Gateway/VirtualService/Certificate чарта rabbitmq
переведено с JSON6902 на postRenderers: kustomize нормализует null в {}, а
пустую карту Helm сливает с дефолтами, поэтому настоящий null до Helm не
доходит ни одним путём.
2026-08-08 11:33:43 +03:00

68 lines
3.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Инфраструктура разделена на два слоя, и это не косметика.
#
# Flux делает dry-run всей Kustomization целиком перед применением. Если
# положить cert-manager (который СТАВИТ CRD) и ClusterIssuer/Certificate
# (которые ЭТИ CRD используют) в один слой, dry-run падает с
# no matches for kind "Certificate" in version "cert-manager.io/v1"
# и не применяется НИЧЕГО — включая сам cert-manager. Дедлок: CRD никогда не
# появятся, потому что слой не может пройти проверку.
#
# Поэтому: controllers ставят чарты (и CRD), configs содержат только
# пользовательские ресурсы.
#
# ПОЧЕМУ У infra-configs НЕТ dependsOn (было — и создавало дедлок).
#
# В configs лежат ClusterIssuer'ы. Чарты из слоя controllers создают
# Certificate, а Flux после установки релиза ждёт готовности его ресурсов.
# С dependsOn получался круг:
# чарт с Certificate ждёт выпуска
# → выпуск ждёт ClusterIssuer
# → ClusterIssuer в configs
# → configs ждёт готовности controllers
# → а там висит тот самый чарт
# Наступали на это дважды: сначала istio-config, следом rabbitmq (тот провисел
# в "Running 'install' action" полчаса).
#
# Жёсткий порядок заменён сходимостью через повторы: пока cert-manager не
# поставил CRD, configs будет падать на dry-run и переприменяться каждые
# 10 минут, а как только CRD появятся — применится сам. Издатели при этом
# больше не зависят от здоровья чартов, которые в них нуждаются.
#
# apps по-прежнему ждёт controllers, и это правильно: без istiod и
# vault-agent-injector его поды физически не поднимутся.
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: infra-controllers
namespace: flux-system
spec:
# 2 минуты, а не дефолтные 10: интервал определяет, как быстро слой заметит
# новую ревизию и как быстро повторит попытку после неудачи. С 10 минутами
# цикл «правка → проверка» растягивался до получаса, а сломанный релиз
# держал слой всё это время.
interval: 2m0s
path: ./clusters/aero/controllers
prune: true
wait: true
timeout: 10m0s
sourceRef:
kind: GitRepository
name: flux-system
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: infra-configs
namespace: flux-system
spec:
interval: 2m0s
path: ./clusters/aero/configs
prune: true
# dependsOn намеренно отсутствует — см. комментарий в начале файла.
# Повторные попытки до появления CRD дешевле, чем дедлок.
retryInterval: 1m0s
sourceRef:
kind: GitRepository
name: flux-system