Резервное копирование хранилища etcd

В этом разделе описано, как осуществлять резервное копирование и восстановление из копии хранилища конфигураций etcd с помощью утилит etcdctl и etcdutl.

В разделе рассматривается работа с etcd при следующих условиях:

  • кластер развернут с помощью Kubespray;

  • установлен etcd версии 3.5.7 и выше;

  • хранилище etcd установлено как системный сервис и управляется с помощью утилиты systemctl.

Инструкция по установке представлена в репозитории разработчика etcd.

Резервное копирование etcd

Выполните следующие действия для каждого узла, на котором установлен сервис etcd:

  1. Подключитесь к кластеру.

  2. Подключитесь к терминалу узла, на котором установлен сервис etcd.

  3. Создайте резервную копию хранилища etcd, выполнив следующую команду:

    source /etc/etcd.env && ETCDCTL_KEY=$ETCDCTL_KEY ETCDCTL_CACERT=$ETCDCTL_CACERT ETCDCTL_CERT=$ETCDCTL_CERT ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:2379 snapshot save /var/backups/etcd-$(date '+%Y%m%d_%H%M%S')/snapshot.db
    Чтобы получить расширенный лог сообщений о ходе создания резервной копии, добавьте к команде выше опцию --debug=true.
  4. Вы можете удостовериться, что резервная копия создана успешно, с помощью команды:

    etcdutl snapshot status /var/backups/<etcd-date>/snapshot.db -w table

    Здесь:

    • <etcd-date> — название директории с резервной копией etcd, например, etcd-20260303_140322.

    Пример вывода команды
    +---------+----------+------------+------------+
    |  HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
    +---------+----------+------------+------------+
    | 7ef846e |   485261 |      11642 |      94 MB |
    +---------+----------+------------+------------+

    Номер ревизии (REVISION) увеличивается на 1 при каждой операции записи в etcd.

Восстановление etcd из резервной копии

Способ восстановления etcd из резервной копии зависит от версии:

  • Если версия etcd ниже 3.5.16, то восстановление выполняется с помощью утилиты etcdctl.

  • Если версия etcd 3.5.16 или выше, то восстановление выполняется с помощью утилиты etcdutl.

  • Через etcdctl

  • Через etcdutl

Чтобы восстановить etcd из резервной копии:

  1. Подключитесь к кластеру.

  2. Подключитесь к терминалу узла, на котором установлен сервис etcd.

  3. Выполните следующую команду:

    source /etc/etcd.env && ETCDCTL_KEY=$ETCDCTL_KEY ETCDCTL_CACERT=$ETCDCTL_CACERT ETCDCTL_CERT=$ETCDCTL_CERT ETCDCTL_API=3 etcdctl snapshot restore /var/backups/<etcd-date>/snapshot.db --data-dir=<new_dir>

    Здесь:

    • <etcd-date> — название директории с резервной копией etcd, например, etcd-20260303_140322.

    • <new_dir> — новый каталог данных etcd, например, /var/lib/etcd_restored/.

  4. Остановите сервис etcd, выполнив следующую команду:

    systemctl stop etcd.service
  5. В файле /etc/etcd.env измените значение переменной ETCD_DATA_DIR на путь, указанный в качестве значения <new_dir> на шаге 1.

  6. Запустите сервис etcd, выполнив следующую команду:

    systemctl start etcd.service
  7. Убедитесь, что сервис etcd корректно запустился, с помощью команды:

    systemctl status etcd
  8. При необходимости удалите каталог, в котором хранились данные etcd до восстановления, с помощью следующей команды:

    rm -rf <old_dir>

    Здесь:

    • <old_dir> — директория, в которой хранились данные etcd до восстановления, например, /var/lib/etcd/.

Для восстановления etcd из резервной копии в кластере Kubernetes следует использовать вариант revision bumps. При данном варианте контроллеры Kubernetes используют так называемые информеры (informers), которые работают как кэш. Восстановление etcd из резервной копии без использования revision bumps может привести к некорректному восстановлению кэшей и, как следствие, неопределенному поведению контроллеров.

Чтобы восстановить etcd из резервной копии:

  1. Подключитесь к кластеру.

  2. Подключитесь к терминалу узла, на котором установлен сервис etcd.

  3. Выполните следующую команду:

    etcdutl snapshot restore /var/backups/<etcd-date>/snapshot.db --bump-revision <n_bumps> --mark-compacted --data-dir=<new_dir>

    Здесь:

    • <etcd-date> — название директории с резервной копией etcd, например, etcd-20260303_140322.

    • <n_bumps> — 64-битное целое число, на которое следует увеличить REVISION. Его можно оценить, умножив среднее число операций записи в etcd в секунду на число секунд с момента создания резервной копии. Можно установить значение, большее оценки, меньшее — не рекомендуется.

      Например, если в etcd производится 100 операций записи в секунду, а резервная копия создана 24 часа назад, минимально допустимое значение n_bumps — 24 * 60 * 60 * 100 = 8 640 000.

    • <new_dir> — новый каталог данных etcd, например, /var/lib/etcd_restored/.

    Опция --mark-compacted отмечает предыдущие ревизии etcd как сжатые. Это позволяет удостовериться, что все процессы отслеживания etcd остановлены, и кэши информеров сделаны недействительными.

  4. Остановите сервис etcd, выполнив следующую команду:

    systemctl stop etcd.service
  5. В файле /etc/etcd.env измените значение переменной ETCD_DATA_DIR на путь, указанный в качестве значения <new_dir> на шаге 1.

  6. Запустите сервис etcd, выполнив следующую команду:

    systemctl start etcd.service
  7. Убедитесь, что сервис etcd корректно запустился, с помощью команды:

    systemctl status etcd
  8. При необходимости удалите каталог, в котором хранились данные etcd до восстановления, с помощью следующей команды:

    rm -rf <old_dir>

    Здесь:

    • <old_dir> — директория, в которой хранились данные etcd до восстановления, например, /var/lib/etcd/.

Была ли полезна эта страница?

Обратная связь