Резервное копирование 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 узла#
Для восстановления кластера воспользуйтесь утилитой Dactl:
./dactl restore etcd --snapshot-file path/to/snapshotDactl подключится к кластеру с помощью
KubeConfig, который находится по умолчанию в~/.kube/config. При необходимости изменить путь по умолчанию воспользуйтесь флагом--kubeconfig:./dactl restore etcd --kubeconfig /path/to/kube/config --snapshot-file path/to/snapshotДалее утилита применит переданный снимок для восстановления Etcd. Пример вывода логов:
[etcd][restore] Restoring ETCD of the Platform V DropApp cluster... [etcd][restore] Successfully restored ETCD of the Platform V DropApp cluster