Files

128 lines
7.6 KiB
Markdown
Raw Permalink 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.
# Минимальная цепочка для одной ВМ (PROD)
Пример создаёт одну ВМ и только необходимые для неё услуги:
```text
организация (создана вручную в ЛК)
-> vDC
-> Edge с routed-сетью
-> выделение IP организации (минимум 3)
-> SNAT
-> vApp
-> одна ВМ
```
Штурвал, базы данных и приложения в примере отсутствуют. Он основан на успешно
запущенной в PROD конфигурации `VM_TF_Docs`, а не на `fullpipe_chain`.
Провайдер зафиксирован на PROD-версии `1.5.0`.
## Важное условие: организация создаётся вручную
До запуска создайте организацию **«Организация в Cloud Director»** через ЛК. Terraform
не создаёт и не удаляет организацию: `nubes_vc_vdc` получает её имя или UUID через
`organization`.
В ЛК проверьте, что организации доступны выбранные resource pool, Provider VDC,
storage policy и IP space. Значения из примера (`msk1`, `Intel Cascade Lake 3.1`,
`SSD SDS`) подтверждены для использованного PROD-пула; для другого пула их нужно
заменить на значения из ЛК.
## Почему выделяется 3 IP
Для проверенной цепочки с одной ВМ минимальное значение `org_vip_count` — **3**.
При значении 2 API сообщил, что свободных IP — 0, а для операции требуется ещё 1;
при значении 3 развёртывание ВМ запустилось. Поэтому в этом примере не уменьшайте
квоту до 2, даже если из дополнительных потребителей IP оставлена только одна ВМ.
`org_vip_count` задаёт количество IP в выбранном `ip_space_name` на организации —
это не количество адресов, которое сама ВМ получит. Точное внутреннее распределение
резервов платформой эта конфигурация не показывает. Если другие услуги используют
адреса из того же IP space или там уже есть занятые адреса, квоту нужно увеличить.
Список услуг со статусами `running`/`suspended` сам по себе не показывает, какие IP
заняты.
В конфигурации VM установлен `same_snat = true`: согласно PROD-схеме при этом для ВМ
создаётся собственный внешний IP. SNAT на Edge также задаётся отдельным ресурсом,
как в проверенной цепочке.
## Подготовка параметров
1. Скопируйте шаблоны:
```bash
cp terraform.tfvars.example terraform.tfvars
cp secrets.auto.tfvars.example secrets.auto.tfvars
```
2. В `secrets.auto.tfvars` замените заглушку на PROD API token из ЛК → Профиль →
Токены → «Технический». Не присылайте и не коммитьте этот файл.
3. В `terraform.tfvars` замените:
- `organization` на имя или UUID вручную созданной организации;
- `ip_space_name` на точное имя IP space из ЛК;
- `vm_user_public_key` на содержимое вашего `~/.ssh/id_ed25519.pub`;
- `vm_access_ip_list` на доверенный публичный IP/CIDR для входящего доступа.
4. Убедитесь, что имена vDC, Edge, vApp и ВМ уникальны в организации. Не оставляйте
значения-заглушки `REPLACE_WITH_...`.
5. Если выбранный resource pool отличается от проверенного PROD-пула, замените
`vdc_network_provider`, `vdc_provider_vdc`, `vdc_storage_config`, DNS и routed subnet
на значения, допустимые в ЛК. Routed subnet `/24` не должен пересекаться с другой сетью.
Все переменные и значения по умолчанию прокомментированы в `variables.tf` и
`terraform.tfvars.example`. Параметры ресурсов сверены с PROD YAML-схемами.
## Запуск
Команды выполняет владелец инфраструктуры; `apply` в этом примере не запускался:
```bash
terraform init
terraform validate
terraform plan
```
Проверьте план: ожидаются шесть услуг — vDC, Edge, выделение IP на организации,
SNAT, vApp и ВМ. Убедитесь, что в плане нет неожиданных изменений уже существующих
услуг. Только после проверки владелец запускает:
```bash
terraform apply
```
После завершения:
```bash
terraform output vm_state_flat
```
`externalConnect` — внешний адрес ВМ, `internalConnect` — адрес в routed-сети,
`fqdn` — DNS-имя, если платформа его вернула.
## Параметры ВМ и операции
- Образ `Ubuntu_22-20G` включает базовый диск 20 GB; `vm_disk = 128` задаёт
**дополнительный** диск.
- `vm_access_port_list` разрешает только заданные порты. `vm_access_ip_list` ограничивает
адреса-источники; не оставляйте доступ SSH открытым для `0.0.0.0/0`, если это не требуется.
- `git_revision` оставлен `null` при создании. Новое значение этого маркера запускает
redeploy при последующем Update.
- `reconcile_trigger` также оставлен `null` при создании. Новое значение запускает
reconcile при Update; при Create reconcile не выполняется.
- В проверке PROD от 17.10.2026 файл-маркер в `/home/ubuntu` отсутствовал после redeploy.
Считайте локальные данные ВМ потенциально теряемыми при redeploy и храните важные данные
вне системного диска.
## Состав файлов
| Файл | Назначение |
|---|---|
| `versions.tf` | Версия Terraform и PROD-провайдера |
| `provider.tf` | Подключение к PROD API |
| `variables.tf` | Типы, значения по умолчанию и пояснения к входным переменным |
| `vdc.tf` | Виртуальный датацентр |
| `edge.tf` | Edge и routed-сеть |
| `network.tf` | Квота IP организации и SNAT |
| `vm.tf` | vApp и одна ВМ |
| `outputs.tf` | Идентификаторы услуг и состояние ВМ |
| `terraform.tfvars.example` | Несекретные значения и параметры примера |
| `secrets.auto.tfvars.example` | Шаблон локального файла для API token |