Резервное копирование постоянных томов в хранилище Кибер Бэкап#
Резервное копирование
Резервное копирование постоянного тома (PersistentVolume) в хранилище Кибер Бэкап выполняется следующим образом:
Создается моментальный снимок исходного тома (VolumeSnapshotContent).
На основе моментального снимка создается временный том в блочном режиме или в режиме файловой системы (при наличии аннотации
cyberprotect.ru/convert-to-block-mode=falseвVolumeSnapshotClass).В служебном пространстве имён
cyberprotectсоздается временный под (Pod) с сервером NBD/NFS на основе Docker-образаk8s-backup-and-restore, к которому подключен временный том.Создается сервис (Service) типа NodePort, посредством которого агент для Kubernetes может получить данные временного тома. В случае недоступности сервиса агент использует механизм port forwarding.
Агент для Kubernetes получает данные временного тома, создается резервная копия тома в хранилище Кибер Бэкап.
По завершении создания резервной копии сервис, временные под и том удаляются. Моментальный снимок тома удаляется при использовании режима хранения моментальных снимков тома В хранилище Кибер Бэкап либо оставляется в кластере при использовании режима Комбинированное.
Восстановление из резервной копии
Восстановление тома из размещенной в хранилище Кибер Бэкап резервной копии происходит следующим образом:
Останавливаются использующие восстанавливаемый том приложения (число реплик устанавливается равным нулю или удаляются поды).
В служебном пространстве имён
cyberprotectсоздаются новый том и временный под (Pod) с сервером NFS; при этом старый том удаляется, если его имя совпадает с именем нового тома.Создается сервис типа NodePort, посредством которого агент для Kubernetes может записать данные из резервной копии на новый том. В случае недоступности сервиса агент использует механизм port forwarding.
Агент для Kubernetes монтирует папку NFS и записывает данные из резервной копии на новый том.
Сервис и временный под (Pod) удаляются. Объект PersistentVolumeClaim тома переносится в целевое пространство имён.
Новый том подключается к требуемым подам, восстанавливается исходное число реплик приложений.
Требования
Для создания моментальных снимков томов в кластере Kubernetes должен быть установлен CSI-драйвер с поддержкой функции Snapshot.
Для резервного копирования томов в хранилище Кибер Бэкап CSI-драйвер должен поддерживать функцию Raw Block. Если ваш драйвер её не поддерживает, то следует добавить аннотацию в соответствующие ему объекты VolumeSnapshotClass:
kubectl annotate volumesnapshotclass <volume_snapshot_class_name> cyberprotect.ru/convert-to-block-mode=false
Список CSI-драйверов и сведения о поддерживаемых ими функциях см. в документации разработчика Kubernetes.
Из кластера должен быть доступен Docker-репозиторий, из которого можно получить Docker-образ
k8s-backup-and-restore. По умолчанию используется публичный Docker-репозиторий компании Киберпротектregistry.cyberprotect.ru/registry.Сервисная учетная запись
cyberprotectдолжна обладать правами на запуск пода в привилегированном режиме в целевом пространстве имен.
Настройка доступа в Docker-репозиторий в закрытой среде
При отсутствии доступа в Docker-репозиторий по умолчанию (например, если Кибер Бэкап используется в среде без доступа в Интернет) можно загрузить из него Docker-образ k8s-backup-and-restore и разместить его в Docker-репозитории, который доступен в пределах закрытой среды. Например:
На машине, на которой есть доступ к Docker-репозиторию по умолчанию и на которой установлен Docker, получите Docker-образ и сохраните его в виде tar-архива:
CYBERPROTECT_REGISTRY=registry.cyberprotect.ru/registry IMAGE_NAME=k8s-backup-and-restore IMAGE_TAG=1.0 docker pull ${CYBERPROTECT_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} docker save -o ${IMAGE_NAME}_${IMAGE_TAG}.tar ${CYBERPROTECT_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}Разместите tar-архив на машине, на которой есть доступ к внутреннему Docker-репозиторию и на которой установлен Docker.
Отправьте Docker-образ во внутренний Docker-репозиторий:
CYBERPROTECT_REGISTRY=registry.cyberprotect.ru/registry IMAGE_NAME=k8s-backup-and-restore IMAGE_TAG=1.0 INTERNAL_REGISTRY=<YOUR_INTERNAL_DOCKER_REGISTRY> INTERNAL_IMAGE_NAME=${IMAGE_NAME} INTERNAL_IMAGE_TAG=${IMAGE_TAG} docker image load -i ${IMAGE_NAME}_${IMAGE_TAG}.tar docker tag ${CYBERPROTECT_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} ${INTERNAL_REGISTRY}/${INTERNAL_IMAGE_NAME}:${INTERNAL_IMAGE_TAG} docker push ${INTERNAL_REGISTRY}/${INTERNAL_IMAGE_NAME}:${INTERNAL_IMAGE_TAG}Укажите новое имя Docker-образа в конфигурационном файле агента для Kubernetes
/opt/acronis/etc/dsp.k8s/k8s-agent.jsonв полеcluster_config.docker_image.В конфигурационном файле агента для Kubernetes укажите учетные данные для доступа во внутренний Docker-репозиторий, использовав один из следующих способов:
Base64-строка с учетными данными для доступа во внутренний Docker-репозиторий
Получите строку с учетными данными в формате Base64, выполнив команду:
kubectl create secret docker-registry regcred \ --docker-server=<YOUR_INTERNAL_DOCKER_REGISTRY> \ --docker-username=<YOUR_DOCKER_USER> \ --docker-password=<YOUR_DOCKER_PASSWORD> \ --docker-email=<YOUR_DOCKER_EMAIL> \ --dry-run=server -o json | jq '.data.".dockerconfigjson"' -r
Укажите строку из вывода команды в поле
cluster_config.docker_image_pull_secretконфигурационного файла агента для Kubernetes/opt/acronis/etc/dsp.k8s/k8s-agent.json.
Файл с учетными данными для доступа во внутренний Docker-репозиторий
Создайте файл с учетными данными, выполнив команду:
kubectl create secret docker-registry regcred \ --docker-server=<YOUR_INTERNAL_DOCKER_REGISTRY> \ --docker-username=<YOUR_DOCKER_USER> \ --docker-password=<YOUR_DOCKER_PASSWORD> \ --docker-email=<YOUR_DOCKER_EMAIL> \ -dry-run=server -o json | jq '.data.".dockerconfigjson"' -r | base64 -d > <YOUR_DOCKER_CREDENTIALS_FILE.json>
Разместите полученный файл с учетными данными на машине с агентом для Kubernetes.
Укажите путь к файлу с учетными данными в поле
cluster_config.docker_image_pull_secretконфигурационного файла агента для Kubernetes/opt/acronis/etc/dsp.k8s/k8s-agent.json.
Перезапустите агент для Kubernetes:
/opt/acronis/aakore restart --unit dsp.k8s

