Skip to content

nubes_postgres — PostgreSQL

Объектно-реляционная СУБД PostgreSQL (Zalando Postgres Operator). Поддерживает репликацию, пулеры соединений, TLS, бэкапы в S3 и автоскейлинг.

Инструкция по сервису

Отдельная страница: руководство по сервису.

Специфика Nubes: destroy ≠ удаление

terraform destroy по умолчанию усыпляет инстанс (suspend), а не удаляет. Подробности — в разделе «Жизненный цикл» и в общем руководстве «Как работает провайдер».

ℹ️ Для Nextcloud нужен PostgreSQL с ssl_required = false.


Пример использования

resource "nubes_postgres" "db" {
  resource_name     = "my-postgres"
  operation_timeout = "20m"

  startup_configuration = {
    resource_realm = "k8s-4-sandbox-nubes-ru"
  }
  cluster_configuration = {
    cpu      = 500
    memory   = 512
    replicas = 1 # 1 | 3 | 5 | 7
    disk     = 10
  }
  access_configuration = {
    master_ip_space    = "no-needed"
    master_access_list = jsonencode([])
    slave_ip_space     = "no-needed"
    slave_access_list  = jsonencode([])
  }
  postgres_configuration = {
    version       = "17" # 17 | 16
    pooler_master = false
    pooler_slave  = false
    ssl_required  = true
  }
  backup_configuration = {
    s3_uid   = nubes_s3.storage.id
    retain   = 7
    schedule = "0 0 * * *"
  }
  autoscale_configuration = {
    enabled  = false
    percent  = 10
    quota    = 100
    schedule = 0
  }
}

Argument Reference

Имя Тип Обязательный По умолчанию Описание
resource_name string да — Имя инстанса

startup_configuration

Имя Тип Обязательный По умолчанию Описание
resource_realm string да — Платформа: iot-naeel, k8s-3-sandbox-nubes-ru, k8s-4-sandbox-nubes-ru

cluster_configuration

Имя Тип Обязательный По умолчанию Описание
cpu integer нет 500 Квота CPU пода (milicores)
memory integer нет 512 Квота памяти пода (MB)
replicas integer нет 1 Число реплик: 1, 3, 5, 7
disk integer нет 10 Квота диска (GB)

access_configuration

Имя Тип Обязательный По умолчанию Описание
master_ip_space string нет — IP-space для мастера
master_access_list string (json) нет [] Разрешённые адреса мастера
slave_ip_space string нет — IP-space для слейва
slave_access_list string (json) нет [] Разрешённые адреса слейва

postgres_configuration

Имя Тип Обязательный По умолчанию Описание
version string нет 17 Версия PostgreSQL: 17, 16
pooler_master bool нет false Пулер соединений для мастера
pooler_slave bool нет false Пулер соединений для слейва
ssl_required bool нет true Требовать TLS-соединение

postgres_conf (опционально)

Имя Тип Обязательный По умолчанию Описание
log_disconnections string нет off off, on
log_connections string нет off off, on
max_connections integer нет 100 Максимум одновременных подключений

backup_configuration

Имя Тип Обязательный По умолчанию Описание
s3_uid string (uuid) нет 00000000-0000-0000-0000-000000000000 UUID экземпляра S3 (сервис 12)
retain integer нет 7 Срок хранения бэкапов
schedule string нет 0 0 * * * Cron-расписание бэкапов
increment_count integer нет 0 Число инкрементальных бэкапов

autoscale_configuration

Имя Тип Обязательный По умолчанию Описание
enabled bool нет false Включить автоскейлинг
percent integer нет 10 Порог: 10, 15, 20
quota integer нет 100 Квота автоскейлинга
schedule integer нет 0 Час запуска: 0, 5, 12, 23

mtls_configuration (опционально)

Имя Тип Обязательный По умолчанию Описание
type string нет off off, manual, auto

Общие атрибуты (есть у всех ресурсов):

