Резервное копирование Etcd и восстановление из снимка#

Описание#

Etcd — это легковесное, распределенное, согласованное хранилище формата «ключ-значение». Оно предназначено для надежного хранения критически важных данных о состоянии распределенных систем.

Etcd использует протокол Raft для обеспечения согласованности и отказоустойчивости между узлами кластера. В кластере Platform V DropApp в компоненте Kubernetes Etcd играет роль основного хранилища данных. Он хранит всю информацию о состоянии кластера: список узлов, pod, сервисов, политик безопасности, секретов, конфигураций и т.д. Без Etcd Kubernetes не может работать корректно.

Контекст использования#

Поскольку Etcd содержит всю информацию о состоянии кластера Kubernetes, его повреждение или потеря могут привести к полной неработоспособности кластера, даже если остальные инструменты (например, Kubelet, Kube-scheduler) работают корректно.

Предотвращение потери данных#

Возможные сценарии неработоспособности:

Причина потери данных

Описание

Аварийное отключение узла

Неожиданный сбой диска или питания

Человеческий фактор

Непреднамеренное удаление данных через API или CLI

Логические ошибки

Некорректные обновления состояния или изменение данных

Удаление кластера

В случае cloud-провайдера — полное удаление инфраструктуры

Резервная копия позволяет восстановить кластер до определенного состояния в прошлом, сохранив все данные о конфигурации и состоянии.

Миграция кластеров#

Резервное копирование можно использовать для переноса данных между кластерами, например, при тестировании или пересборке кластера.

Соответствие политикам#

Регулярное резервное копирование помогает соответствовать требованиям Disaster Recovery (DR) и Business Continuity Planning (BCP).

Создание снимка#

Для создания снимка воспользуйтесь утилитой Dactl:

./dactl backup etcd

В этом случае Dactl подключится к кластеру, для которого по умолчанию используется kubeconfig, находящийся по адресу ~/.kube/config. Если kubeconfig расположен в другом месте, укажите путь с помощью флага --kubeconfig:

./dactl backup etcd --kubeconfig /path/to/kube/config

Пример лога:

[backup][etcd] Backing up ETCD of the Platform V DropApp cluster...
[backup][etcd] Connected to cluster 'dev-cluster', performing back up...
[backup][etcd] Done! Backup file has been saved to /home/user/.dropapp/dev-cluster/etcd/etcd-backup-20250625091038.db

Где dev-cluster - это пример имени кластера Platform V DropApp.

После выполнения команды из файла etcd-backup-20250625091038.db можно восстановить кластер.

Восстановление из снимка#

Есть несколько способов восстановления из снимка:

  • восстановление текущего кластера:

    • из одного control plane узла;

    • из более чем одного control plane узла (высокодоступный кластер);

    • с обновленными сертификатами.

  • перенос Etcd в другой кластер.

Текущий кластер из одного control plane узла#

  1. Для восстановления кластера воспользуйтесь утилитой Dactl:

    ./dactl restore etcd --snapshot-file path/to/snapshot
    
  2. Dactl подключится к кластеру с помощью KubeConfig, который находится по умолчанию в ~/.kube/config. При необходимости изменить путь по умолчанию воспользуйтесь флагом --kubeconfig:

    ./dactl restore etcd --kubeconfig /path/to/kube/config --snapshot-file path/to/snapshot
    
  3. Далее утилита применит переданный снимок для восстановления Etcd. Пример вывода логов:

    [etcd][restore] Restoring ETCD of the Platform V DropApp cluster...
    [etcd][restore] Successfully restored ETCD of the Platform V DropApp cluster