Files
polygon/site/services/prod/115_mariadb.yaml
T

430 lines
23 KiB
YAML
Raw 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.
name: mariadb
service_id: 115
service_display_name: Mariadb
service_short_name: mariadb
service_man: '# Инструкция по развертыванию MariaDB через платформу<br/><br/>## 1. Общая информация<br/><br/>MariaDB — реляционная база данных, совместимая с MySQL. Разворачивается через `mariadb-operator`
в Kubernetes.<br/><br/>### Доступные операции с кластером<br/><br/>* **create** — создание кластера<br/>* **delete** — удаление кластера<br/>* **suspend** — остановка кластера (под реально останавливается,
ресурсы не потребляются)<br/>* **resume** — запуск ранее остановленного кластера<br/>* **modify** — изменение параметров кластера<br/>* **reconcile** — синхронизация состояния инстанса с платформой<br/><br/>###
Доступные операции с базами данных<br/><br/>* **create_database** — создание базы данных<br/>* **delete_database** — удаление базы данных<br/><br/>### Доступные операции с пользователями<br/><br/>* **create_user**
— создание пользователя<br/>* **delete_user** — удаление пользователя<br/><br/>---<br/><br/>## 2. Параметры создания кластера<br/><br/>### Платформа для развертывания (`startupConfiguration.resourceRealm`)<br/><br/>Среда,
в которой будет развёрнут кластер.<br/><br/>### Конфигурация ресурсов (`clusterConfiguration`)<br/><br/>JSON-объект:<br/>* `cpu` — квота CPU пода в миликорах (1000 = 1 vCPU). Пример: `500`<br/>* `memory`
— квота памяти пода в мегабайтах. Пример: `512`<br/>* `disk` — размер диска в гигабайтах. Пример: `10`<br/>* `replicas` — количество реплик. Сервис работает в режиме одного primary-узла (Galera выключена),
значение `0` эквивалентно остановке кластера.<br/><br/>### Версия MariaDB (`mariadbConfiguration.version`)<br/><br/>Поддерживаются только две версии: `8.4.0` и `9.4.0`.<br/><br/>### Внешний доступ (`accessConfiguration`)<br/><br/>JSON-объект:<br/>*
`masterIpSpace` — имя ipSpace для выделения внешнего IP. Укажите `no-needed`, если внешний адрес не требуется.<br/>* `masterAccessList` — список IP/подсетей, которым разрешён доступ к порту 3306 снаружи.
Пустой список — доступ не ограничен на уровне firewall (в рамках выделенного ipSpace).<br/><br/>### Резервное копирование (`backupConfiguration`)<br/><br/>JSON-объект:<br/>* `s3Uid` — идентификатор S3-пользователя/квоты
для бэкапов.<br/>* `schedule` — cron-выражение расписания бэкапов. По умолчанию `0 0 * * *` (раз в сутки в полночь).<br/>* `retain` — время хранения бэкапов **в часах** (не в днях!). По умолчанию `7`
— то есть 7 часов. При суточном расписании этого значения обычно недостаточно, чтобы между двумя бэкапами всегда оставалась хотя бы одна валидная копия — рекомендуется указывать `retain` явно, с запасом
(например `720` = 30 суток).<br/><br/>> **Важно:** расписание и срок хранения бэкапов задаются **только при создании кластера**. Оператор MariaDB не позволяет изменить cron-расписание бэкапа после создания
(поле `spec.schedule.cron` неизменяемо на уровне admission-вебхука самого оператора) — поэтому эти параметры недоступны для изменения через `modify`.<br/><br/>> **Восстановление из бэкапа пока не реализовано
как самостоятельная операция платформы.** Бэкапы физически хранятся в S3-бакете инстанса (`technicals3backup-<instanceUid>`, префикс `mariadb/backups/`). Если нужно восстановить данные из бэкапа — бэкап
нужно **скачать из S3 и применить к базе вручную** (например через `mariabackup`/`mariadb-backup` restore или соответствующий инструмент).<br/><br/>### Автомасштабирование диска (`autoscaleConfiguration`)<br/><br/>JSON-объект:<br/>*
`enabled` — включить автоматическое расширение диска при исчерпании места.<br/>* `quota` — максимальный размер диска, до которого разрешено автоматическое расширение (не может быть меньше `clusterConfiguration.disk`).<br/>*
`percent`, `schedule` — параметры триггера автомасштабирования.<br/><br/>---<br/><br/>## 3. Параметры модификации кластера<br/><br/>Все параметры модификации, кроме версии, можно как увеличивать, так
и уменьшать (кроме диска — см. ниже) — система подставит текущие сохранённые значения, если их не менять.<br/><br/>### Конфигурация ресурсов (`clusterConfiguration`)<br/><br/>* `cpu`, `memory` — можно
менять в любую сторону.<br/>* `disk` — можно **только увеличивать**, уменьшение уже выделенного размера не поддерживается.<br/>* `replicas` — `0` останавливает кластер тем же образом, что и `suspend`
(альтернативный способ временной остановки через `modify`).<br/><br/>### Версия MariaDB (`mariadbConfiguration.version`)<br/><br/>Можно только повышать версию (`8.4.0 → 9.4.0`). Попытка понизить версию
будет отклонена с явной ошибкой ещё до применения изменений.<br/><br/>### Внешний доступ (`accessConfiguration`)<br/><br/>Можно включить внешний доступ (было `no-needed` → указали реальный `masterIpSpace`),
изменить список разрешённых IP, либо полностью отключить внешний доступ (`masterIpSpace: no-needed`) — в этом случае внешний Service, DNS-запись и правило firewall будут корректно откреплены и удалены.<br/><br/>###
Резервное копирование<br/><br/>Не передаётся при модификации — расписание и срок хранения бэкапов фиксируются на этапе `create` (см. п.2).<br/><br/>---<br/><br/>## 4. Параметры создания базы данных (`create_database`)<br/><br/>###
Имя базы данных (`dbName`)<br/><br/>Строка с именем новой базы. Не может совпадать с зарезервированными системными именами: `mysql`, `sys`, `information_schema`, `performance_schema`. База с таким же
именем не должна уже существовать в кластере.<br/><br/>---<br/><br/>## 5. Параметры удаления базы данных (`delete_database`)<br/><br/>### Имя базы данных (`dbName`)<br/><br/>База должна существовать в
кластере. Удаление будет отклонено, если к базе всё ещё привязаны пользователи — сначала нужно снять доступ (`delete_user`) у всех пользователей, ссылающихся на эту базу.<br/><br/>---<br/><br/>## 6. Параметры
создания пользователя (`create_user`)<br/><br/>### Имя пользователя (`username`)<br/><br/>Не может быть `root`, `healthcheck` или `mariadb.sys` — эти имена зарезервированы платформой/оператором.<br/><br/>###
Пароль (`password`)<br/><br/>Пароль для подключения от имени создаваемого пользователя.<br/><br/>### Базы данных (`dbName`)<br/><br/>JSON-массив вида `[{"dbname": "имя_базы"}]` — список баз, к которым
выдаётся полный доступ (`ALL PRIVILEGES`). Все перечисленные базы должны уже существовать в кластере (создать заранее через `create_database`).<br/><br/>### Разрешённые хосты (`accessHosts`)<br/><br/>MySQL
host-паттерн, с которого разрешено подключение под этим пользователем (например `%` — без ограничений, или конкретная подсеть). Определяет `user@host` в самой MariaDB — если указать слишком узкое значение,
подключение снаружи ожидаемого диапазона будет отклонено сервером на уровне аутентификации, даже если сеть/firewall пропускают трафик.<br/><br/>---<br/><br/>## 7. Параметры удаления пользователя (`delete_user`)<br/><br/>###
Имя пользователя (`username`)<br/><br/>Пользователь должен существовать в кластере. `root`/`healthcheck`/`mariadb.sys` удалить нельзя.<br/><br/>---<br/><br/>## 8. Выходные параметры<br/><br/>### internalConnect<br/><br/>Внутренний
адрес для подключения из сервисов, работающих в том же кластере Kubernetes:<br/>```json<br/>{<br/> "master": {<br/> "dns": "<clusterResourceName>.<namespace>.svc.<domain>",<br/> "ip": null,<br/> "port":
3306<br/> }<br/>}<br/>```<br/><br/>### externalConnect<br/><br/>Присутствует в выходных данных, **только если** был запрошен внешний доступ (`accessConfiguration.masterIpSpace` отличен от `no-needed`).
Если внешний доступ не запрошен или был отключён через `modify` — этого блока не будет вовсе (пустой блок в состояние не пишется):<br/>```json<br/>{<br/> "master": {<br/> "dns": "write.<namespace>.<domain>",<br/> "ip":
"<внешний IP>",<br/> "port": 3306<br/> }<br/>}<br/>```<br/><br/>---<br/><br/>## 9. Пример подключения<br/><br/>### 9.1 Изнутри кластера / того же namespace<br/><br/>```bash<br/>mariadb -h <internalConnect.dns>
-P 3306 -u <username> -p<br/>```<br/><br/>### 9.2 Через port-forward<br/><br/>```bash<br/>kubectl port-forward svc/<clusterResourceName> 3306:3306 -n <namespace><br/>```<br/><br/>**Важно:** после `port-forward`
подключайтесь именно по `127.0.0.1`, а не `localhost`:<br/><br/>```bash<br/>mariadb -h 127.0.0.1 -P 3306 -u <username> -p<br/>```<br/><br/>Клиент `mysql`/`mariadb` при указании `-h localhost` **игнорирует
TCP/порт** и всегда пытается подключиться через локальный unix-сокет (`/var/lib/mysql/mysql.sock`), которого на вашей машине нет — подключение упадёт с `ERROR 2002 (HY000): Can''t connect to local server
through socket`. `127.0.0.1` форсирует реальное TCP-подключение. Также не забывайте `-P` (порт) с заглавной буквы — строчная `-p` относится к паролю.<br/><br/>### 9.3 Снаружи (внешний адрес)<br/><br/>```bash<br/>mariadb
-h <externalConnect.ip или externalConnect.dns> -P 3306 -u <username> -p<br/>```<br/><br/>Доступно только если при создании/модификации был указан реальный `masterIpSpace` и подключающийся IP входит в
`accessConfiguration.masterAccessList` (или список пуст).<br/><br/>Где:<br/>* `<username>` — имя пользователя<br/>* `<password>` — пароль пользователя<br/><br/>---<br/><br/>## 10. Дополнительная информация<br/><br/>*
Расписание бэкапов (`backupConfiguration.schedule`/`retain`) задаётся один раз при создании и не может быть изменено позже — ограничение самого `mariadb-operator`, а не платформы.<br/>* Версию MariaDB
можно только повышать, откат на более старую версию не поддерживается.<br/>* Размер диска можно только увеличивать.<br/>* `suspend` реально останавливает под (масштабирование StatefulSet в 0 реплик),
а не просто помечает кластер как приостановленный — расход ресурсов CPU/RAM/диска (кроме уже занятого диска) прекращается.<br/>* При отключении внешнего доступа через `modify` (`masterIpSpace: no-needed`)
внешний Service, DNS-запись и правило firewall удаляются, а `externalConnect` пропадает из выходных данных.<br/>* Самостоятельного восстановления из бэкапа (операции `restore`) пока нет. Бэкапы лежат
в S3 инстанса — восстановление данных в существующий кластер выполняется вручную, скачиванием и применением бэкапа самим владельцем инстанса.'
lifecycle:
suspendOnDestroyDefault: true
adoptExistingOnCreateDefault: false
operations:
- svcOperationId: 138
operation: create
kind: instance
action: create
- svcOperationId: 242
operation: create_database
kind: subresource
action: create
- svcOperationId: 243
operation: create_user
kind: subresource
action: create
- svcOperationId: 139
operation: delete
kind: instance
action: delete
- svcOperationId: 248
operation: delete_database
kind: subresource
action: delete
- svcOperationId: 247
operation: delete_user
kind: subresource
action: delete
- svcOperationId: 142
operation: modify
kind: instance
action: modify
- svcOperationId: 287
operation: reconcile
kind: action
action: reconcile
- svcOperationId: 141
operation: resume
kind: instance
action: resume
- svcOperationId: 140
operation: suspend
kind: instance
action: suspend
stateOut:
databases: {}
users: {}
cfsParams:
- svcOperationCfsParamId: 877
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: 878
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'
disk:
dataType: integer > 0
defaultValue: '10'
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 879
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
- svcOperationCfsParamId: 880
svcOperationCfsParam: mariadbConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
version:
dataType: string
defaultValue: 9.4.0
isRequired: true
isModifiable: false
valueList:
- 8.4.0
- 9.4.0
- svcOperationCfsParamId: 881
svcOperationCfsParam: backupConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: false
dataDescriptor:
s3Uid:
dataType: uuid
defaultValue: ''
isRequired: true
isModifiable: false
retain:
dataType: integer > 0
defaultValue: '720'
isRequired: true
isModifiable: false
schedule:
dataType: string
defaultValue: 0 0 * * *
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 882
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: 734
svcOperationCfsParam: dbName
dataType: string
isRequired: true
defaultValue: db-wpm05duv
isModifiable: false
- svcOperationCfsParamId: 735
svcOperationCfsParam: username
dataType: string
isRequired: true
defaultValue: userhucihd6b
isModifiable: false
- svcOperationCfsParamId: 736
svcOperationCfsParam: password
dataType: string
isRequired: true
defaultValue: oe063z3u
isModifiable: false
- svcOperationCfsParamId: 737
svcOperationCfsParam: dbName
dataType: array-map-fixed
isRequired: true
defaultValue: '[{}]'
isModifiable: false
dataDescriptor:
dbname:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 738
svcOperationCfsParam: accessHosts
dataType: string
isRequired: true
defaultValue: '%'
isModifiable: false
- svcOperationCfsParamId: 456
svcOperationCfsParam: deleteS3Bucket
dataType: boolean
isRequired: true
defaultValue: 'true'
isModifiable: true
valueList:
- 'false'
- 'true'
- svcOperationCfsParamId: 745
svcOperationCfsParam: dbName
dataType: string
isRequired: true
defaultValue: ''
isModifiable: true
- svcOperationCfsParamId: 744
svcOperationCfsParam: username
dataType: string
isRequired: true
defaultValue: ''
isModifiable: true
- svcOperationCfsParamId: 883
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'
disk:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 884
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
- svcOperationCfsParamId: 885
svcOperationCfsParam: mariadbConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
version:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- 8.4.0
- 9.4.0
- svcOperationCfsParamId: 887
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'
cfsParamsByOp:
138:
- 877
- 878
- 879
- 880
- 881
- 882
242:
- 734
243:
- 735
- 736
- 737
- 738
139:
- 456
248:
- 745
247:
- 744
142:
- 883
- 884
- 885
- 887
287: []
141: []
140: []
stateParams:
startupConfiguration: '{"resourceRealm": "k8s-4-ext-nubes-ru"}'
clusterConfiguration: '{"cpu": 500, "memory": 512, "replicas": 1, "disk": 10}'
accessConfiguration: '{"masterIpSpace": "", "masterAccessList": "[]"}'
mariadbConfiguration: '{"version": "9.4.0"}'
backupConfiguration: '{"s3Uid": "", "retain": 720, "schedule": "0 0 * * *"}'
autoscaleConfiguration: '{"enabled": false, "schedule": 0, "quota": 100, "percent": 10}'