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-ext-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
  }
}

access_configuration.master_ip_space и slave_ip_space обязательны. Если внешний адрес не нужен, указывайте no-needed.


Argument Reference

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

startup_configuration

Имя Тип Обязательный По умолчанию Описание
resource_realm string да — Платформа: k8s-4-ext-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 для мастера (no-needed — без внешнего адреса)
master_access_list string (json) нет [] Разрешённые адреса мастера
slave_ip_space string да — IP-space для слейва (no-needed — без внешнего адреса)
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_connections string нет off off, on
log_disconnections string нет off off, on
max_connections integer нет 100 Максимум одновременных подключений
postgres_conf = {
  log_connections    = "off"
  log_disconnections = "off"
  max_connections    = 100
}

backup_configuration

Имя Тип Обязательный По умолчанию Описание
s3_uid string нет — UUID или имя экземпляра S3 (сервис 12); имя резолвится в UUID
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
duration_server integer нет 87600 Срок жизни серверного сертификата (часы)
duration_ca integer нет 175200 Срок жизни CA (часы)

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

Имя Тип Обязательный По умолчанию Описание
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 Внутренний адрес мастера (postgresqlk8s-master.<uid>.svc.cluster.local)
state_out.internalSlave string Внутренний адрес слейва
state_out_flat map instanceUid, internalMaster, externalMaster, 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.externalMaster — внешний адрес (если задан master_ip_space)


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

Флаг Дефолт Поведение при 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 14 дней.

⚠️ Из 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) — генерируется Пароль пользователя только чтение

See the Terraform Registry attribute reference.