Deckhouse Stronghold поддерживает создание расписания для выполнения автоматических резервных копий хранилища секретов. Так как Stronghold хранит данные на диске в зашифрованном виде, то резервная копия тоже будет содержать только зашифрованные данные. Для получения доступа к данным нужно будет развернуть резервную копию в кластер Stronghold и провести процедуру распечатывания хранилища.

Поддерживается сохранение резервных копий на локальный диск в выбранную папку, или в S3-совместимое хранилище.

Управление настройками резервных копий и просмотр их статуса доступны через API, CLI и UI.

Создание/обновление конфигурации автоматического бэкапа

Метод Путь
POST /sys/storage/raft/snapshot-auto/config/:name

Для взаимодействия с данным методом API потребуются sudo права

Параметры

  • name (string: <required>) – Название конфигурации для изменения.

  • interval (integer or string: <required>) - Интервал времени между созданием снэпшотов. Это может быть либо целое число секунд, либо строка формата Go duration (например, 24h).

  • retain (integer: 3) - Количество снимков, которые будут храниться. При записи нового снимка, если общее количество снимков превышает это число, самые старые снимки будут удалены.

  • storage_type (immutable string: <required>) - Одно из значений local или aws-s3. Остальные параметры, описанные ниже, доступны только для выбранного storage_type и имеют соответствующий префикс. Параметр не доступен к редактированию после создания.

  • path_prefix (immutable string: <required>) - Для storage_type = local – каталог, в который будут записываться снимки. Завершающий символ / необязателен. Для storage_type = aws-s3 – это префикс, добавляемый перед именем объекта в формате пути path_prefix/file_prefix. Корневой симовол / игнорируется. Завершающий символ / необязателен. Параметр не доступен к редактированию после создания.

  • file_prefix (immutable string: "stronghold-snapshot") - Строка, с которой будет начинаться имя снэпшота. Для локального типа хранилища это префикс файла. Для облачного типа хранилища – префикс, добавляемый после path_prefix/. Параметр не доступен к редактированию после создания.

storage_type = "local"

  • local_max_space (integer: 0) - Для storage_type=local максимальное пространство в байтах, которое будет использоваться для всех снимков с заданным file_prefix в каталоге path_prefix. Попытки создания снэпшотов будут неудачны, если будет недостаточно места. Значение 0 (по умолчанию) отключает проверку занимаемого места.

storage_type = "aws-s3"

  • aws_s3_bucket (string: <required>) - Название S3 бакета для записи снэпшотов.
  • aws_s3_region (string) - Регион S3 бакета.
  • aws_access_key_id (string) - Идентификатор ключа для доступа к S3 бакету.
  • aws_secret_access_key (string) - Секретный ключ для доступа к S3 бакету.
  • aws_s3_endpoint (string) - Адрес сервиса S3 бакета.
  • aws_s3_disable_tls (boolean) - Отключение TLS для конечной точки S3. Этот параметр следует использовать только для тестирования, обычно в сочетании с aws_s3_endpoint.
  • aws_s3_ca_certificate (string) - Сертификат центра сертификации для конечной точки в формате PEM.

Примеры

Создание расписания автоматического резервного копирования на локальный диск

Следующий JSON файл local-snapshot.json описывает настройки для сохранения резервной копии на локальном диске по пути /stronghold/data/backups/ с именем файла main_stronghold_*.tar.gz, где вместо * будет указана дата создания резервной копии. Резервная копия будет сохраняться каждые 5 минут и общее количество файлов резервной копии не будет превышать 4.

{
    "interval":          "5m",
    "path_prefix":       "/stronghold/data/backups",
    "file_prefix":       "main_stronghold",
    "retain":            "4",
    "storage_type":      "local"
}

Перед созданием конфигурации убедитесь, что по пути, указанному в path_prefix, есть права на запись. Стандартная ошибка failed to create snapshot directory at destination указывает на отсутствие целевой директории или проблемы с её созданием.

В примере путь /stronghold/data/ – это путь внутри контейнера, и он смонтирован по пути /var/lib/deckhouse/stronghold/ на мастер нодах кластера DKP. Созданные снэпшоты можно найти и скачать с мастер нод по пути /var/lib/deckhouse/stronghold/backups/. При перезагрузке подов снэпшоты останутся неизменными.

Применяем конфигурацию

d8 stronghold write sys/storage/raft/snapshot-auto/config/my-local-snapshots @local-snapshot.json

Ответ:

Key    Value
---    -----
msg    successfully created config

Первая резервная копия будет создана сразу после применения конфигурации, последующие копии – через интервал, указанный в настройках.

Создание расписания автоматического резервного копирования на S3-совместимое хранилище

