465 lines
22 KiB
YAML
465 lines
22 KiB
YAML
name: nextcloud
|
||
service_id: 50
|
||
service_display_name: Nextcloud
|
||
service_short_name: nextcloud
|
||
service_man: '# Инструкция по развертыванию Nextcloud через платформу<br/><br/>## 1. Общая информация<br/><br/>Nextcloud — платформа для хранения и совместной работы с файлами. Разворачивается в K8s через
|
||
Helm-чарт `nextcloud/nextcloud`.<br/><br/>Сервис **не самодостаточен** — для создания необходимы заранее развёрнутые в той же ресурсной платформе:<br/><br/>* **PostgreSQL (k8s)** — база данных Nextcloud.
|
||
У СУБД должен быть выставлен параметр `sslRequired: false`.<br/>* **Redis (k8s)** — используется как memcache/locking backend.<br/><br/>Резервное копирование выполняется через **Velero** (бэкапятся под
|
||
и PVC с данными), а не штатным S3-бэкапом СУБД.<br/><br/>### Доступные операции с сервисом<br/><br/>* **create** — создание сервиса<br/>* **delete** — удаление сервиса<br/>* **suspend** —
|
||
остановка сервиса (масштабирование реплик в 0)<br/>* **resume** — запуск сервиса<br/>* **restart** — перезапуск (`kubectl rollout restart`)<br/>* **modify** — изменение настроек
|
||
сервиса<br/>* **reconcile** — служебная операция синхронизации версии (запускается платформой автоматически)<br/>* **create_backup** — создание резервной копии вручную (через Velero)<br/>* **recovery** —
|
||
восстановление из резервной копии в **новый** инстанс<br/><br/>> **Примечание:** операций работы с пользователями Nextcloud (`create_user`/`modify_user`/`delete_user`) на уровне платформы нет — пользователи
|
||
приложения администрируются внутри самого Nextcloud.<br/><br/>---<br/><br/>## 2. Параметры создания сервиса<br/><br/>### Платформа для развертывания<br/><br/>Ресурсная платформа (`resourceRealm`), в которой
|
||
будет развёрнут сервис. PostgreSQL и Redis, указанные ниже, обязаны находиться в той же ресурсной платформе.<br/><br/>### СУБД PostgreSQL (psqlUid)<br/><br/>UID инстанса PostgreSQL (k8s), в котором будет
|
||
создана база и пользователь `nextcloud`.<br/><br/>* У выбранной СУБД должна отсутствовать база `nextcloud` и пользователь `nextcloud`.<br/>* У СУБД обязан быть выключен `sslRequired` (`false`).<br/><br/>###
|
||
СУБД Redis (redisUid)<br/><br/>UID инстанса Redis (k8s), который будет использоваться как memcache/locking backend.<br/><br/>### Количество реплик<br/><br/>Количество реплик Nextcloud (`clusterConfiguration.replicas`).<br/><br/>###
|
||
Квота памяти пода (MB)<br/><br/>Объём памяти для пода Nextcloud в мегабайтах.<br/>Пример: `2048`<br/><br/>### Квота CPU пода (mCPU)<br/><br/>CPU-квота для пода Nextcloud в миликорах (1000 mCPU = 1 vCPU).<br/>Пример:
|
||
`1000`<br/><br/>### Размер диска для данных (GB)<br/><br/>Объём диска под данные Nextcloud (`/var/www/html/data`) в гигабайтах.<br/>Пример: `20`<br/><br/>### Домен<br/><br/>Домен, на котором будет доступен
|
||
Nextcloud (`accessConfiguration.domain`).<br/><br/>* Если указано **полное доменное имя** (содержит точку, например `cloud.company.ru`) — домен считается клиентским. Перед созданием клиент обязан сам
|
||
настроить DNS-запись, указывающую на адрес Ingress платформы, иначе создание завершится ошибкой.<br/>* Если указано **короткое имя** (без точки, например `mycloud`) — платформа сама создаёт DNS-запись
|
||
вида `<domain>.nextcloudk8s` и настраивает сертификат.<br/><br/>### Версия<br/><br/>Версия приложения Nextcloud (`appConfiguration.version`, поле `appVersion` Helm-чарта). По ней автоматически подбирается
|
||
последняя подходящая версия Helm-чарта.<br/><br/>> **Примечание:** список поддерживаемых версий и допустимые шаги обновления заданы в `pipelines/stages/functions/helm.groovy` (см. раздел 13).<br/><br/>###
|
||
Document Server<br/><br/>Параметр `appConfiguration.documentServer`. Если указать `collabora` — в кластер дополнительно разворачивается Collabora Online (совместное редактирование офисных документов),
|
||
доступный по пути `/collabora` на том же домене.<br/>Оставьте пустым, если Document Server не нужен.<br/><br/>### Уровень логирования<br/><br/>Параметр `appConfiguration.logLevel`. Одно из значений: `DEBUG`,
|
||
`INFO`, `WARN`, `ERROR`, `FATAL`, либо `NONE` — чтобы не переопределять логирование Nextcloud.<br/><br/>---<br/><br/>## 3. Параметры модификации сервиса<br/><br/>Изменению подлежат ресурсы, версия и часть
|
||
`appConfiguration`. Параметры `psqlUid`/`redisUid` менять после создания не рекомендуется.<br/><br/>### Количество реплик<br/><br/>См. раздел 2.<br/><br/>### Квота памяти пода (MB) / Квота CPU пода (mCPU)
|
||
/ Размер диска (GB)<br/><br/>См. раздел 2.<br/><br/>> **Примечание:** уменьшить уже выделенный размер диска нельзя.<br/><br/>### Версия<br/><br/>Обновление версии разрешено только **на один патч** либо
|
||
**на одну минорную версию вперёд** (с `patch=0`). Прыжок сразу через несколько минорных версий или через несколько мажорных версий запрещён — обновляться нужно последовательно.<br/><br/>> **Примечание:**
|
||
перед обновлением на новую minor/major-версию необходимо сначала выполнить `modify` на текущей версии, обновившись до последнего релиза этой версии (иначе операция завершится ошибкой с описанием, до какой
|
||
версии нужно обновиться сначала).<br/><br/>### Document Server / Уровень логирования<br/><br/>См. раздел 2.<br/><br/>---<br/><br/>## 4. Параметры удаления сервиса<br/><br/>Специальных параметров нет —
|
||
удаление сносит namespace целиком.<br/><br/>> **Примечание:** резервные копии, созданные через `create_backup`, хранятся в Velero отдельно от инстанса и **не удаляются** вместе с сервисом — операции `delete_backup`
|
||
для Nextcloud нет, копии нужно вычищать на стороне Velero отдельно.<br/><br/>---<br/><br/>## 5. Параметры создания бэкапа<br/><br/>Специальных пользовательских параметров нет — имя бэкапа генерируется
|
||
автоматически в формате `<дата>-<версия>-<namespace>`.<br/><br/>> **Примечание:** создать бэкап можно только если сервис предварительно приостановлен (`suspend`). Velero, в который создаётся бэкап, должен
|
||
быть развёрнут в той же ресурсной платформе, что и Nextcloud, и не может быть сменён на другой Velero-инстанс в рамках одного сервиса.<br/><br/>Бэкапится под с данными вместе с PVC/PV (файлы), метаданные
|
||
и БД PostgreSQL бэкапом не затрагиваются — версия схемы БД фиксируется отдельно (см. раздел 6).<br/><br/>---<br/><br/>## 6. Параметры восстановления из бэкапа (recovery)<br/><br/>В отличие от СУБД-сервисов,
|
||
`recovery` у Nextcloud **не восстанавливает данные в текущий инстанс**, а создаёт **новый** инстанс сервиса (аналог `create`), в который переносятся файлы из указанной резервной копии.<br/><br/>### Точка
|
||
восстановления (recoveryPoint)<br/><br/>Имя резервной копии Velero, из которой будет выполнено восстановление.<br/><br/>### Домен нового инстанса<br/><br/>Обязан отличаться от домена исходного (текущего)
|
||
инстанса — восстановление на тот же домен не поддерживается.<br/><br/>### СУБД PostgreSQL нового инстанса<br/><br/>Если версия Nextcloud в бэкапе отличается от текущей версии инстанса, для нового инстанса
|
||
обязательно нужно указать **другую** СУБД PostgreSQL (нельзя восстанавливать бэкап со старой схемой БД поверх БД с более новой схемой).<br/><br/>---<br/><br/>## 7. Выходные параметры<br/><br/>После успешного
|
||
создания сервиса платформа возвращает:<br/><br/>### connectionUrl<br/><br/>Адрес для входа в Nextcloud: `https://<домен>`.<br/><br/>### namespace<br/><br/>Namespace в K8s-кластере, в котором развёрнут
|
||
сервис.<br/><br/>### Учётные данные (Vault)<br/><br/>В Vault сохраняется пароль администратора (`adminPass`) под логином `admin`.<br/><br/>---<br/><br/>## 8. Пример подключения<br/><br/>Откройте `connectionUrl`
|
||
в браузере и авторизуйтесь:<br/><br/>* **Логин:** `admin`<br/>* **Пароль:** значение `adminPass` из блока «Учётные данные» в Vault<br/><br/>---<br/><br/>## 9. Дополнительная информация<br/><br/>### Зависимости<br/><br/>Nextcloud
|
||
нельзя создать без уже существующих в том же `resourceRealm` сервисов PostgreSQL (k8s, `sslRequired: false`) и Redis (k8s). При `delete` зависимые СУБД и Redis не трогаются — удаляется только сам Nextcloud.<br/><br/>###
|
||
suspend/resume<br/><br/>При `suspend` количество реплик Nextcloud, Collabora и exporter''а метрик принудительно выставляется в `0` через `helm upgrade` (реальное масштабирование, а не просто пауза cron).
|
||
При `resume` реплики возвращаются к значению из `clusterConfiguration.replicas`.<br/><br/>### Collabora<br/><br/>Собирается из отдельного `image.repository: nexus-sa.tst.nubes.ru/collabora/code` и включается
|
||
только при `appConfiguration.documentServer == ''collabora''`. Доступен на том же домене и том же TLS-сертификате, что и сам Nextcloud, по пути `/collabora`.<br/><br/>### Бэкап/восстановление через Velero<br/><br/>Бэкап/восстановление
|
||
файлов идёт через Velero с селектором `backup=<serviceName>-velero-backup` и включает под, PVC и PV — то есть непосредственно файлы `/var/www/html/data`. Восстановление БД в новый инстанс выполняется
|
||
штатным механизмом `create` с параметром `instanceUidFrom`, который проставляет `recovery`-джоба автоматически.<br/>'
|
||
lifecycle:
|
||
suspendOnDestroyDefault: true
|
||
adoptExistingOnCreateDefault: false
|
||
operations:
|
||
- svcOperationId: 16
|
||
operation: create
|
||
kind: instance
|
||
action: create
|
||
- svcOperationId: 404
|
||
operation: create_backup
|
||
kind: subresource
|
||
action: create
|
||
- svcOperationId: 17
|
||
operation: delete
|
||
kind: instance
|
||
action: delete
|
||
- svcOperationId: 67
|
||
operation: modify
|
||
kind: instance
|
||
action: modify
|
||
- svcOperationId: 390
|
||
operation: reconcile
|
||
kind: action
|
||
action: reconcile
|
||
- svcOperationId: 406
|
||
operation: recovery
|
||
kind: action
|
||
action: recovery
|
||
- svcOperationId: 66
|
||
operation: restart
|
||
kind: action
|
||
action: restart
|
||
- svcOperationId: 129
|
||
operation: resume
|
||
kind: instance
|
||
action: resume
|
||
- svcOperationId: 128
|
||
operation: suspend
|
||
kind: instance
|
||
action: suspend
|
||
stateOut:
|
||
backups: {}
|
||
cfsParams:
|
||
- svcOperationCfsParamId: 1055
|
||
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
|
||
psqlEnabled:
|
||
dataType: boolean
|
||
defaultValue: 'true'
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- 'true'
|
||
redisEnabled:
|
||
dataType: boolean
|
||
defaultValue: 'true'
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- 'true'
|
||
psqlUid:
|
||
dataType: uuid
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
redisUid:
|
||
dataType: uuid
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
- svcOperationCfsParamId: 1056
|
||
svcOperationCfsParam: clusterConfiguration
|
||
dataType: map-fixed
|
||
isRequired: true
|
||
defaultValue: ''
|
||
isModifiable: true
|
||
dataDescriptor:
|
||
cpu:
|
||
dataType: integer > 0
|
||
defaultValue: '1000'
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- '1000'
|
||
- '2000'
|
||
- '3000'
|
||
- '4000'
|
||
memory:
|
||
dataType: integer > 0
|
||
defaultValue: '1024'
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- '1024'
|
||
- '2048'
|
||
- '3072'
|
||
- '4096'
|
||
- '5120'
|
||
- '6144'
|
||
- '7168'
|
||
- '8192'
|
||
replicas:
|
||
dataType: integer > 0
|
||
defaultValue: '1'
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- '1'
|
||
- '2'
|
||
disk:
|
||
dataType: integer > 0
|
||
defaultValue: '10'
|
||
isRequired: true
|
||
isModifiable: false
|
||
- svcOperationCfsParamId: 1057
|
||
svcOperationCfsParam: accessConfiguration
|
||
dataType: map-fixed
|
||
isRequired: true
|
||
defaultValue: ''
|
||
isModifiable: false
|
||
dataDescriptor:
|
||
domain:
|
||
dataType: string
|
||
defaultValue: nextcloud-v9jbyta8
|
||
isRequired: true
|
||
isModifiable: false
|
||
- svcOperationCfsParamId: 1058
|
||
svcOperationCfsParam: appConfiguration
|
||
dataType: map-fixed
|
||
isRequired: true
|
||
defaultValue: ''
|
||
isModifiable: true
|
||
dataDescriptor:
|
||
version:
|
||
dataType: string
|
||
defaultValue: 33.0.4
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- 33.0.4
|
||
documentServer:
|
||
dataType: string
|
||
defaultValue: collabora
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- collabora
|
||
logLevel:
|
||
dataType: string
|
||
defaultValue: INFO
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- DEBUG
|
||
- INFO
|
||
- WARN
|
||
- ERROR
|
||
- FATAL
|
||
- NONE
|
||
- svcOperationCfsParamId: 1077
|
||
svcOperationCfsParam: startupConfiguration
|
||
dataType: map-fixed
|
||
isRequired: true
|
||
defaultValue: ''
|
||
isModifiable: false
|
||
dataDescriptor:
|
||
veleroUid:
|
||
dataType: string
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
- svcOperationCfsParamId: 1059
|
||
svcOperationCfsParam: clusterConfiguration
|
||
dataType: map-fixed
|
||
isRequired: true
|
||
defaultValue: ''
|
||
isModifiable: true
|
||
dataDescriptor:
|
||
cpu:
|
||
dataType: integer > 0
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- '1000'
|
||
- '2000'
|
||
- '3000'
|
||
- '4000'
|
||
memory:
|
||
dataType: integer > 0
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- '1024'
|
||
- '2048'
|
||
- '3072'
|
||
- '4096'
|
||
- '5120'
|
||
- '6144'
|
||
- '7168'
|
||
- '8192'
|
||
replicas:
|
||
dataType: integer > 0
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- '1'
|
||
- '2'
|
||
disk:
|
||
dataType: integer > 0
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
- svcOperationCfsParamId: 1060
|
||
svcOperationCfsParam: appConfiguration
|
||
dataType: map-fixed
|
||
isRequired: true
|
||
defaultValue: ''
|
||
isModifiable: true
|
||
dataDescriptor:
|
||
version:
|
||
dataType: string
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- 33.0.4
|
||
documentServer:
|
||
dataType: string
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- collabora
|
||
logLevel:
|
||
dataType: string
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- DEBUG
|
||
- INFO
|
||
- WARN
|
||
- ERROR
|
||
- FATAL
|
||
- NONE
|
||
- svcOperationCfsParamId: 1078
|
||
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
|
||
psqlEnabled:
|
||
dataType: boolean
|
||
defaultValue: 'true'
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- 'true'
|
||
redisEnabled:
|
||
dataType: boolean
|
||
defaultValue: 'true'
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- 'true'
|
||
recoveryPoint:
|
||
dataType: string
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
psqlUid:
|
||
dataType: uuid
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
redisUid:
|
||
dataType: uuid
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
veleroUid:
|
||
dataType: string
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
- svcOperationCfsParamId: 1079
|
||
svcOperationCfsParam: clusterConfiguration
|
||
dataType: map-fixed
|
||
isRequired: true
|
||
defaultValue: ''
|
||
isModifiable: true
|
||
dataDescriptor:
|
||
cpu:
|
||
dataType: integer > 0
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- '1000'
|
||
- '2000'
|
||
- '3000'
|
||
- '4000'
|
||
memory:
|
||
dataType: integer > 0
|
||
defaultValue: ''
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- '1024'
|
||
- '2048'
|
||
- '3072'
|
||
- '4096'
|
||
- '5120'
|
||
- '6144'
|
||
- '7168'
|
||
- '8192'
|
||
replicas:
|
||
dataType: integer > 0
|
||
defaultValue: 1,2
|
||
isRequired: true
|
||
isModifiable: false
|
||
disk:
|
||
dataType: integer > 0
|
||
defaultValue: '10'
|
||
isRequired: true
|
||
isModifiable: false
|
||
- svcOperationCfsParamId: 1080
|
||
svcOperationCfsParam: accessConfiguration
|
||
dataType: map-fixed
|
||
isRequired: true
|
||
defaultValue: ''
|
||
isModifiable: true
|
||
dataDescriptor:
|
||
domain:
|
||
dataType: string
|
||
defaultValue: nextcloud-zdaml6i9
|
||
isRequired: true
|
||
isModifiable: false
|
||
- svcOperationCfsParamId: 1081
|
||
svcOperationCfsParam: appConfiguration
|
||
dataType: map-fixed
|
||
isRequired: true
|
||
defaultValue: ''
|
||
isModifiable: true
|
||
dataDescriptor:
|
||
documentServer:
|
||
dataType: string
|
||
defaultValue: collabora
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- collabora
|
||
logLevel:
|
||
dataType: string
|
||
defaultValue: NONE
|
||
isRequired: true
|
||
isModifiable: false
|
||
valueList:
|
||
- DEBUG
|
||
- INFO
|
||
- WARN
|
||
- ERROR
|
||
- FATAL
|
||
- NONE
|
||
version:
|
||
dataType: string
|
||
defaultValue: ''
|
||
isRequired: false
|
||
isModifiable: false
|
||
cfsParamsByOp:
|
||
16:
|
||
- 1055
|
||
- 1056
|
||
- 1057
|
||
- 1058
|
||
404:
|
||
- 1077
|
||
17: []
|
||
67:
|
||
- 1059
|
||
- 1060
|
||
390: []
|
||
406:
|
||
- 1078
|
||
- 1079
|
||
- 1080
|
||
- 1081
|
||
66: []
|
||
129: []
|
||
128: []
|
||
stateParams:
|
||
startupConfiguration: '{"resourceRealm": "k8s-4-ext-nubes-ru", "psqlEnabled": true, "redisEnabled": true, "psqlUid": "", "redisUid": ""}'
|
||
clusterConfiguration: '{"cpu": 1000, "memory": 1024, "replicas": 1, "disk": 10}'
|
||
accessConfiguration: '{"domain": "nextcloud-v9jbyta8"}'
|
||
appConfiguration: '{"version": "33.0.4", "documentServer": "collabora", "logLevel": "INFO"}'
|