name: postgres
service_id: 90
service_display_name: PostgreSQL
service_short_name: postgres
service_man: '# Инструкция по развертыванию PostgreSQL через платформу
---
## 1. Общая информация
PostgreSQL — это надёжная объектно-реляционная СУБД с открытым исходным кодом, поддерживающая
расширенный набор функций, транзакции и хранение сложных типов данных. Развёртывание полностью автоматизировано платформой на базе Zalando Postgres Operator с использованием Kubernetes.
## Доступные
операции
- **create** — Создание кластера
- **delete** — Удаление кластера
- **modify** — Модификация кластера
- **suspend** — Остановка кластера
- **resume** —
Запуск кластера
- **restart** — Перезапуск кластера
- **recovery** — Восстановление из резервной копии
- **create_user** — Создание пользователя
- **delete_user** — Удаление
пользователя
- **create_database** — Создание базы данных
- **delete_database** — Удаление базы данных
---
## 2. Параметры развертывания кластера
Ниже перечислены
параметры, которые необходимо указать при создании ресурса PostgreSQL:
* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развернут кластер). Пример:
`k8s-3.ext.nubes.ru`.
* **Количество узлов в сети:**
Количество инстансов (реплик) в кластере PostgreSQL. Пример: `2` (master + slave).
* **Квота (megabyte) памяти пода:**
Квота
памяти пода в мегабайтах. Пример: `2048`
* **Квота (millicore) ядра пода:**
Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `1000`
* **Размер (gigabyte) диска для базы
данных:**
Размер диска для хранения данных в гигабайтах. Пример: `20`
* **Выделяет внешний IP для доступа к master:**
Флаг, определяющий, нужно ли выделять внешний IP для доступа
к master. Пример: `true` или `false`
* **Имя ipSpace для публикации внешнего IP master:**
Если включен предыдущий параметр, то поле необходимо заполнить. Пример: `internet-no-antiddos-v1`
*
**Выделяет внешний IP для доступа к slave:**
Флаг для выделения внешнего IP для slave (реплики чтения). Работает, если slave присутствует в кластере.
* **Имя ipSpace для публикации внешнего
IP slave:**
Если включен параметр для slave, то поле необходимо заполнить.
* **UUID экземпляра услуги S3:**
UUID экземпляра S3 для хранения резервных копий.
* **Версия PostgreSQL:**
Версия
PostgreSQL для развертывания. Пример: `16`
* **Расписание бэкапов (ext_BACKUP_SCHEDULE):**
Необязательный. Cron-выражение для времени запуска бэкапов. По умолчанию: `0 0 * * *` (ежедневно
в полночь).
* **Количество сохраняемых бэкапов (ext_BACKUP_NUM_TO_RETAIN):**
Необязательный. Количество сохраняемых бэкапов. По умолчанию: `7`
* **PgPooler (master / slave):**
Флаги
включения PgBouncer для подключений на запись и чтение. При включении создаётся отдельный под.
* **Разрешить подключение без SSL (allowNoSSL):**
По умолчанию подключение с sslmode=require.
При `true` разрешается подключение без SSL.
* **Автоскейлинг PV (autoScale):**
Включает автоскейлинг тома. Требует настройки autoScalePercentage, autoScaleTechWindow, autoScaleQuotaGb.
*
**Дополнительные параметры PostgreSQL (jsonParameters):**
JSON с переменными конфигурации PostgreSQL. Документация: https://www.postgresql.org/docs/current/runtime-config.html
---
##
3. Выходные параметры
После успешного развертывания ресурса PostgreSQL платформа возвращает ряд параметров.
#### externalConnect
Внешние эндпоинты для подключения к кластеру:
-
**master** — для операций записи (host: `write.${namespace}`, port: 5432)
- **slave** — для операций чтения (host: `read.${namespace}`, port: 5432)
Пример ответа платформы:
```json
{
"slave":
{
"ip": "",
"fqdn": "",
"uuid": "",
"isExternal": false
},
"master": {
"ip": "",
"fqdn": "write..",
"uuid":
"",
"isExternal": false
}
}
```
Поля: `ip` — внешний IP; `fqdn` — полное имя хоста; `uuid` — идентификатор; `isExternal` — признак внешнего доступа.
####
internalConnect
Внутренние эндпоинты (FQDN) для подключения из других сервисов внутри той же сети Kubernetes.
Пример ответа платформы:
```json
{
"slave": "",
"master":
{
"slave": "",
"master": {
"slave": "",
"master": "postgresqlk8s-master..svc.cluster.local"
}
}
}
```
Для подключения используйте
значение `master.master.master` (host для записи) или соответствующее значение slave (host для чтения).
Для подключения используется порт **5432**.
---
## 4. Управление пользователями
###
create_user — Создание пользователя
* **Имя пользователя (username):**
Имя создаваемого пользователя. Используется для подключения к базе и настройки прав.
Пример: `myapp_user`
*
**Роль (role):**
Тип роли пользователя. Допустимые значения:
- `app_user` — базовые права для DML-операций (SELECT, INSERT, UPDATE, DELETE)
- `ddl_user` — расширенные права: createdb,
createrole (управление базами и ролями)
Защищённые имена, которые нельзя использовать: `admin`, `postgres`, `standby`.
### delete_user — Удаление пользователя
* **Имя пользователя
(username):**
Имя удаляемого пользователя. Пример: `myapp_user`
Пользователя нельзя удалить, если он является владельцем базы данных. Сначала удалите или передайте владение базами данных
другому пользователю.
---
## 5. Управление базами данных
### create_database — Создание базы данных
* **Имя базы данных (dbName):**
Название создаваемой базы данных.
Пример: `myapp_db`
* **Владелец базы данных (dbOwner):**
Имя пользователя-владельца базы. Должен существовать в кластере (создан через create_user). Пример: `myapp_user`
### delete_database
— Удаление базы данных
* **Имя базы данных (dbName):**
Название удаляемой базы данных. Пример: `myapp_db`
'
lifecycle:
suspendOnDestroyDefault: true
adoptExistingOnCreateDefault: false
operations:
- svcOperationId: 19
operation: create
kind: instance
action: create
- svcOperationId: 264
operation: create_backup
kind: subresource
action: create
- svcOperationId: 245
operation: create_database
kind: subresource
action: create
- svcOperationId: 241
operation: create_user
kind: subresource
action: create
- svcOperationId: 20
operation: delete
kind: instance
action: delete
- svcOperationId: 246
operation: delete_database
kind: subresource
action: delete
- svcOperationId: 244
operation: delete_user
kind: subresource
action: delete
- svcOperationId: 48
operation: modify
kind: instance
action: modify
- svcOperationId: 263
operation: reconcile
kind: action
action: reconcile
- svcOperationId: 47
operation: recovery
kind: action
action: recovery
- svcOperationId: 54
operation: restart
kind: action
action: restart
- svcOperationId: 114
operation: resume
kind: instance
action: resume
- svcOperationId: 115
operation: suspend
kind: instance
action: suspend
stateOut:
backups: {}
databases: {}
users: {}
cfsParams:
- svcOperationCfsParamId: 788
svcOperationCfsParam: clusterConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
cpu:
dataType: integer > 0
defaultValue: '500'
isRequired: true
isModifiable: false
memory:
dataType: integer > 0
defaultValue: '512'
isRequired: true
isModifiable: false
replicas:
dataType: integer > 0
defaultValue: '1'
isRequired: true
isModifiable: false
valueList:
- '1'
- '3'
- '5'
- '7'
disk:
dataType: integer > 0
defaultValue: '10'
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 789
svcOperationCfsParam: startupConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: false
dataDescriptor:
resourceRealm:
dataType: string
defaultValue: k8s-4-ext-nubes-ru
isRequired: true
isModifiable: false
valueList:
- k8s-4-ext-nubes-ru
- svcOperationCfsParamId: 790
svcOperationCfsParam: accessConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
masterIpSpace:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
masterAccessList:
dataType: json
defaultValue: '[]'
isRequired: true
isModifiable: false
slaveIpSpace:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
slaveAccessList:
dataType: json
defaultValue: '[]'
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 791
svcOperationCfsParam: postgresConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
version:
dataType: string
defaultValue: '17'
isRequired: true
isModifiable: false
valueList:
- '17'
- '16'
sslRequired:
dataType: boolean
defaultValue: 'true'
isRequired: true
isModifiable: false
valueList:
- 'false'
- 'true'
poolerMaster:
dataType: boolean
defaultValue: 'false'
isRequired: true
isModifiable: false
valueList:
- 'false'
- 'true'
poolerSlave:
dataType: boolean
defaultValue: 'false'
isRequired: true
isModifiable: false
valueList:
- 'false'
- 'true'
- svcOperationCfsParamId: 792
svcOperationCfsParam: postgresConf
dataType: array-map-fixed
isRequired: false
defaultValue: ''
isModifiable: true
dataDescriptor:
paramName:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- log_connections
- log_disconnections
paramValue:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 793
svcOperationCfsParam: backupConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
s3Uid:
dataType: uuid
defaultValue: ''
isRequired: true
isModifiable: false
retain:
dataType: integer > 0
defaultValue: '7'
isRequired: true
isModifiable: false
schedule:
dataType: string
defaultValue: 0 0 * * *
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 794
svcOperationCfsParam: autoscaleConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
enabled:
dataType: boolean
defaultValue: 'false'
isRequired: true
isModifiable: false
valueList:
- 'false'
- 'true'
schedule:
dataType: integer >= 0
defaultValue: '0'
isRequired: true
isModifiable: false
valueList:
- '0'
- '5'
- '12'
- '23'
quota:
dataType: integer > 0
defaultValue: '100'
isRequired: true
isModifiable: false
percent:
dataType: integer > 0
defaultValue: '10'
isRequired: true
isModifiable: false
valueList:
- '10'
- '15'
- '20'
- svcOperationCfsParamId: 1094
svcOperationCfsParam: mtlsConfiguration
dataType: map-fixed
isRequired: true
defaultValue: '{}'
isModifiable: true
dataDescriptor:
type:
dataType: string
defaultValue: 'off'
isRequired: true
isModifiable: false
valueList:
- 'off'
- manual
- auto
durationCA:
dataType: integer > 0
defaultValue: '175200'
isRequired: true
isModifiable: false
durationServer:
dataType: integer > 0
defaultValue: '87600'
isRequired: true
isModifiable: false
certCA:
dataType: string
defaultValue: ''
isRequired: false
isModifiable: false
certServer:
dataType: string
defaultValue: ''
isRequired: false
isModifiable: false
- svcOperationCfsParamId: 741
svcOperationCfsParam: dbName
dataType: string
isRequired: true
defaultValue: ''
isModifiable: false
- svcOperationCfsParamId: 742
svcOperationCfsParam: dbOwner
dataType: string
isRequired: true
defaultValue: ''
isModifiable: false
- svcOperationCfsParamId: 733
svcOperationCfsParam: username
dataType: string
isRequired: true
defaultValue: ''
isModifiable: false
- svcOperationCfsParamId: 740
svcOperationCfsParam: role
dataType: string
isRequired: true
defaultValue: ''
isModifiable: false
valueList:
- app_user
- ddl_user
- svcOperationCfsParamId: 1096
svcOperationCfsParam: mtlsAccess
dataType: boolean
isRequired: true
defaultValue: 'false'
isModifiable: false
valueList:
- 'false'
- 'true'
- svcOperationCfsParamId: 457
svcOperationCfsParam: deleteS3Bucket
dataType: boolean
isRequired: true
defaultValue: 'true'
isModifiable: true
valueList:
- 'false'
- 'true'
- svcOperationCfsParamId: 743
svcOperationCfsParam: dbName
dataType: string
isRequired: true
defaultValue: ''
isModifiable: true
- svcOperationCfsParamId: 739
svcOperationCfsParam: username
dataType: string
isRequired: true
defaultValue: ''
isModifiable: true
- svcOperationCfsParamId: 795
svcOperationCfsParam: clusterConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
cpu:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
memory:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
replicas:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- '1'
- '3'
- '5'
- '7'
disk:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 796
svcOperationCfsParam: accessConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
masterIpSpace:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
masterAccessList:
dataType: json
defaultValue: ''
isRequired: true
isModifiable: false
slaveIpSpace:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
slaveAccessList:
dataType: json
defaultValue: ''
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 797
svcOperationCfsParam: postgresConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
poolerSlave:
dataType: boolean
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- 'false'
- 'true'
version:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- '17'
- '16'
sslRequired:
dataType: boolean
defaultValue: false,true
isRequired: true
isModifiable: false
poolerMaster:
dataType: boolean
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- 'false'
- 'true'
- svcOperationCfsParamId: 798
svcOperationCfsParam: postgresConf
dataType: array-map-fixed
isRequired: false
defaultValue: ''
isModifiable: true
dataDescriptor:
paramName:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- log_connections
- log_disconnections
paramValue:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 799
svcOperationCfsParam: backupConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
s3Uid:
dataType: uuid
defaultValue: ''
isRequired: true
isModifiable: false
retain:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
schedule:
dataType: string
defaultValue: 0 0 * * *
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 800
svcOperationCfsParam: autoscaleConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
enabled:
dataType: boolean
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- 'false'
- 'true'
schedule:
dataType: integer >= 0
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- '0'
- '5'
- '12'
- '23'
quota:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
percent:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- '10'
- '15'
- '20'
- svcOperationCfsParamId: 1095
svcOperationCfsParam: mtlsConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
type:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- 'off'
- manual
- auto
durationCA:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
durationServer:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
certCA:
dataType: string
defaultValue: ''
isRequired: false
isModifiable: false
certServer:
dataType: string
defaultValue: ''
isRequired: false
isModifiable: false
refreshCert:
dataType: boolean
defaultValue: 'false'
isRequired: false
isModifiable: false
valueList:
- 'false'
- 'true'
- svcOperationCfsParamId: 801
svcOperationCfsParam: startupConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
resourceRealm:
dataType: string
defaultValue: k8s-4-ext-nubes-ru
isRequired: true
isModifiable: false
valueList:
- k8s-4-ext-nubes-ru
recoveryPoint:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 802
svcOperationCfsParam: clusterConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
cpu:
dataType: integer > 0
defaultValue: '500'
isRequired: true
isModifiable: false
memory:
dataType: integer > 0
defaultValue: '512'
isRequired: true
isModifiable: false
replicas:
dataType: integer > 0
defaultValue: '1'
isRequired: true
isModifiable: false
valueList:
- '1'
- '3'
- '5'
- '7'
disk:
dataType: integer > 0
defaultValue: '10'
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 803
svcOperationCfsParam: accessConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
masterIpSpace:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
masterAccessList:
dataType: json
defaultValue: '[]'
isRequired: true
isModifiable: false
slaveIpSpace:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
slaveAccessList:
dataType: json
defaultValue: '[]'
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 804
svcOperationCfsParam: postgresConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
version:
dataType: string
defaultValue: '17'
isRequired: true
isModifiable: false
valueList:
- '17'
- '16'
sslRequired:
dataType: boolean
defaultValue: 'true'
isRequired: true
isModifiable: false
valueList:
- 'false'
- 'true'
poolerMaster:
dataType: boolean
defaultValue: 'false'
isRequired: true
isModifiable: false
valueList:
- 'false'
- 'true'
poolerSlave:
dataType: boolean
defaultValue: 'false'
isRequired: true
isModifiable: false
valueList:
- 'false'
- 'true'
- svcOperationCfsParamId: 805
svcOperationCfsParam: postgresConf
dataType: array-map-fixed
isRequired: false
defaultValue: ''
isModifiable: true
dataDescriptor:
paramName:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- log_connections
- log_disconnections
paramValue:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 806
svcOperationCfsParam: backupConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
s3Uid:
dataType: uuid
defaultValue: ''
isRequired: true
isModifiable: false
retain:
dataType: integer > 0
defaultValue: '7'
isRequired: true
isModifiable: false
schedule:
dataType: string
defaultValue: 0 0 * * *
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 807
svcOperationCfsParam: autoscaleConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
enabled:
dataType: boolean
defaultValue: 'false'
isRequired: true
isModifiable: false
valueList:
- 'false'
- 'true'
schedule:
dataType: integer >= 0
defaultValue: '0'
isRequired: true
isModifiable: false
valueList:
- '0'
- '5'
- '12'
- '23'
quota:
dataType: integer > 0
defaultValue: '100'
isRequired: true
isModifiable: false
percent:
dataType: integer > 0
defaultValue: '10'
isRequired: true
isModifiable: false
valueList:
- '10'
- '15'
- '20'
cfsParamsByOp:
19:
- 788
- 789
- 790
- 791
- 792
- 793
- 794
- 1094
264: []
245:
- 741
- 742
241:
- 733
- 740
- 1096
20:
- 457
246:
- 743
244:
- 739
48:
- 795
- 796
- 797
- 798
- 799
- 800
- 1095
263: []
47:
- 801
- 802
- 803
- 804
- 805
- 806
- 807
54: []
114: []
115: []
stateParams:
clusterConfiguration: '{"cpu": 500, "memory": 512, "replicas": 1, "disk": 10}'
startupConfiguration: '{"resourceRealm": "k8s-4-ext-nubes-ru"}'
accessConfiguration: '{"masterIpSpace": "", "masterAccessList": "[]", "slaveIpSpace": "", "slaveAccessList": "[]"}'
postgresConfiguration: '{"version": "17", "sslRequired": true, "poolerMaster": false, "poolerSlave": false}'
postgresConf: '{"paramName": "", "paramValue": ""}'
backupConfiguration: '{"s3Uid": "", "retain": 7, "schedule": "0 0 * * *"}'
autoscaleConfiguration: '{"enabled": false, "schedule": 0, "quota": 100, "percent": 10}'
mtlsConfiguration: '{"type": "off", "durationCA": 175200, "durationServer": 87600, "certCA": "", "certServer": ""}'