В случае, когда созданную резервную копию требуется разместить в S3-совместимом хранилище (в примере minio), в настройках указываем тип хранилища aws-s3 и необходимые данные для подключения к вашему хранилищу: название бакета, адрес хранилища, ID ключа доступа и секретный ключ доступа.

Пример конфигурационного JSON файла minio-snapshot.json:

{
    "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_access_key_id":     "<ACCESS_KEY>",
    "aws_secret_access_key": "<SECRET_ACCESS_KEY>"
}

Объект с резервной копией будет расположен по адресу minio.domain.ru/my_bucket/snapshots/stronghold_backup_*.tar.gz, где вместо * будет указана дата создания.

Перед созданием конфигурации убедитесь, что по адресу и пути, указанным в конфигурации, есть права на чтение и запись, и сам бакет существует.

Применяем конфигурацию

d8 stronghold write sys/storage/raft/snapshot-auto/config/my-remote-snapshots @minio-snapshot.json

Ответ:

Key    Value
---    -----
msg    successfully created config

Первая резервная копия будет создана сразу после применения конфигурации, последующие копии – через интервал, указанный в настройках.

Обновление

В файл обновления конфигурации local-snapshot-update.json в формате JSON пишем поля и значения, которые хотим поменять:

{
    "interval":          "3m",
    "retain":            "10"
}

Можно не указывать все поля, уже существующие поля не будут изменены.

Применяем обновление

d8 stronghold write sys/storage/raft/snapshot-auto/config/my-local-snapshots @local-snapshot-update.json

Ответ:

Key    Value
---    -----
msg    successfully updated config

Вывод списка существующих конфигураций автоматического бэкапа

Метод Путь
LIST /sys/storage/raft/snapshot-auto/config

Используется для получения списка названий всех существующих конфигураций автоматических снэпшотов.

Пример

d8 stronghold list sys/storage/raft/snapshot-auto/config

Ответ:

Keys
----
my-local-snapshots
my-remote-snapshots

Получение параметров конфигурации автоматического бэкапа

Метод Путь
GET /sys/storage/raft/snapshot-auto/config/:name

Пример

d8 stronghold read sys/storage/raft/snapshot-auto/config/my-remote-snapshots

Ответ:

Key                     Value
---                     -----
interval                180
path_prefix             snapshots
file_prefix             stronghold_backup
retain                  10
storage_type            aws-s3
aws_s3_bucket           my_bucket
aws_s3_disable_tls      false
aws_s3_endpoint         minio.domain.ru
aws_s3_region           n/a
aws_s3_ca_certificate   n/a

Для облачного типа хранилища значения полей: ID ключа доступа (aws_access_key_id) и секретного ключа доступа (aws_secret_access_key) не отображаются.

Удаление конфигурации автоматического бэкапа

Метод Путь
DELETE /sys/storage/raft/snapshot-auto/config/:name

Пример

d8 stronghold delete sys/storage/raft/snapshot-auto/config/my-remote-snapshots

Ответ:

Key    Value
---    -----
msg    successfully deleted config

Операция удаления конфигурации автоматического резервного копирования не затрагивает созданные резервные копии хранилища Stronghold. Их можно будет обнаружить по тому же адресу, который был указан в удаленной конфигурации.

Получение статуса работы автоматического бэкапа

Метод Путь
GET /sys/storage/raft/snapshot-auto/status/:name

Пример

d8 stronghold read sys/storage/raft/snapshot-auto/status/my-remote-snapshots

Ответ:

Key                    Value
---                    -----
consecutive_errors     0
last_snapshot_end      2025-01-31T15:24:14Z
last_snapshot_error    n/a
last_snapshot_start    2025-01-31T15:24:12Z
last_snapshot_url      s3://my_bucket/snapshots/stronghold_backup_2025-10-07T12:42:54Z.tar.gz
next_snapshot_start    2025-01-31T15:29:12Z
snapshot_start         2025-01-31T15:24:12Z
snapshot_url           s3://my_bucket/snapshots/stronghold_backup_2025-01-31T15:24:12Z.tar.gz

Значения полей:

  • consecutive_errors - Количество аккумулированных ошибок, с момента первой ошибки резервного копирования. Обнуляется после успешно завершенной процедуры резервного копирования.
  • last_snapshot_end - Время завершения последнего резервного копирования.
  • last_snapshot_error - Текст последней ошибки при выполнении резервного копирования (или n/a, если ошибок не было).
  • last_snapshot_start - Время начала последнего завершенного резервного копирования.
  • last_snapshot_url - URL расположения последнего успешно созданного снэпшота.
  • next_snapshot_start - Время следующего запланированного резервного копирования.
  • snapshot_start - Время начала текущего (выполняющегося) резервного копирования.
  • snapshot_url - URL расположения снэпшота текущего (выполняющегося) резервного копирования.