Имя Тип Обязательный По умолчанию Описание
operation_timeout string нет — Максимальное время ожидания операции (напр. 20m)
log_level string нет none Логирование стадий: none, info, debug
suspend_on_destroy bool нет true При destroy — усыпить вместо удаления
keep_on_destroy bool нет false При destroy — ничего не делать в облаке (state_only)
adopt_existing_on_create bool нет false Авто-подхват существующего инстанса при apply

Attribute Reference

Имя Тип Описание
id string UUID инстанса
state_out.internalMaster string Внутренний адрес мастера (плоская строка)
state_out / state_out_flat map Ответ API (instanceUid, monitoring)
state_params / state_params_flat map Параметры, отправленные в API
vault_secrets map (sensitive) Секреты из Vault
vault_url / vault_user_path string Адрес/путь Vault
vault_fields list Список доступных ключей секретов

Точки подключения

  • state_out.internalMaster — внутренний адрес мастера (плоская строка)
  • state_out_flat["internalConnect.master"] — хост для подключаемых приложений

Жизненный цикл

Флаг Дефолт Поведение при destroy
suspend_on_destroy true Инстанс переводится в suspend (не удаляется)
suspend_on_destroy false Выполняется операция delete — инстанс удаляется в облаке
keep_on_destroy false Если true — ресурс вообще не трогается в облаке (state_only)

Возврат из suspend: повторный terraform apply с adopt_existing_on_create = true — провайдер найдёт инстанс по имени и выполнит resume.

Зачем нужно усыпление

suspend — временная остановка: ресурсы высвобождаются, а инстанс можно вернуть в работу в любой момент повторным apply.

Удаление усыплённого инстанса

Удалить усыплённый инстанс можно, когда он пробыл в suspend 15 минут.

⚠️ Из Terraform это невозможно — операция delete для усыплённого инстанса недоступна. Удаляйте его вручную в Личном кабинете (ЛК).

  • Инстанс в статусе «not created» (после упавшего create) блокирует имя и не удаляется через API — чистится вручную в Личном кабинете.
  • reconcile запускается ресурсом nubes_service_operation; recovery, restart недоступны (только через ЛК).

Подресурсы

nubes_postgres_user

Имя Тип Обязательный По умолчанию Описание Ограничения
postgres_id string (uuid) да — UUID кластера PostgreSQL —
username string да — Имя пользователя длина 2…62
role string да — Роль пользователя app_user — базовые права (SELECT/INSERT/UPDATE/DELETE); ddl_user — расширенные (createdb, createrole)
mtls_access bool нет false Доступ по mTLS false, true
password string (sensitive) — генерируется Пароль пользователя только чтение

nubes_postgres_database

Имя Тип Обязательный По умолчанию Описание
postgres_id string (uuid) да — UUID кластера PostgreSQL
db_name string да — Имя базы данных
db_owner string да — Владелец базы (имя существующего пользователя)

nubes_postgres_backup

Имя Тип Обязательный По умолчанию Описание
postgres_id string (uuid) да — UUID кластера PostgreSQL

Общие атрибуты подресурсов

adopt_existing_on_create, keep_on_destroy, skip_missing_on_delete, operation_timeout, log_level.


Operations

Операция Доступно из Terraform Комментарий
create ✅ apply Создание кластера
modify ✅ apply Меняются cluster_configuration, access_configuration, postgres_configuration, postgres_conf, backup_configuration, autoscale_configuration, mtls_configuration
suspend ✅ destroy (при suspend_on_destroy=true) Усыпление
resume ✅ apply (при adopt_existing_on_create=true) Пробуждение
delete ✅ destroy (suspend_on_destroy=false) Удаление инстанса в облаке. Только для работающего (running); усыплённый — вручную в ЛК
recovery ⛔ нет Только вручную в ЛК — восстановление из резервной копии
restart ⛔ нет Только вручную в ЛК — ⚠️ предполагает удаление подов, возможна полная поломка
управление БД/пользователями ✅ через nubes_postgres_database / nubes_postgres_user
reconcile ✅ через nubes_service_operation Синхронизация состояния (универсальная операция)