Автоматические снимки позволяют Stronghold по расписанию создавать резервные копии встроенного Raft-хранилища и сохранять их на локальный диск или в S3-совместимое объектное хранилище.
Автоматические снимки доступны только при использовании интегрированного Raft-хранилища. Для etcd, PostgreSQL и других внешних бэкендов нужно настраивать резервное копирование средствами самого хранилища.
Автоматические снимки подходят для регулярного резервного копирования без ручного запуска команд. Они особенно полезны для production-кластеров, где важно иметь повторяемую политику хранения и выносить резервные копии за пределы самого кластера.
Особенности использования автоматических снимков:
- можно создать несколько именованных конфигураций снимков;
- каждая конфигурация определяет интервал запуска, политику хранения и тип хранилища;
- поддерживаются типы хранилища
localиaws-s3; - для production-сред используйте внешнее объектное хранилище, а не локальное: активный узел кластера может меняться, а резервные копии нужно хранить отдельно от защищаемой системы.
Имена снимков формируются в формате <file_prefix>-<N>.snap, где <N> — время создания в наносекундах Unix. Очистка по правилу retain учитывает только файлы или объекты с таким форматом имени в настроенной директории или префиксе. Две конфигурации одного типа хранилища не могут использовать одно и то же место назначения (path_prefix и file_prefix; для aws-s3 также тот же бакет и регион).
Каждая конфигурация выполняется отдельной задачей. После создания или изменения конфигурации её задача перезапускается: если сохранённого статуса ещё нет, первый снимок создаётся через одну десятую от interval (но не более чем через 10 минут); иначе — когда с начала последнего снимка пройдёт interval. Последующие снимки создаются через interval после завершения предыдущего. После неудачного снимка следующая попытка выполняется с экспоненциальной задержкой (начиная с 1 минуты, удваивая её, но не более interval). Изменение конфигурации сбрасывает consecutive_errors.
Создание или обновление конфигурации
Чтобы создать или обновить конфигурацию автоматических снимков, используйте эндпоинт:
| Метод | Путь |
|---|---|
POST | /sys/storage/raft/snapshot-auto/config/:name |
Для работы с эндпоинтом требуются права sudo. Запрос заменяет конфигурацию целиком: частичного обновления нет, поэтому всегда передавайте все обязательные параметры, включая storage_type.
Основные параметры
| Параметр | Тип | Обязательный | Значение по умолчанию | Описание |
|---|---|---|---|---|
name | Строка | Да | — | Имя конфигурации, которую нужно создать или обновить |
interval | Целое число или строка | Нет | 1h | Интервал между созданием резервных копий. Можно указывать в секундах или в формате Go duration, например 24h, 1h30m. Допускается значение в днях, например 1d; для комбинирования дней с меньшими единицами используйте эквивалентные часы (например, 25h30m вместо 1d1h30m). Минимальное значение — 1s |
retain | Целое число | Нет | 1 | Сколько резервных копий хранить. Очистка запускается до и после создания каждого снимка. При превышении лимита самые старые копии удаляются. Значение 0 отключает удаление старых снимков. Отрицательные значения недопустимы |
storage_type | Строка | Да | — | Тип хранилища: local или aws-s3 |
path_prefix | Строка | Да для local | — | Для local это директория хранения снимков (значение / недопустимо). Для aws-s3 это префикс объекта в бакете; начальный / игнорируется |
file_prefix | Строка | Нет | vault-snapshot | Префикс имени файла или объекта. Не должен содержать / |
Дополнительные параметры для local
| Параметр | Тип | Обязательный | Значение по умолчанию | Описание |
|---|---|---|---|---|
local_max_space | Целое число | Да | — | Максимальный объём в байтах, который можно занять резервными копиями с указанным file_prefix в директории path_prefix. Значение 0 отключает проверку |
Дополнительные параметры для aws-s3
| Параметр | Тип | Обязательный | Значение по умолчанию | Описание |
|---|---|---|---|---|
aws_s3_bucket | Строка | Да | — | Имя бакета для хранения резервных копий |
aws_s3_region | Строка | Да | — | Регион бакета |
aws_access_key_id | Строка | Нет | — | Идентификатор ключа доступа к бакету |
aws_secret_access_key | Строка | Нет | — | Секретный ключ доступа к бакету |
aws_session_token | Строка | Нет | — | Токен сессии для временных учётных данных AWS |
aws_s3_endpoint | Строка | Нет | — | Эндпоинт S3-сервиса |
aws_s3_disable_tls | Булевый | Нет | false | Отключает TLS для S3-эндпоинта. Используйте только для тестирования |
aws_s3_ca_certificate | Строка | Нет | — | CA-сертификат для S3-эндпоинта в PEM-формате |
aws_s3_server_side_encryption | Булевый | Нет | false | Шифрует объекты в бакете алгоритмом AES256 (SSE-S3). Нельзя использовать вместе с aws_s3_enable_kms |
aws_s3_enable_kms | Булевый | Нет | false | Шифрует объекты в бакете с помощью AWS KMS. Нельзя использовать вместе с aws_s3_server_side_encryption |
aws_s3_kms_key | Строка | Нет | — | Имя используемого ключа KMS. Требует aws_s3_enable_kms=true |
Примеры конфигурации
Локальный диск
Следующий файл local-snapshot.json создаёт конфигурацию, которая сохраняет снимок каждые 5 минут в директорию /stronghold/data/backups, хранит 4 копии, ограничивает занимаемое снимками место 1 ГиБ и использует префикс main_stronghold:
{
"interval": "5m",
"path_prefix": "/stronghold/data/backups",
"file_prefix": "main_stronghold",
"retain": "4",
"storage_type": "local",
"local_max_space": 1073741824
}Если директории из path_prefix не существует, Stronghold пытается создать её (с правами 0700) при создании снимка. Убедитесь, что у процесса Stronghold есть права на запись в родительскую директорию; при ошибке создания директории в last_snapshot_error будет сообщение failed to create ....
Примените конфигурацию из файла local-snapshot.json следующей командой:
- Stronghold в DP
- Stronghold в Linux
d8 stronghold write sys/storage/raft/snapshot-auto/config/my-local-snapshots @local-snapshot.jsonstronghold write sys/storage/raft/snapshot-auto/config/my-local-snapshots @local-snapshot.jsonВ примере путь /stronghold/data/ — это путь внутри контейнера, и по умолчанию он смонтирован по пути /var/lib/deckhouse/stronghold/ на master-узлах кластера DP. Созданные снимки можно найти и скачать с master-узлов по пути /var/lib/deckhouse/stronghold/backups/. При перезагрузке подов снимки останутся неизменными.
S3-совместимое хранилище
Следующий файл minio-snapshot.json сохраняет снимки в S3-совместимое хранилище:
{
"interval": "3m",
"path_prefix": "snapshots",
"file_prefix": "stronghold_backup",
"retain": "15",
"storage_type": "aws-s3",
"aws_s3_bucket": "my_bucket",
"aws_s3_endpoint": "minio.domain.ru",
"aws_s3_region": "us-east-1",
"aws_access_key_id": "<ACCESS_KEY>",
"aws_secret_access_key": "<SECRET_ACCESS_KEY>"
}Перед применением конфигурации убедитесь, что бакет уже существует, а указанные учётные данные имеют права на чтение и запись.
Примените конфигурацию из файла minio-snapshot.json следующей командой:
- Stronghold в DP
- Stronghold в Linux
d8 stronghold write sys/storage/raft/snapshot-auto/config/my-remote-snapshots @minio-snapshot.jsonstronghold write sys/storage/raft/snapshot-auto/config/my-remote-snapshots @minio-snapshot.jsonОбновление существующей конфигурации
Конфигурация заменяется целиком, поэтому для изменения части параметров передайте полный документ с новыми значениями (включая storage_type и обязательные параметры выбранного типа хранилища):
{
"interval": "3m",
"path_prefix": "/stronghold/data/backups",
"file_prefix": "main_stronghold",
"retain": "10",
"storage_type": "local",
"local_max_space": 1073741824
}После любого успешного обновления задача этой конфигурации перезапускается, а расписание пересчитывается.
Примените обновлённую конфигурацию из файла local-snapshot-update.json следующей командой:
- Stronghold в DP
- Stronghold в Linux
d8 stronghold write sys/storage/raft/snapshot-auto/config/my-local-snapshots @local-snapshot-update.jsonstronghold write sys/storage/raft/snapshot-auto/config/my-local-snapshots @local-snapshot-update.jsonПросмотр списка конфигураций
Чтобы получить список конфигураций автоматических снимков, используйте эндпоинт:
| Метод | Путь |
|---|---|
LIST | /sys/storage/raft/snapshot-auto/config |
Пример команды:
- Stronghold в DP
- Stronghold в Linux
d8 stronghold list sys/storage/raft/snapshot-auto/configstronghold list sys/storage/raft/snapshot-auto/configПолучение параметров конфигурации
Чтобы получить параметры конфигурации автоматических снимков, используйте эндпоинт:
| Метод | Путь |
|---|---|
GET | /sys/storage/raft/snapshot-auto/config/:name |
Пример команды:
- Stronghold в DP
- Stronghold в Linux
d8 stronghold read sys/storage/raft/snapshot-auto/config/my-remote-snapshotsstronghold read sys/storage/raft/snapshot-auto/config/my-remote-snapshotsДля aws-s3 ответ содержит aws_access_key_id и aws_secret_access_key в открытом виде, поэтому ограничьте доступ к этому эндпоинту.
Удаление конфигурации
Чтобы удалить конфигурацию автоматических снимков, используйте эндпоинт:
| Метод | Путь |
|---|---|
DELETE | /sys/storage/raft/snapshot-auto/config/:name |
Пример команды:
- Stronghold в DP
- Stronghold в Linux
d8 stronghold delete sys/storage/raft/snapshot-auto/config/my-remote-snapshotsstronghold delete sys/storage/raft/snapshot-auto/config/my-remote-snapshotsУдаление конфигурации автоматического резервного копирования не удаляет уже созданные файлы снимков из локального или объектного хранилища.
Получение статуса
Чтобы получить статус автоматических снимков, используйте эндпоинт:
| Метод | Путь |
|---|---|
GET | /sys/storage/raft/snapshot-auto/status/:name |
Пример команды:
- Stronghold в DP
- Stronghold в Linux
d8 stronghold read sys/storage/raft/snapshot-auto/status/my-remote-snapshotsstronghold read sys/storage/raft/snapshot-auto/status/my-remote-snapshotsКлючевые поля статуса:
consecutive_errors— количество идущих подряд ошибок резервного копирования; обнуляется после успешно завершённой процедуры резервного копирования;last_snapshot_end— время завершения создания последнего успешного снимка;last_snapshot_error— текст последней ошибки при выполнении снимка;last_snapshot_start— время начала создания последнего снимка;last_snapshot_url— адрес последнего успешно созданного снимка;next_snapshot_start— время следующего запуска запланированного снимка;snapshot_start— время начала текущего создаваемого снимка;snapshot_url— адрес текущего создаваемого снимка.