14 KiB
Карта репозитория
Навигационный индекс infra/iac: где что лежит, какие здесь конвенции путей и на чём легко ошибиться. Для быстрого входа новым людям и для агентов (файл автоматически подхватывается Claude Code).
Не дублирует README.md (как пользоваться Flux, как добавить компонент) и IAC-CATALOG.md (подробный каталог всего estate infra/*) — отсылает к ним.
Что это за репозиторий
Только FluxCD v2 (GitOps) + Kustomize-оверлеи + HelmRelease.
Здесь принципиально нет и искать бесполезно:
| Что | Где искать |
|---|---|
| Terraform / Terragrunt | infra/terraform, infra/terraform-contour, infra/terraform-contour-mirror |
| Ansible | infra/ansible-playbooks, ansible-patroni-cluster, ansible-minio-cluster |
| Провижининг кластеров | infra/kubespray, infra/k8s-provision |
| ArgoCD (контур ГПН) | infra/iac-gpn |
| CI сборки образов | generic/common-ci, generic/base-image |
Push-деплой через .helm/ (ветка = контур) |
~60 компонентных репозиториев, см. IAC-CATALOG.md §4 |
Чарты тянутся из oci://cr.yandex/crp3ccidau046kdj8g9q/charts, образы — cr.yandex/crp3ccidau046kdj8g9q/<name>:<tag>. Все приложения ставятся на общий чарт universal-chart; значения обёрнуты в ключ _default и выбираются по global.env.
Дерево
| Путь | Что |
|---|---|
clusters/ |
17 точек входа Flux + шаблон contour — источник истины «что где раскатано» |
infrastructure/ |
44 платформенных компонента |
apps/ |
39 прикладных сервисов |
docs/apps/ |
34 mermaid-диаграммы по сервисам + README.md с доменной группировкой |
docs/architecture/ |
модель контура в ArchiMate + скрипты-сканеры (scan_calls.py, scan_contour.py) и сборка (build_archimate.py); реальные значения инсталляций сюда не кладутся, только *.example.json |
docs/closed-contour-deployment.md |
ранбук поднятия закрытого контура |
ci/, .gitlab-ci.yml, Dockerfile |
на тег vX.Y.Z: образ офлайн-зеркала iac-offline и публикация «слайсов» контуров (см. ниже) |
README.md |
mermaid-мегакарта платформы, структура репозитория, инструкции по добавлению app / infra / кластера |
IAC-CATALOG.md |
каталог всего infra/*; §5 — про этот репозиторий |
inventory.yaml |
сгенерированный снимок прода: 59 namespace → kind → имена |
Конвенции путей
Кластер. clusters/<cluster>/kustomization.yaml — плоский список ../../apps/<app>/<cluster>. Инфраструктура подключается двумя разными способами:
d8-ugmk-prod,sarex-contour,ugok,uralkal,vad— прямо в корневом kustomization как../../infrastructure/<comp>/<c>;brusnika-prod,brusnika-stage,vk-infra,vk-prod— черезclusters/<c>/infrastructure/kustomization.yaml, который ссылается на оверлеи../../../infrastructure/<comp>/<c>(base+ патч HelmRelease + сопутствующие манифесты компонента);wb,yc-cps-prod,yc-infra-prod,yc-k8s-test-02— черезclusters/<c>/infrastructure/kustomization.yaml, который ссылается на../../../infrastructure/<comp>(резолвится вbase), а различия лежат вclusters/<c>/infrastructure/patches/*.yaml;stand— послойно:layers.yamlобъявляет Flux-Kustomization00-vault → 10-mesh → 20-data → 30-platform → 40-routing(каталогиclusters/stand/<NN>-<layer>/). Слои ссылаются на оверлеиinfrastructure/<comp>/contour-template, а значения контура (${STORAGE_CLASS},${HOST_*},${GATEWAY_REPLICAS}) Flux подставляет черезpostBuild.substituteFromиз ConfigMapcontour-vars.
Кластеры с приложениями: asterus, brusnika-prod, brusnika-stage, d8-ugmk-prod, sarex-contour, ugok, uralkal, vad, wb, yc-ecp, yc-k8s-test. Только инфраструктура: stand, vk-infra, vk-prod, yc-cps-prod, yc-infra-prod, yc-k8s-test-02. Шаблон: contour.
Приложение. apps/<app>/base/ — по одному .yaml на процесс (backend.yaml, celery.yaml, frontend.yaml) плюс namespace.yaml; оверлеи в apps/<app>/<cluster>/. Namespace = имя приложения. Рядом с манифестами лежит документация: CONFIGURATION.md (все env-переменные и откуда берутся), ENDPOINTS.md (исходящие HTTP-вызовы), openapi.yaml (входящий контракт), .env.example. Если процессов несколько — файлы с префиксом процесса: api.ENDPOINTS.md, pdm.CONFIGURATION.md, frontend.CONFIGURATION.md.
Инфра-компонент. infrastructure/<comp>/base/ + оверлеи <comp>/<cluster>/. Корневой infrastructure/<comp>/kustomization.yaml всегда указывает просто на base. Оверлей contour-template (есть у vault, istio-*, cert-manager, postgresql, kafka, rabbitmq, zitadel, camunda, istio-config) — параметризованный ${VAR}, а не привязанный к конкретному кластеру. Чарты идут с суффиксом контура: vault-contour, keycloak-contour, postgresql-contour и — внимание — idp-contour это Zitadel.
Слайсы. На тег vX.Y.Z ci/publish-slice.py generate создаёт child-pipeline с отдельной джобой на каждый clusters/*/kustomization.yaml. Джоба вызывает ci/build-slice.py: тот обходит дерево Kustomize от clusters/<c> и упаковывает только нужные файлы в tar. Результат публикуется как OCI-артефакт cr.yandex/crpct2b2lsmao4nm0cjk/<c>-iac:<tag> (media type application/vnd.sarex.slice.config.v1+json). Так закрытый контур получает только свой срез. Тесты — ci/tests/test_build_slice.py.
Где искать конкретное
| Вопрос | Файл |
|---|---|
| Что развёрнуто в контуре X | clusters/X/kustomization.yaml (+ clusters/X/infrastructure/kustomization.yaml) |
| Откуда Flux тянет контур | clusters/X/flux-system/gotk-sync.yaml |
| Внешние хосты, TLS, path-роутинг | infrastructure/istio-config/<cluster>/istio-config.yaml либо clusters/<c>/infrastructure/patches/istio-config.yaml |
| Кто кого зовёт (граф сервисов) | apps/*/ENDPOINTS.md + env-переменные с *.svc.cluster.local в apps/**/*.yaml |
| Что делает сервис, его БД / брокер / S3 | docs/apps/<app>.md |
| Значение env-переменной | apps/<app>/CONFIGURATION.md |
| Секреты | Vault Agent Injector; путь secrets/data/apps/<app>/postgres, role = имя приложения, SA = <app>-vault |
| Тег образа в контуре | apps/<app>/<cluster>/*.yaml, поле image.tag |
| Что реально в проде по namespace | inventory.yaml |
| Где лежит исходный код приложения | IAC-CATALOG.md §5.3.8 |
| Что попадёт в слайс контура | python3 ci/build-slice.py по clusters/<c> (логика сбора — там же) |
| Переменные шаблонного контура | ${...} в infrastructure/*/contour-template; значения — ConfigMap contour-vars в кластере, не в репозитории |
Ловушки
dsinv/— оверлей есть у 25 приложений, ноclusters/dsinv/не существует. Это материализованный снимок живого контура WB, а не источник деплоя. Развёрнутым не считать.- Две несовместимые конвенции оверлеев (
IAC-CATALOG.md§5.3.4).d8-ugmk-prod,yc-k8s-test,vad,uralkal,sarex-contour,dsinvнаследуютbaseи патчат его.brusnika-prod,brusnika-stage,yc-ecp,asterus— полные копии HelmRelease, которые молча дрейфуют от base. Правкаbaseна них не влияет.wb(4 из 27) иugok(9 из 33) смешанные — проверяйтеresources:конкретного оверлея; вugokпричина обычно указана комментарием в егоkustomization.yaml. asterusподключён почти пустым: оверлеи есть у 26 приложений, но вclusters/asterus/kustomization.yamlактивен толькоauth-flow, остальные закомментированы. Инфраструктуры в кластере нет.- Слайс публикуется для каждого
clusters/*/kustomization.yaml— в том числе для тестовых и инфраструктурных кластеров. Новая папка вclusters/с этим файлом автоматически станет слайсом на следующем теге. Уcontourтакого файла нет, поэтому для него слайс не собирается. IAC-CATALOG.md— снимок на 05.08.2026 и по составу приложений на контур уже расходится с реальностью (там уwbноль приложений, фактически 26 оверлеев). Всегда сверяться сclusters/*/kustomization.yaml.- Мегадиаграмма в
README.mdидеализирована — рисована руками, показывает все приложения на одной Postgres и все фронтенды заcontrol-interface. Проверяемые источники — env-переменные и istio-config. clusters/contour/— не кластер, а шаблон: в нём нетflux-system, толькоapps.yaml,infrastructure.yaml,helm-repositories.yaml.- Path-роутинг лежит в
infrastructure/istio-config/<c>/у большинства контуров, но не у WB. Вclusters/wb/infrastructure/patches/istio-config.yamlчерез Istio публикуются только платформенные UI (Gitea, Grafana, OpenObserve, Superset, Vault, GoAlert), а прикладной трафик разводится вне репозитория. В Brusnika схема смешанная: часть путей идёт напрямую в сервисы, остальное — одним правилом вyet-another-nginx-service.global-ingress. vk-prodмаршрутизирует в namespace с суффиксом-prod(eav-prod,pm-prod,inspections-prod), а приложений изapps/в этом кластере нет: сервисы раскатываются не этим репозиторием.- Имена namespace расходятся между источниками:
inventory.yamlиvk-prodиспользуют суффикс (flows-prod),apps/— голое имя (flows). - 66 оверлеев приложений не подключены ни к одному кластеру: 25 —
dsinv, 25 — закомментированные вasterus, остальные 16 — мёртвый код (в основномbrusnika-prod, плюсbi/iamвwbиyc-k8s-test). - Нет диаграмм в
docs/apps/дляams-sync,auth-flow,bi,iam,premises. - Чистые фронтенды без бэкенда в этом репозитории:
auth-flow,control-interface,cross-section,document-link,prescriptions,projects,remarks,reviews,stamp-verification. Бэкендprojectsживёт вplanning/projects-backend. - Самые центральные сервисы по числу входящих ссылок:
documentations(~85),processing/workflow(~76),django(~53),eav(~47),resources(~44),bim(~39),flows(~38). Менять их конфигурацию — дороже всего.
Поддержка файла
Карта описывает структуру и конвенции, а не текущий состав. Обновлять при появлении нового кластера, смене конвенции оверлеев или когда очередная ловушка перестаёт быть правдой. Списки приложений и версии сюда не дублировать — для этого есть clusters/*/kustomization.yaml и IAC-CATALOG.md.