docs(pipeline): цепочка расширена vApp -> ВМ — требования (квота CPU vDC, 4-й IP, SSH-ключ), параметры ВМ и образы, внешний доступ, раздел 6 с чек-листом, destroy для vApp/ВМ
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Как развернуть vDC, Edge, внешние IP, SNAT и кластер Штурвал
|
||||
# Как развернуть цепочку: vDC → Edge → внешние IP → SNAT → vApp → ВМ → Штурвал
|
||||
|
||||
Пошаговая инструкция. Готовые файлы примера — в репозитории `tf_examples`, папка `fullpipe_chain`.
|
||||
|
||||
@@ -8,11 +8,13 @@
|
||||
- сетевой шлюз периметра (Edge) с балансировщиком AVI;
|
||||
- внешние IP на организации;
|
||||
- SNAT на шлюзе;
|
||||
- виртуальный каталог (vApp) и виртуальная машина (ВМ) внутри него — с доступом по SSH;
|
||||
- Kubernetes-кластер Штурвал (сервис 150) на этой сети.
|
||||
|
||||
**Организацию создайте заранее в ЛК** — Terraform её не создаёт и не удаляет.
|
||||
Кластер Штурвал создаётся десятки минут, поэтому провайдер ждёт его до часу
|
||||
(`operation_timeout = "60m"`); остальные ресурсы — минуты.
|
||||
(`operation_timeout = "60m"`); ВМ тоже создаётся небыстро (у неё отдельный таймаут `15m`),
|
||||
остальные ресурсы — минуты.
|
||||
|
||||
## Что нужно перед началом
|
||||
|
||||
@@ -22,12 +24,15 @@
|
||||
| Токен API | доступ к ЛК | ЛК → Профиль → Токены → «Технический» |
|
||||
| Организация в Cloud Director | всё создаётся внутри неё | услуга «Организация в Cloud Director» |
|
||||
| Edge с балансировщиком AVI | без ALB кластер Штурвал не поднимется | `nsxt_need_enable_avi = true`, `nsxt_virtual_services_count >= 3` |
|
||||
| Не меньше 3 внешних IP | адрес Kubernetes API, адрес Ingress и запас | `ip_count = "3"` |
|
||||
| SNAT на Edge | выход в интернет для машин кластера | ресурс `nubes_vc_nsxt_snat` |
|
||||
| Внешние IP: не меньше 3 + 1 под ВМ | адрес Kubernetes API, адрес Ingress, адрес ВМ и запас | `ip_count = "4"` |
|
||||
| SNAT на Edge | выход в интернет для машин кластера и для ВМ | ресурс `nubes_vc_nsxt_snat` |
|
||||
| Публичный SSH-ключ | вход на ВМ по SSH | `~/.ssh/id_ed25519.pub` → `vm_user_public_key` |
|
||||
| Запас vCPU в vDC | Штурвал занимает 8 vCPU из 8 при настройках по умолчанию, и тогда ВМ не включится | `vdc_cpu_allocated` |
|
||||
|
||||
Порядок из чек-листа услуги 150 (именно так связаны ресурсы в примере):
|
||||
организация → vDC → Edge (ALB, AVI ≥ 3) → внешние IP (≥ 3) → SNAT → кластер Штурвал.
|
||||
Минимум для кластера: 1 мастер-нода и 1 воркер-нода по 4 vCPU / 8 ГБ RAM / 50 ГБ диска.
|
||||
организация → vDC → Edge (ALB, AVI ≥ 3) → внешние IP (≥ 3) → SNAT → **vApp → ВМ** → кластер Штурвал.
|
||||
Минимум для кластера: 1 мастер-нода и 1 воркер-нода по 4 vCPU / 8 ГБ RAM / 50 ГБ диска;
|
||||
минимум для ВМ: 1 vCPU / 1 ГБ RAM (в примере — 2 vCPU / 2 ГБ).
|
||||
|
||||
## 1. Скачайте пример
|
||||
|
||||
@@ -67,7 +72,7 @@ organization = "organ"
|
||||
|
||||
# Внешние IP
|
||||
ip_space_name = "internet-ipv4-v1"
|
||||
ip_count = "3"
|
||||
ip_count = "4" # 3 под Штурвал + 1 под ВМ
|
||||
|
||||
# vDC
|
||||
vdc_resource_name = "fullpipe-vdc" # имя услуги в ЛК, любое
|
||||
@@ -86,6 +91,17 @@ nsxt_virtual_services_count = 3 # виртуальных серв
|
||||
nsxt_ip_addr_pool = "10.10.102.0/24" # пул адресов routed-сети, маска /24
|
||||
nsxt_main_dns = "81.22.46.22" # основной DNS
|
||||
nsxt_second_dns = "185.247.187.77" # второй DNS
|
||||
|
||||
# vApp и ВМ
|
||||
vapp_name = "fullpipe-vapp-01" # имя vApp: маска ^[a-z0-9][a-z0-9.-]{3,61}[a-z0-9]$, уникально в организации
|
||||
vm_name = "web01" # имя ВМ: задаёт имя IP Set {vapp_name}-{vm_name}
|
||||
vm_image = "Ubuntu_22-20G" # RockyLinux_9-16G-cloudinit | Ubuntu_22-20G | Debian_13-20G
|
||||
vm_cpu = 2 # vCPU, 1..64
|
||||
vm_ram = 2 # RAM, ГБ, 1..256
|
||||
vm_disk = 20 # дополнительный диск, ГБ
|
||||
vm_user_login = "ubuntu" # учётка SSH
|
||||
vm_user_public_key = "ssh-ed25519 AAAA..." # содержимое ~/.ssh/id_ed25519.pub
|
||||
vm_same_snat = false # false — за общим SNAT шлюза
|
||||
```
|
||||
|
||||
Описание всех параметров — в `variables.tf`. `terraform.tfvars` с токеном никому не передавайте
|
||||
@@ -95,7 +111,7 @@ nsxt_second_dns = "185.247.187.77" # второй DNS
|
||||
|
||||
```bash
|
||||
terraform init # один раз — скачает провайдер
|
||||
terraform plan # покажет, что будет создано: 5 ресурсов
|
||||
terraform plan # покажет, что будет создано: 7 ресурсов (vDC, Edge, IP, SNAT, vApp, ВМ, Штурвал)
|
||||
terraform apply # создаст (подтвердить: yes)
|
||||
```
|
||||
|
||||
@@ -105,14 +121,73 @@ terraform apply # создаст (подтвердить: yes)
|
||||
terraform output # UUID и имена созданных услуг
|
||||
```
|
||||
|
||||
И в ЛК: появились vDC, Edge и кластер Штурвал, на организации выделены внешние IP,
|
||||
И в ЛК: появились vDC, Edge, vApp с ВМ и кластер Штурвал, на организации выделены внешние IP,
|
||||
на шлюзе включён SNAT. Повторный `terraform plan` должен показать `No changes`.
|
||||
|
||||
Адрес ВМ виден в `terraform output vm_state_flat` — поля `externalConnect` (внешний IP),
|
||||
`internalConnect` (адрес в routed-сети) и `fqdn`: `ssh <vm_user_login>@<externalConnect>`.
|
||||
|
||||
Кластер создаётся десятки минут — провайдер ждёт его (`operation_timeout = "60m"`),
|
||||
в ЛК он появится со статусом `running`. Адреса Kubernetes API и Ingress — в
|
||||
`terraform output shturval_state_params` (поля `kubernetesApiAddress` и `ingressAddress`).
|
||||
|
||||
## 6. Удаление: «заморозка» вместо удаления
|
||||
## 6. vApp и ВМ
|
||||
|
||||
Виртуальная машина живёт **внутри vApp**: vApp привязывается к vDC (`vdc_uid`) и к Edge (`nsxt_uid`),
|
||||
а ВМ — к vApp (`vapp_uid`) и получает адрес в routed-сети шлюза. Своей сети у vApp нет.
|
||||
|
||||
| Ресурс | Услуга | Ключевые параметры |
|
||||
|---|---|---|
|
||||
| `nubes_vapp` | 26 | `vapp_name` (уникальное в организации, маска DNS-имени), `vdc_uid`, `nsxt_uid` |
|
||||
| `nubes_vc_vm_v3` | 28 | `vapp_uid`, `vm_name`, `vm_cpu`, `vm_ram`, `vm_disk`, `image_vm`, `user_login`, `user_public_key`, `ip_space_name`, `access_port_list` |
|
||||
|
||||
### Параметры ВМ
|
||||
|
||||
| Параметр | Значения |
|
||||
|---|---|
|
||||
| `image_vm` | `RockyLinux_9-16G-cloudinit`, `Ubuntu_22-20G`, `Debian_13-20G` |
|
||||
| `vm_cpu` / `vm_ram` | 1..64 шт. / 1..256 ГБ |
|
||||
| `vm_disk` | дополнительный диск, ГБ (основной диск зависит от образа) |
|
||||
| `user_login` | учётка SSH (по умолчанию `myuser`) |
|
||||
| `access_port_list` | `[{ "port": "22", "type": "tcp" }]`; `type` — `tcp`, `udp` или `all` |
|
||||
| `access_ip_list` | белый список адресов; по умолчанию `["0.0.0.0/0"]` |
|
||||
|
||||
`image_vm`, `vm_name`, `user_login`, `user_public_key` и `vapp_uid` — **create-only** (менять нельзя).
|
||||
`vm_cpu`, `vm_ram`, `vm_disk`, `access_port_list`, `ip_space_name` меняются операцией `modify`.
|
||||
|
||||
### Внешний доступ
|
||||
|
||||
| `ip_space_name` | Что это значит |
|
||||
|---|---|
|
||||
| `internet-ipv4-v1` | у ВМ есть внешний адрес: в `vm_state_flat` появятся `externalConnect` и `fqdn` |
|
||||
| `no-needed` | внешнего адреса нет, доступ только изнутри |
|
||||
|
||||
Адрес берётся из квоты организации, поэтому при внешнем доступе нужен **4-й адрес** (`ip_count = "4"`).
|
||||
При `same_snat = false` (по умолчанию) ВМ публикуется за общим SNAT шлюза.
|
||||
|
||||
Пример результата на живом стенде:
|
||||
|
||||
```
|
||||
vm_state_flat = {
|
||||
"externalConnect" = "185.247.187.235"
|
||||
"internalConnect" = "10.10.102.4"
|
||||
"fqdn" = "web01.85ea682f-...dev.nubes.ru"
|
||||
}
|
||||
```
|
||||
|
||||
### Что проверять при создании ВМ
|
||||
|
||||
1. **Запас vCPU в vDC.** Штурвал при настройках по умолчанию занимает 8 vCPU из 8 (2 ноды × «TKG 4CPU 8RAM»).
|
||||
Тогда ВМ не включится: платформа отдаёт `[400:VALIDATION] Unable to perform this action` на этапе
|
||||
power-on, а инстанс остаётся в статусе `not created`. Лечится увеличением `vdc_cpu_allocated`.
|
||||
2. **Квота IP.** `ip_count ≥ 4`, иначе внешний адрес для ВМ не выделится.
|
||||
3. **Ключ.** Публичный ключ кладите в `terraform.tfvars`, не в репозиторий.
|
||||
4. **Время.** ВМ создаётся и включается с customization (запись учётки и ключа) — на живом стенде
|
||||
операция шла больше 15 минут. В примере стоит `operation_timeout = "15m"`; при медленной платформе
|
||||
увеличьте его. Симптом таймаута — «операция … не завершилась за установленный таймаут».
|
||||
5. **Проверка.** `ssh <vm_user_login>@<externalConnect>` и `terraform plan` → `No changes`.
|
||||
|
||||
## 7. Удаление: «заморозка» вместо удаления
|
||||
|
||||
```bash
|
||||
terraform destroy
|
||||
@@ -127,15 +202,18 @@ terraform destroy
|
||||
| Edge | не трогается: у эджа нет операции `suspend` | `keep_on_destroy = true` |
|
||||
| SNAT | не выключается | `keep_on_destroy = true` |
|
||||
| Квота внешних IP | не меняется: адреса держит кластер Штурвала | `keep_on_destroy = true` |
|
||||
| vApp | `suspend`: выключаются все ВМ внутри каталога | `suspend_on_destroy = true` |
|
||||
| ВМ | `suspend` | `suspend_on_destroy = true` |
|
||||
|
||||
Приоритет флагов: `keep_on_destroy` важнее `suspend_on_destroy`. Следующий `apply`
|
||||
усыновит объекты по имени и разморозит кластер и vDC
|
||||
(`adopt_existing_on_create = true` → `resume`). **Организация не удаляется никогда.**
|
||||
|
||||
Полное удаление — осознанно: поставьте `keep_on_destroy = false` и
|
||||
`suspend_on_destroy = false` и удаляйте по порядку: кластер → квота IP (`count = 0`) →
|
||||
`suspend_on_destroy = false` и удаляйте по порядку: кластер → ВМ → vApp → квота IP (`count = 0`) →
|
||||
SNAT → Edge → vDC. Квоту нельзя опустить ниже занятых адресов, поэтому — только
|
||||
после удаления кластера; vDC удаляется лишь через 14 дней после `suspend`.
|
||||
после удаления кластера и ВМ; vApp удаляется лишь после `suspend` (полное удаление — через 14 дней),
|
||||
а vDC — через 14 дней после `suspend`.
|
||||
|
||||
## Файлы примера
|
||||
|
||||
@@ -147,8 +225,9 @@ SNAT → Edge → vDC. Квоту нельзя опустить ниже зан
|
||||
| `vdc.tf` | виртуальный датацентр |
|
||||
| `edge.tf` | сетевой шлюз периметра (Edge) |
|
||||
| `modifiers.tf` | внешние IP на организации + SNAT на шлюзе |
|
||||
| `vm.tf` | vApp и ВМ: переменные vApp/ВМ, оба ресурса и выводы (отключается удалением файла) |
|
||||
| `shturval.tf` | Kubernetes-кластер Штурвал: переменные Штурвала, группы воркеров и сам ресурс |
|
||||
| `outputs.tf` | UUID и имена созданных услуг (vDC, Edge, Штурвал) |
|
||||
| `outputs.tf` | UUID и имена созданных услуг (vDC, Edge, vApp, ВМ, Штурвал) |
|
||||
| `terraform.tfvars.example` | шаблон значений (копируется в `terraform.tfvars`) |
|
||||
|
||||
Подробнее про два последних ресурса — на странице
|
||||
|
||||
Reference in New Issue
Block a user