diff --git a/docs/60_strategy/dev_stand_service_dependencies.md b/docs/60_strategy/dev_stand_service_dependencies.md new file mode 100644 index 0000000..8096708 --- /dev/null +++ b/docs/60_strategy/dev_stand_service_dependencies.md @@ -0,0 +1,116 @@ +# Зависимости облачных сервисов каталога DEV + +Промежуточная инвентаризация для будущего общего графа. Источник — YAML-контракты +в `generated/dev/resources_yaml`. + +Вершина — сервис каталога. Направление будущей стрелки: `потребитель -> зависимость`. +В таблицу зависимостей включены только связи, явно подтверждённые полем +`ref_svc_id` или тем же контрактом сервиса. + +## Все сервисы каталога + +| ID | Сервис | YAML | +|---:|---|---| +| 1 | Болванка | `1_dummy.yaml` | +| 2 | Темплейт k8s | `2_template.yaml` | +| 12 | S3 Object Storage | `12_s3.yaml` | +| 13 | S3 бакет | `13_s3bucket.yaml` | +| 19 | Организация в Cloud Director | `19_vc_org.yaml` | +| 21 | Виртуальный датацентр (vDC) | `21_vc_vdc.yaml` | +| 22 | Сетевой шлюз периметра (Edge) | `22_vc_nsxt.yaml` | +| 25 | Публичные IP адреса | `25_vcexternalip.yaml` | +| 26 | Виртуальный каталог ВМ (vApp) | `26_vapp.yaml` | +| 28 | Виртуальная машина | `28_vc_vm_v3.yaml` | +| 29 | Группа датацентров | `29_vc_vdc_group.yaml` | +| 50 | Nextcloud | `50_nextcloud.yaml` | +| 81 | Apache Superset | `81_superset.yaml` | +| 82 | Container Registry | `82_harbor.yaml` | +| 86 | Velero | `86_k8s_velero.yaml` | +| 87 | Valkey | `87_k8svalkey.yaml` | +| 88 | k8sZitiController | `88_k8s_ziti_controller.yaml` | +| 89 | Web-сервер с фреймворком Flask | `89_flask.yaml` | +| 90 | PostgreSQL | `90_postgres.yaml` | +| 91 | Redis | `91_redis.yaml` | +| 92 | MongoDB | `92_mongodb.yaml` | +| 93 | RabbitMQ | `93_rabbitmq.yaml` | +| 94 | Lucee | `94_lucee.yaml` | +| 95 | NodeJS | `95_nodejs.yaml` | +| 96 | pgAdmin | `96_pgadmin.yaml` | +| 97 | NodeRed | `97_nodered.yaml` | +| 98 | Простой HTTP контейнер | `98_http.yaml` | +| 99 | Gitea | `99_gitea.yaml` | +| 109 | Управление DNS | `109_zones_v2.yaml` | +| 111 | DNS запись | `111_dnsrecord.yaml` | +| 115 | Mariadb | `115_mariadb.yaml` | +| 116 | ApacheKafka | `116_kafka.yaml` | +| 119 | Akhq | `119_akhq.yaml` | +| 120 | ClickHouse | `120_clickhouse.yaml` | +| 148 | Менеджмент Kubernetes кластер Штурвал | `148_vc_mgmt_sthutrval_cluster.yaml` | +| 149 | VALO Cloud | `149_valo_tenant.yaml` | +| 150 | Kubernetes кластер Штурвал | `150_k8s_sthutrval_cluster.yaml` | +| 151 | Vault | `151_k8s_openbao.yaml` | +| 153 | Nifi | `153_nifi.yaml` | +| 163 | ML Улей | `163_llm_ai.yaml` | + +## Подтверждённые зависимости + +| ID | Потребитель | Зависимость | Поле связи | Смысл связи | +|---|---|---|---|---| +| D-01 | DNS запись (111) | Управление DNS (109) | `zoneUid` | запись создаётся в DNS-зоне | +| D-02 | S3 бакет (13) | S3 Object Storage (12) | `s3UserUid` | бакет создаётся для корневой S3-услуги | +| D-03 | Виртуальный датацентр (21) | Организация в Cloud Director (19) | `organizationUid` | vDC принадлежит организации | +| D-04 | Сетевой шлюз периметра (22) | Виртуальный датацентр (21) | `vdcUid` | Edge привязывается к vDC | +| D-05 | Сетевой шлюз периметра (22) | Группа датацентров (29) | `vdcGroupUid` | альтернативная привязка Edge к группе vDC (vdcType=vdcGroup) | +| D-06 | Виртуальный каталог ВМ (26) | Сетевой шлюз периметра (22) | `nsxtUid` | vApp использует Edge для сети | +| D-07 | Виртуальный каталог ВМ (26) | Виртуальный датацентр (21) | `vdcUid` | vApp размещается в vDC | +| D-08 | Виртуальная машина (28) | Виртуальный каталог ВМ (26) | `vappUid` | VM размещается в vApp | +| D-09 | Группа датацентров (29) | Виртуальный датацентр (21) | `vdcUid` | группа объединяет vDC (create и add_vdc) | +| D-10 | Akhq (119) | ApacheKafka (116) | `kafkaUid` | UI подключается к Kafka-кластеру | +| D-11 | Container Registry (82) | S3 Object Storage (12) | `s3Uid` | registry использует S3 для хранения | +| D-12 | Gitea (99) | PostgreSQL (90) | `psqlUid` | Gitea использует PostgreSQL | + +## Переиспользование существующих инстансов + +Зависимости (кроме Организации) являются ссылками на **существующие инстансы** через UUID: + +- Новую ВМ (28) можно создать в уже существующем vApp, vDC, Edge — ссылкой `vappUid`/`vdcUid`/`nsxtUid`. +- Edge (22) можно переиспользовать, если он привязан к нужному vDC или groupvDC. +- Для Штурвала (150) переиспользуемый Edge должен иметь включённый ALB и `virtualServicesCount >= 3`. +- Внешние IP резервируются только после: Организация + vDC + Каталог (vApp) + Edge (по `25_vcexternalip.yaml`, `service_man`). + +## Где выделяются ресурсы (CPU / RAM / Storage / IP) + +| Элемент | Где задаётся | Параметр(ы) | +|---|---|---| +| Пул CPU/RAM/Storage организации | vDC (21) create/modify | `cpuAllocated`, `memAllocated`, `storageConfig` (+ разовый `cpuGuaranteed` 0/50/80) | +| Запрос ресурсов нод Штурвала | Кластер Штурвал (150) | `controlPlaneConfiguration.sizingPolicy/sizingDisk/count`, `workerConfiguration…` (политики из vDC) | +| Запрос ресурсов ВМ | Виртуальная машина (28) | `vmCpu`, `vmRam`, `vmDisk` (доп. диск) | +| Внешние IP | vcOrg (19) `modify` (`vIPConfigure`) или `vcexternalip` (25) | `ipSpaceName`, квота адресов | +| SNAT-правило | Edge (22) `modify` | `ipSpaceName` | +| DNAT/SNAT-правила адреса | Публичные IP (25) | `dnatCreate`/`snatCreate`, `internalAddrAccess`, `internalPortAccess` | + +## Чек-лист создания Штурвала (150) — по `service_man` + +1. Организация (19) — create. +2. vDC (21) — create, выделить ресурсы под все ноды. +3. Edge (22) — create, включить ALB и `virtualServicesCount >= 3`. +4. Внешние адреса в организации — vcOrg `modify`, суммарно 3 адреса. +5. SNAT — Edge `modify`, выбрать `ipSpaceName`. +6. Кластер Штурвал (150) — create (требует `vdcUid` и `nsxtUid`). + +## Чек-лист создания ВМ (28) — по create-параметрам + +1. vDC (21) — существующий (`vdcUid`). +2. Edge (22) — существующий (`nsxtUid`). +3. vApp (26) — существующий (`vappUid`), привязан к vDC и Edge. +4. ВМ (28) — create; обязательные: `vappUid`, `vmName`, `vmCpu`, `vmRam`, `accessPortList`, `imageVm`, `userLogin`, `userPublicKey`, `ipSpaceName`. + +## Правила для будущего графа + +1. Рисовать стрелку только по подтверждённой связи сервиса каталога. +2. `ref_svc_id` считать прямой зависимостью; `descr` использовать для подписи + стрелки и проверки смысла. +3. Не считать общей платформой, DNS-полем или внешним IP автоматическую связь + между сервисами без ссылки на конкретный сервисный ID. +4. Поля без `ref_svc_id` вынести в отдельный список кандидатов на проверку, но не + смешивать с подтверждёнными рёбрами. diff --git a/docs/infra_services_flow.mmd b/docs/infra_services_flow.mmd index 867db98..8db1404 100644 --- a/docs/infra_services_flow.mmd +++ b/docs/infra_services_flow.mmd @@ -1,49 +1,43 @@ flowchart LR - classDef step1 fill:#e1f5fe,stroke:#0288d1,stroke-width:2px; - classDef step2 fill:#fff3e0,stroke:#f57c00,stroke-width:2px; - classDef step3 fill:#ede7f6,stroke:#5e35b1,stroke-width:2px; - classDef step4 fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px; - classDef target fill:#fafafa,stroke:#424242,stroke-width:2px,stroke-dasharray: 5 5; + classDef base fill:#e1f5fe,stroke:#0288d1,stroke-width:2px; + classDef net fill:#ede7f6,stroke:#5e35b1,stroke-width:2px; + classDef compute fill:#fff3e0,stroke:#f57c00,stroke-width:2px; + classDef target fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px; + classDef note fill:#fafafa,stroke:#9e9e9e,stroke-width:1px,stroke-dasharray: 4 4; subgraph S1 ["Шаг 1. Тенант"] - ORG["Организация (vcOrg: 19)
• Тип: iaas / saas"]:::step1 - DNS_ZONE["DNS Зона (109)"]:::step1 + ORG["Организация (vcOrg: 19)
• Тип: iaas / saas"]:::base end - subgraph S2 ["Шаг 2. Пул ресурсов и адреса"] - VDC["Виртуальный ДЦ (vcVdc: 21)
• cpuGuaranteed: 0% / 50% / 80%
• Пул: CPU, RAM, Storage"]:::step2 - IPS["Внешние IP (25)
• Квота адресов (ipSpace)"]:::step2 + subgraph S2 ["Шаг 2. Пул ресурсов"] + VDC["Виртуальный ДЦ (vcVdc: 21)
• cpuGuaranteed: 0% / 50% / 80%
• Пул: cpuAllocated, memAllocated, storage"]:::compute end - subgraph S3 ["Шаг 3. Сеть и периметр"] - EDGE["Шлюз Edge (vcNsxt: 22)
• Маршрутизация, AVI Load Balancer"]:::step3 - SNAT["SNAT на Edge
• Привязка IP к шлюзу"]:::step3 + subgraph S3 ["Шаг 3. Сетевой периметр"] + EDGE["Шлюз Edge (vcNsxt: 22)
• AVI Load Balancer
• modify: SNAT (ipSpaceName)"]:::net end - subgraph S4 ["Шаг 4. Среда запуска"] - VAPP["Каталог vApp (26)
• Логический контейнер ВМ"]:::step4 - DNS_REC["DNS Запись (111)"]:::step4 + subgraph S4 ["Шаг 4. Среда запуска и адреса"] + VAPP["Каталог vApp (26)
(контейнер для ВМ)"]:::compute + IP["Внешние IP
• vcOrg modify / 25
• квота адресов (ipSpace)"]:::note end - subgraph S5 ["Потребители платформы"] - VM_TARGET["Виртуальные машины (28)"]:::target - K8S_TARGET["Штурвал / K8s (150)"]:::target + subgraph S5 ["Шаг 5. Потребители"] + VM["Виртуальная машина (28)
• vmCpu, vmRam, vmDisk"]:::target + SHTURVAL["Кластер Штурвал (150)
• sizingPolicy, sizingDisk, count"]:::target end - ORG -->|organizationUid| VDC - ORG -->|выделение пула| IPS + ORG -->|"organizationUid"| VDC + VDC -->|"vdcUid"| EDGE + ORG -.->|"modify: vIPConfigure"| IP + EDGE -.->|"modify: SNAT (ipSpaceName)"| IP - VDC -->|vdcUid| EDGE - EDGE -->|nsxtUid| SNAT - IPS -->|ipSpaceName| SNAT + VDC -->|"vdcUid"| VAPP + EDGE -->|"nsxtUid"| VAPP - VDC -->|vdcUid| VAPP - EDGE -->|nsxtUid| VAPP + VAPP -->|"vappUid"| VM + IP -.->|"внешний IP"| VM - DNS_ZONE -->|zoneUid| DNS_REC - IPS -.->|внешний IP| DNS_REC - - VAPP --> VM_TARGET - SNAT --> K8S_TARGET - VDC -->|вычислительный пул| K8S_TARGET - EDGE --> K8S_TARGET + VDC -->|"vdcUid"| SHTURVAL + EDGE -->|"nsxtUid"| SHTURVAL + IP -.->|"внешний IP (>= 3)"| SHTURVAL diff --git a/docs/infra_services_flow.png b/docs/infra_services_flow.png index b394949..ca02e29 100644 Binary files a/docs/infra_services_flow.png and b/docs/infra_services_flow.png differ diff --git a/docs/infra_services_flow.svg b/docs/infra_services_flow.svg index 3f722e1..7a4e168 100644 --- a/docs/infra_services_flow.svg +++ b/docs/infra_services_flow.svg @@ -1 +1 @@ -

