430 lines
23 KiB
YAML
430 lines
23 KiB
YAML
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}'
|