Потребители платформы

Шаг 4. Среда запуска

Шаг 3. Сеть и периметр

Шаг 2. Пул ресурсов и адреса

Шаг 1. Тенант

organizationUid

выделение пула

vdcUid

nsxtUid

ipSpaceName

vdcUid

nsxtUid

zoneUid

внешний IP

вычислительный пул

Организация (vcOrg: 19)
• Тип: iaas / saas

DNS Зона (109)

Виртуальный ДЦ (vcVdc: 21)
• cpuGuaranteed: 0% / 50% / 80%
• Пул: CPU, RAM, Storage

Внешние IP (25)
• Квота адресов (ipSpace)

Шлюз Edge (vcNsxt: 22)
• Маршрутизация, AVI Load Balancer

SNAT на Edge
• Привязка IP к шлюзу

Каталог vApp (26)
• Логический контейнер ВМ

DNS Запись (111)

Виртуальные машины (28)

Штурвал / K8s (150)

\ No newline at end of file +

Шаг 5. Потребители

Шаг 4. Среда запуска и адреса

Шаг 3. Сетевой периметр

Шаг 2. Пул ресурсов

Шаг 1. Тенант

organizationUid

vdcUid

modify: vIPConfigure

modify: SNAT (ipSpaceName)

vdcUid

nsxtUid

vappUid

внешний IP

vdcUid

nsxtUid

внешний IP (>= 3)

Организация (vcOrg: 19)
• Тип: iaas / saas

Виртуальный ДЦ (vcVdc: 21)
• cpuGuaranteed: 0% / 50% / 80%
• Пул: cpuAllocated, memAllocated, storage

Шлюз Edge (vcNsxt: 22)
• AVI Load Balancer
• modify: SNAT (ipSpaceName)

Каталог vApp (26)
(контейнер для ВМ)

Внешние IP
• vcOrg modify / 25
• квота адресов (ipSpace)

Виртуальная машина (28)
• vmCpu, vmRam, vmDisk

Кластер Штурвал (150)
• sizingPolicy, sizingDisk, count

\ No newline at end of file